
Vérificateur de clés RSA pour CVE-2022-20866
Une vulnérabilité dans la gestion des clés RSA sur les appareils exécutant le logiciel Cisco Adaptive Security Appliance et le logiciel Firepower Threat Defense pourrait permettre à un attaquant distant non authentifié de récupérer la clé privée RSA. Cette vulnérabilité est due à une erreur logique lorsque la clé RSA est stockée en mémoire sur une plateforme matérielle qui effectue de la cryptographie basée sur le matériel. Un attaquant pourrait exploiter cette vulnérabilité en utilisant une attaque par canal auxiliaire Lenstra contre l'appareil ciblé. Une exploitation réussie pourrait permettre à l'attaquant de récupérer la clé privée RSA.
Les conditions suivantes peuvent être observées sur un appareil vulnérable :
Cet outil vous permet de vérifier la clé RSA privée dans les appareils Cisco ASA ou FTD.
L'avis de sécurité Cisco est disponible au lien suivant : https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
Le but de l'outil key_check.py est d'analyser les clés exportées depuis ASA ou FTD pour leur susceptibilité à la "Vulnérabilité de fuite de clé privée RSA Cisco (CVE-2022-20866)".
Le key_check.py est un outil soutenu par la communauté qui s'exécute dans l'environnement shell Linux et a les dépendances suivantes :
Cet outil est conçu pour être indépendant de la plateforme et a été testé sur les configurations suivantes :
Syntaxe :
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
Paramètres :
-h
affiche les informations d'aide
--pkcs12
Le nom du fichier contenant la clé à analyser au format PKCS12 encodé en base64.
Ce fichier est exporté depuis l'appareil ASA ou FTD en utilisant la procédure décrite ci-dessous.
--passwd
Le mot de passe requis pour déchiffrer le PKCS12. C'est la même valeur qui a été saisie
sur la CLI de l'ASA ou du FTD lors de l'export de la clé. Si cette option n'est pas spécifiée,
l'outil demandera le mot de passe.
Cette section décrit comment exporter une clé depuis l'appareil ASA. Cette procédure devra être suivie pour chaque clé à analyser. Il y a 2 scénarios :
Les trustpoints vous permettent de gérer et de suivre les autorités de certification (CA) et les certificats. Un trustpoint est une représentation d'une paire CA ou identité. Un trustpoint inclut l'identité de la CA, des paramètres de configuration spécifiques à la CA, et une association avec un certificat d'identité inscrit. Si la paire de clés est utilisée dans un certificat configuré sur ASA, alors la paire de clés peut être exportée en saisissant :
# asa(config)# crypto ca export <tpname> pkcs12 test
où est le nom du trustpoint.
Si la clé n'est pas présente dans un certificat configuré sur ASA, alors un trustpoint temporaire doit être créé et inscrit avec un certificat auto-signé.
Supposons que keyname est le nom de la paire de clés à exporter. Supposons que temptp est un nom utilisé pour un trustpoint temporaire
# asa(config)# crypto ca trustpoint temptp
# asa(config-ca-trustpoint)# keypair keyname
# asa(config-ca-trustpoint)# subject-name cn=temp
# asa(config-ca-trustpoint)# no serial-number
# asa(config-ca-trustpoint)# enroll self
# asa(config-ca-trustpoint)# crypto ca enroll temp noconfirm
Maintenant générez le PKCS12 :
# asa(config)# crypto ca export xtp pkcs12 test
Les deux procédures ci-dessus (1, 2) vont afficher un p12 encodé en base64 avec le mot de passe "test" sur la console. Placez toutes les lignes de sortie dans un fichier texte. Ce fichier sera utilisé comme entrée pour l'outil.
Sur les appareils FTD, la procédure nécessite l'utilisation de FMC comme suit. Notez que les clés ne sont pas gérées indépendamment sur FTD, donc toutes les clés doivent avoir un certificat associé.
Ce qui suit est inclus à des fins de validation visuelle de ce à quoi devrait ressembler le contenu d'un fichier PKCS12 exporté :
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<lines omitted>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
L'utilisation de l'outil est illustrée par les exemples suivants qui montrent tous les résultats possibles.
linux> ./key_check.py --passwd test --pkcs12 valid_normal.p12.b64
The RSA key is valid.
linux> ./key_check.py --passwd test --pkcs12 valid_short.p12.b64
The RSA key is valid but is vulnerable to exposure if used in product versions that are affected by the Cisco Private Key Leak Vulnerability (CVE-2022-20866). If this was done, this key should no longer be used.
linux> ./key_check.py --passwd test --pkcs12 inval_not_vulnerable.p12.b64
The RSA key is invalid due to the Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866) but does not have known exposure characteristics. It is recommended that this key be replaced.
linux> ./key_check.py --passwd test --pkcs12 inval_vulnerable.p12.b64
The RSA key is invalid and vulnerable to exposure due to the Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866). This key should no longer be used.
linux> ./key_check.py --passwd test2 --pkcs12 valid_normal.p12.b64
ERROR: Mac verify error: invalid password?
linux> ./key_check.py --passwd test --pkcs12 bad_file.txt
ERROR: 139710534743952:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:157:
linux> ./key_check.py --passwd test --pkcs12 ecdsa.p12.b64
ERROR: 140300676220816:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:p_lib.c:287: