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.
Où on le rencontre
Section intitulée « Où on le rencontre »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 04695B131B245E03251807username admin password 7 04695B131B245E03251807Le 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 mécanisme
Section intitulée « Le mécanisme »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.
Décoder le mot de passe
Section intitulée « Décoder le mot de passe »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-LabChaque 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.
Quel type utiliser à la place
Section intitulée « Quel type utiliser à la place »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.
| Type | Algorithme | Réversible | Usage |
|---|---|---|---|
| 7 | XOR à clé statique | Oui, trivial | À proscrire |
| 5 | MD5 salé | Non, mais cassable au dictionnaire | Hérité, faible |
| 8 | PBKDF2-SHA256 | Non | Recommandé |
| 9 | scrypt | Non | Recommandé |
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.
À retenir
Section intitulée « À retenir »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.