
RSA Key Checker für CVE-2022-20866
Eine Schwachstelle in der Verarbeitung von RSA-Schlüsseln auf Geräten, die die Cisco Adaptive Security Appliance Software und Firepower Threat Defense Software ausführen, könnte einem nicht authentifizierten, entfernten Angreifer ermöglichen, den privaten RSA-Schlüssel abzurufen. Diese Schwachstelle ist auf einen Logikfehler zurückzuführen, wenn der RSA-Schlüssel auf einer Hardwareplattform, die hardwarebasierte Kryptographie durchführt, im Speicher abgelegt wird. Ein Angreifer könnte diese Schwachstelle ausnutzen, indem er einen Lenstra-Seitenkanalangriff gegen das Zielgerät durchführt. Ein erfolgreicher Angriff könnte es dem Angreifer ermöglichen, den privaten RSA-Schlüssel abzurufen.
Bei einem anfälligen Gerät könnten die folgenden Bedingungen beobachtet werden:
Dieses Tool ermöglicht es Ihnen, den privaten RSA-Schlüssel auf Cisco ASA- oder FTD-Geräten zu überprüfen.
Der Cisco Security Advisory ist unter folgendem Link verfügbar: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
Der Zweck des Tools key_check.py ist es, Schlüssel zu analysieren, die von ASA oder FTD exportiert wurden, um ihre Anfälligkeit für die "Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866)" zu überprüfen.
key_check.py ist ein von der Community unterstütztes Tool, das in der Linux-Shell-Umgebung läuft und die folgenden Abhängigkeiten hat:
Dieses Tool ist plattformunabhängig konzipiert und wurde auf den folgenden Plattformkonfigurationen getestet:
Syntax:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
Parameter:
-h
Hilfeinformationen anzeigen
--pkcs12
Der Name der Datei, die den zu analysierenden Schlüssel im base64-
codierten PKCS12-Format enthält. Diese Datei wird vom ASA-
oder FTD-Gerät mit dem unten beschriebenen Verfahren exportiert.
--passwd
Das Passwort, das zum Entschlüsseln des PKCS12 erforderlich ist. Dies ist der
gleiche Wert, der beim Exportieren des Schlüssels auf der ASA- oder FTD-CLI eingegeben wurde.
Wenn diese Option nicht angegeben wird, fordert das Tool zur Eingabe des Passworts auf.
Dieser Abschnitt beschreibt, wie ein Schlüssel vom ASA-Gerät exportiert wird. Dieses Verfahren muss für jeden zu analysierenden Schlüssel durchgeführt werden. Es gibt 2 Szenarien:
Trustpoints ermöglichen die Verwaltung und Verfolgung von Zertifizierungsstellen (CAs) und Zertifikaten. Ein Trustpoint ist eine Darstellung einer CA oder eines Identitätspaars. Ein Trustpoint enthält die Identität der CA, CA-spezifische Konfigurationsparameter und eine Zuordnung zu einem registrierten Identitätszertifikat. Wenn das Schlüsselpaar in einem Zertifikat verwendet wird, das auf der ASA konfiguriert ist, dann kann das Schlüsselpaar durch Eingabe von exportiert werden:
# asa(config)# crypto ca export <tpname> pkcs12 test
wobei der Name des Trustpoints ist.
Wenn der Schlüssel nicht in einem auf der ASA konfigurierten Zertifikat vorhanden ist, muss ein temporärer Trustpoint erstellt und mit einem selbstsignierten Zertifikat registriert werden.
Angenommen, keyname ist der Name des zu exportierenden Schlüsselpaares. Angenommen, temptp ist ein Name, der für einen temporären Trustpoint verwendet wird
# 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
Jetzt das PKCS12 generieren:
# asa(config)# crypto ca export xtp pkcs12 test
Die beiden obigen Verfahren (1, 2) geben ein base64-codiertes p12 mit dem Passwort "test" auf der Konsole aus. Fügen Sie alle Ausgabezeilen in eine Textdatei ein. Diese Datei wird als Eingabe für das Tool verwendet.
Auf FTD-Geräten erfordert das Verfahren die Verwendung von FMC wie folgt. Beachten Sie, dass Schlüssel auf FTD nicht unabhängig verwaltet werden können, daher sollten alle Schlüssel ein zugehöriges Zertifikat haben.
Das Folgende dient zur visuellen Validierung des Inhalts einer exportierten PKCS12-Datei, der wie folgt aussehen sollte:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<Zeilen ausgelassen>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
Die Verwendung des Tools wird anhand der folgenden Beispiele gezeigt, die alle möglichen Ergebnisse demonstrieren.
linux> ./key_check.py --passwd test --pkcs12 valid_normal.p12.b64
Der RSA-Schlüssel ist gültig.
linux> ./key_check.py --passwd test --pkcs12 valid_short.p12.b64
Der RSA-Schlüssel ist gültig, aber anfällig für Offenlegung, wenn er in Produktversionen verwendet wird, die von der Cisco Private Key Leak Vulnerability (CVE-2022-20866) betroffen sind. Falls dies geschehen ist, sollte dieser Schlüssel nicht mehr verwendet werden.
linux> ./key_check.py --passwd test --pkcs12 inval_not_vulnerable.p12.b64
Der RSA-Schlüssel ist aufgrund der Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866) ungültig, weist jedoch keine bekannten Exposure-Eigenschaften auf. Es wird empfohlen, diesen Schlüssel zu ersetzen.
linux> ./key_check.py --passwd test --pkcs12 inval_vulnerable.p12.b64
Der RSA-Schlüssel ist ungültig und aufgrund der Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866) anfällig für Offenlegung. Dieser Schlüssel sollte nicht mehr verwendet werden.
linux> ./key_check.py --passwd test2 --pkcs12 valid_normal.p12.b64
FEHLER: Mac verify error: invalid password?
linux> ./key_check.py --passwd test --pkcs12 bad_file.txt
FEHLER: 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
FEHLER: 140300676220816:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:p_lib.c:287: