Aller au contenu

Mots de passe Cisco Type 7 : un masquage réversible, pas un chiffrement

Dans une configuration Cisco IOS, les mots de passe marqués 7 donnent l’illusion d’être protégés. Le Type 7 n’est pas un vrai algorithme cryptographique : c’est un masquage réversible, un XOR avec une clé statique connue de tous. Quiconque met la main sur une configuration récupère les mots de passe en clair en quelques opérations.

Le Type 7 apparaît dans le running-config ou le startup-config d’un équipement, produit par la commande service password-encryption :

enable password 7 04695B131B245E03251807
username admin password 7 04695B131B245E03251807

Le 7 indique le type d’encodage. La chaîne hexadécimale qui suit est le mot de passe masqué. Une configuration obtenue par un transfert TFTP mal protégé, un fichier de sauvegarde ou un SNMP trop ouvert suffit à exposer ces valeurs.

Le Type 7 repose sur deux éléments : une clé de masquage statique, identique sur tous les équipements Cisco IOS, et un index de départ inscrit dans la chaîne elle-même.

  • Les deux premiers caractères de la chaîne encodent l’index de départ dans la clé.
  • Le reste est une suite d’octets en hexadécimal, chacun résultant du XOR entre un caractère du mot de passe et un octet de la clé, l’index avançant à chaque caractère.

La clé étant publique et le procédé réversible, le décodage est immédiat.

De nombreux outils en ligne effectuent l’opération, comme le décodeur de FrameIP. Hors ligne, une fonction courte suffit :

CISCO_KEY = "dsfd;kfoA,.iyewrkldJKDHSUBsgvca69834ncxv9873254k;fg87"
def decode_cisco_type7(encrypted: str) -> str:
index = int(encrypted[:2]) # index de départ, deux premiers caractères
clear = ""
for i in range(2, len(encrypted), 2):
byte = int(encrypted[i:i + 2], 16) # octet masqué en hexadécimal
clear += chr(byte ^ ord(CISCO_KEY[index]))
index += 1
return clear
print(decode_cisco_type7("04695B131B245E03251807")) # -> R0uter-Lab

Chaque paire hexadécimale est XORée avec l’octet de clé correspondant, l’index progressant d’un cran à chaque caractère. La chaîne d’exemple 04695B131B245E03251807 redonne R0uter-Lab.

service password-encryption n’offre aucune protection réelle, il ne fait qu’appliquer ce masquage réversible. Les autres types de la plateforme sont de vrais algorithmes de dérivation.

TypeAlgorithmeRéversibleUsage
7XOR à clé statiqueOui, trivialÀ proscrire
5MD5 saléNon, mais cassable au dictionnaireHérité, faible
8PBKDF2-SHA256NonRecommandé
9scryptNonRecommandé

La bonne pratique consiste à définir les secrets avec un type moderne, via enable secret et les options algorithm-type, plutôt que password :

enable algorithm-type sha256 secret <mot_de_passe>
username admin algorithm-type scrypt secret <mot_de_passe>

Ces commandes produisent du Type 8 ou 9, non réversibles. Il reste ensuite à protéger les configurations elles-mêmes : accès restreint, transferts chiffrés, sauvegardes contrôlées.

Un mot de passe Cisco marqué 7 dans une configuration n’est pas chiffré, il est masqué avec une clé publique. Le décoder ne demande ni cassage ni dictionnaire, seulement d’appliquer le XOR inverse. La commande service password-encryption entretient une fausse impression de sécurité ; les vrais secrets se définissent en Type 8 (PBKDF2) ou 9 (scrypt) avec enable secret, et les configurations qui les contiennent doivent être traitées comme des données sensibles.