
Verificador de Chaves RSA para CVE-2022-20866
Uma vulnerabilidade no tratamento de chaves RSA em dispositivos que executam o Cisco Adaptive Security Appliance Software e o Firepower Threat Defense Software poderia permitir que um invasor remoto não autenticado recuperasse a chave privada RSA. Essa vulnerabilidade se deve a um erro lógico quando a chave RSA é armazenada na memória em uma plataforma de hardware que realiza criptografia baseada em hardware. Um invasor poderia explorar essa vulnerabilidade usando um ataque de canal lateral Lenstra contra o dispositivo alvo. Uma exploração bem-sucedida poderia permitir que o invasor recuperasse a chave privada RSA.
As seguintes condições podem ser observadas em um dispositivo vulnerável:
Esta ferramenta permite verificar a chave RSA privada em dispositivos Cisco ASA ou FTD.
O advisory de segurança da Cisco está disponível no seguinte link: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
O objetivo da ferramenta key_check.py é analisar chaves exportadas de ASA ou FTD quanto à suscetibilidade à "Vulnerabilidade de Vazamento de Chave Privada RSA da Cisco (CVE-2022-20866)".
O key_check.py é uma ferramenta apoiada pela comunidade que é executada no ambiente shell Linux e possui as seguintes dependências:
Esta ferramenta foi projetada para ser independente de plataforma e foi testada nas seguintes configurações de plataforma:
Sintaxe:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
Parâmetros:
-h
exibe informações de ajuda
--pkcs12
O nome do arquivo contendo a chave a ser analisada no formato
PKCS12 codificado em base64. Este arquivo é exportado do dispositivo ASA
ou FTD usando o procedimento descrito abaixo.
--passwd
A senha necessária para descriptografar o PKCS12. Este é o
mesmo valor que foi inserido na CLI do ASA ou FTD durante a
exportação da chave. Se esta opção não for especificada, a
ferramenta solicitará a senha.
Esta seção descreve como exportar uma chave do dispositivo ASA. Este procedimento precisará ser seguido para cada chave que será analisada. Existem 2 cenários:
Trustpoints permitem gerenciar e rastrear Autoridades Certificadoras (CAs) e certificados. Um trustpoint é uma representação de um par CA ou de identidade. Um trustpoint inclui a identidade da CA, parâmetros de configuração específicos da CA e uma associação com um certificado de identidade inscrito. Se o par de chaves for usado em um certificado configurado no ASA, então o par de chaves pode ser exportado digitando:
# asa(config)# crypto ca export <tpname> pkcs12 test
onde é o nome do trustpoint.
Se a chave não estiver presente em um certificado configurado no ASA, então um trustpoint temporário precisa ser criado e inscrito com um certificado autoassinado.
Assuma que keyname é o nome do par de chaves a ser exportado. Assuma que temptp é um nome usado para um trustpoint temporário.
# 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
Agora gere o PKCS12:
# asa(config)# crypto ca export xtp pkcs12 test
Os dois procedimentos acima (1, 2) irão despejar um p12 codificado em base64 com senha "test" no console. Coloque todas as linhas de saída em um arquivo de texto. Este arquivo será usado como entrada para a ferramenta.
Em dispositivos FTD, o procedimento requer o uso do FMC da seguinte forma. Observe que as chaves não são gerenciáveis independentemente no FTD, portanto, todas as chaves devem ter um certificado associado.
O seguinte é incluído para fins de validação visual de como devem ser os conteúdos de um arquivo PKCS12 exportado:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<linhas omitidas>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
O uso da ferramenta é mostrado através dos seguintes exemplos que demonstram todos os resultados possíveis.
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: