
Comprobador de claves RSA para CVE-2022-20866
Una vulnerabilidad en el manejo de claves RSA en dispositivos que ejecutan el software Cisco Adaptive Security Appliance y el software Cisco Firepower Threat Defense podría permitir que un atacante remoto no autenticado recupere la clave privada RSA. Esta vulnerabilidad se debe a un error lógico cuando la clave RSA se almacena en memoria en una plataforma de hardware que realiza criptografía basada en hardware. Un atacante podría explotar esta vulnerabilidad utilizando un ataque de canal lateral de Lenstra contra el dispositivo objetivo. Una explotación exitosa podría permitir al atacante recuperar la clave privada RSA.
En un dispositivo vulnerable podrían observarse las siguientes condiciones:
Esta herramienta le permite comprobar la clave RSA privada en dispositivos Cisco ASA o FTD.
El aviso de seguridad de Cisco está disponible en el siguiente enlace: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
El propósito de la herramienta key_check.py es analizar claves exportadas desde ASA o FTD para determinar su susceptibilidad a la "Vulnerabilidad de Filtración de Clave Privada RSA de Cisco (CVE-2022-20866)".
La herramienta key_check.py es una herramienta compatible con la comunidad que se ejecuta en el entorno de shell de Linux y tiene las siguientes dependencias:
Esta herramienta está diseñada para ser independiente de la plataforma y ha sido probada en las siguientes configuraciones de plataforma:
Sintaxis:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
Parámetros:
-h
mostrar información de ayuda
--pkcs12
El nombre del archivo que contiene la clave a analizar en formato
PKCS12 codificado en base64. Este archivo se exporta desde el
dispositivo ASA o FTD siguiendo el procedimiento descrito más abajo.
--passwd
La contraseña necesaria para descifrar el PKCS12. Este es el
mismo valor que se introdujo en la CLI de ASA o FTD al
exportar la clave. Si no se especifica esta opción, la
herramienta solicitará la contraseña.
Esta sección describe cómo exportar una clave desde un dispositivo ASA. Este procedimiento deberá seguirse para cada clave que se desee analizar. Hay 2 escenarios:
Los trustpoints permiten gestionar y rastrear autoridades de certificación (CA) y certificados. Un trustpoint es una representación de una CA o par de identidad. Un trustpoint incluye la identidad de la CA, parámetros de configuración específicos de la CA, y una asociación con un certificado de identidad inscrito. Si el par de claves se utiliza en un certificado configurado en ASA, entonces el par de claves se puede exportar escribiendo:
# asa(config)# crypto ca export <tpname> pkcs12 test
donde es el nombre del trustpoint.
Si la clave no está presente en un certificado configurado en ASA, entonces se debe crear un trustpoint temporal e inscribirlo con un certificado autofirmado.
Suponga que keyname es el nombre del par de claves que se va a exportar. Suponga que temptp es un nombre utilizado para un trustpoint temporal.
# 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
Ahora genere el PKCS12:
# asa(config)# crypto ca export xtp pkcs12 test
Los dos procedimientos anteriores (1, 2) volcarán un p12 codificado en base64 con contraseña "test" en la consola. Coloque todas las líneas de salida en un archivo de texto. Este archivo se utilizará como entrada para la herramienta.
En dispositivos FTD, el procedimiento requiere el uso de FMC de la siguiente manera. Tenga en cuenta que las claves no son gestionables de forma independiente en FTD, por lo que todas las claves deben tener un certificado asociado.
Lo siguiente se incluye con el propósito de validación visual de cómo deberían verse los contenidos de un archivo PKCS12 exportado:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<lines omitted>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
El uso de la herramienta se muestra a través de los siguientes ejemplos que demuestran todos los resultados posibles.
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: