
RSA Key Checker per CVE-2022-20866
Una vulnerabilità nella gestione delle chiavi RSA su dispositivi che eseguono il software Cisco Adaptive Security Appliance e Firepower Threat Defense Software potrebbe consentire a un attaccante remoto non autenticato di recuperare la chiave privata RSA. Questa vulnerabilità è dovuta a un errore logico quando la chiave RSA viene memorizzata in memoria su una piattaforma hardware che esegue crittografia basata su hardware. Un attaccante potrebbe sfruttare questa vulnerabilità utilizzando un attacco side-channel di Lenstra contro il dispositivo bersaglio. Un attacco riuscito potrebbe consentire all'attaccante di recuperare la chiave privata RSA.
Le seguenti condizioni potrebbero essere osservate in un dispositivo vulnerabile:
Questo strumento consente di verificare la chiave RSA privata nei dispositivi Cisco ASA o FTD.
L'avviso di sicurezza Cisco è disponibile al seguente link: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
Lo scopo dello strumento key_check.py è analizzare le chiavi esportate da ASA o FTD per verificare la suscettibilità alla "Vulnerabilità di Fuga della Chiave Privata RSA Cisco (CVE-2022-20866)".
key_check.py è uno strumento supportato dalla comunità che funziona in ambiente shell Linux e ha le seguenti dipendenze:
Questo strumento è progettato per essere indipendente dalla piattaforma ed è stato testato sulle seguenti configurazioni di piattaforma:
Sintassi:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
Parametri:
-h
visualizza le informazioni di aiuto
--pkcs12
Il nome del file contenente la chiave da analizzare in formato base64
codificato PKCS12. Questo file viene esportato dal dispositivo ASA
o FTD utilizzando la procedura descritta di seguito.
--passwd
La password necessaria per decifrare il PKCS12. Questo è lo
stesso valore inserito nella CLI ASA o FTD durante
l'esportazione della chiave. Se questa opzione non viene specificata,
lo strumento chiederà la password.
Questa sezione descrive come esportare una chiave dal dispositivo ASA. Questa procedura dovrà essere seguita per ogni chiave da analizzare. Ci sono 2 scenari:
I trustpoint consentono di gestire e tracciare le autorità di certificazione (CA) e i certificati. Un trustpoint è una rappresentazione di una CA o di una coppia di identità. Un trustpoint include l'identità della CA, i parametri di configurazione specifici della CA e un'associazione con un certificato di identità registrato. Se la coppia di chiavi è utilizzata in un certificato configurato su ASA, allora la coppia di chiavi può essere esportata inserendo:
# asa(config)# crypto ca export <tpname> pkcs12 test
dove è il nome del trustpoint.
Se la chiave non è presente in un certificato configurato su ASA, è necessario creare un trustpoint temporaneo e registrarlo con un certificato autofirmato.
Si supponga che keyname sia il nome della coppia di chiavi da esportare. Si supponga che temptp sia un nome utilizzato per un trustpoint temporaneo
# 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
Ora genera il PKCS12:
# asa(config)# crypto ca export xtp pkcs12 test
Le due procedure sopra (1, 2) scaricheranno un p12 codificato in base64 con password "test" sulla console. Inserire tutte le righe di output in un file di testo. Questo file sarà utilizzato come input per lo strumento.
Sui dispositivi FTD, la procedura richiede l'uso di FMC come segue. Notare che le chiavi non sono gestibili indipendentemente su FTD, quindi tutte le chiavi dovrebbero avere un certificato associato.
Quanto segue è incluso a scopo di validazione visiva di come dovrebbe apparire il contenuto di un file PKCS12 esportato:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<lines omitted>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
L'uso dello strumento è mostrato attraverso i seguenti esempi che dimostrano tutti i possibili risultati.
linux> ./key_check.py --passwd test --pkcs12 valid_normal.p12.b64
La chiave RSA è valida.
linux> ./key_check.py --passwd test --pkcs12 valid_short.p12.b64
La chiave RSA è valida ma è vulnerabile all'esposizione se utilizzata in versioni del prodotto affette dalla Vulnerabilità di Fuga della Chiave Privata Cisco (CVE-2022-20866). Se ciò è stato fatto, questa chiave non dovrebbe più essere utilizzata.
linux> ./key_check.py --passwd test --pkcs12 inval_not_vulnerable.p12.b64
La chiave RSA non è valida a causa della Vulnerabilità di Fuga della Chiave Privata RSA Cisco (CVE-2022-20866) ma non presenta caratteristiche note di esposizione. Si raccomanda di sostituire questa chiave.
linux> ./key_check.py --passwd test --pkcs12 inval_vulnerable.p12.b64
La chiave RSA non è valida ed è vulnerabile all'esposizione a causa della Vulnerabilità di Fuga della Chiave Privata RSA Cisco (CVE-2022-20866). Questa chiave non dovrebbe più essere utilizzata.
linux> ./key_check.py --passwd test2 --pkcs12 valid_normal.p12.b64
ERRORE: Errore di verifica Mac: password non valida?
linux> ./key_check.py --passwd test --pkcs12 bad_file.txt
ERRORE: 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
ERRORE: 140300676220816:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:p_lib.c:287: