
Проверка RSA-ключей для CVE-2022-20866
Уязвимость в обработке RSA-ключей на устройствах под управлением ПО Cisco Adaptive Security Appliance и Firepower Threat Defense может позволить неаутентифицированному удалённому злоумышленнику получить закрытый ключ RSA. Эта уязвимость вызвана логической ошибкой при хранении RSA-ключа в памяти на аппаратной платформе, выполняющей аппаратную криптографию. Злоумышленник может использовать её с помощью Lenstra-атаки по стороннему каналу на целевое устройство. Успешная эксплуатация может позволить злоумышленнику получить закрытый ключ RSA.
На уязвимом устройстве могут наблюдаться следующие условия:
Этот инструмент позволяет проверить закрытый ключ RSA на устройствах Cisco ASA или FTD.
Бюллетень безопасности Cisco доступен по следующей ссылке: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
Назначение инструмента key_check.py — анализ ключей, экспортированных из ASA или FTD, на предмет подверженности «Уязвимости утечки закрытого ключа RSA в Cisco (CVE-2022-20866)».
Инструмент key_check.py является инструментом, поддерживаемым сообществом, и работает в среде командной строки Linux со следующими зависимостями:
Этот инструмент разработан как платформонезависимый и протестирован на следующих конфигурациях платформ:
Синтаксис:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
Параметры:
-h
отобразить справочную информацию
--pkcs12
Имя файла, содержащего ключ для анализа в формате base64,
закодированном в PKCS12. Этот файл экспортируется из устройства ASA
или FTD с помощью процедуры, описанной ниже.
--passwd
Пароль, необходимый для расшифровки PKCS12. Это то же значение,
которое было введено в командной строке ASA или FTD при экспорте ключа.
Если этот параметр не указан, инструмент запросит пароль.
В этом разделе описывается, как экспортировать один ключ с устройства ASA. Эту процедуру необходимо будет выполнить для каждого ключа, который требуется проанализировать. Существует 2 сценария:
Точки доверия позволяют управлять центрами сертификации (CA) и сертификатами. Точка доверия — это представление центра сертификации или пары идентификаторов. Точка доверия включает идентификатор центра сертификации, параметры конфигурации, специфичные для центра сертификации, и ассоциацию с одним зарегистрированным сертификатом идентификации. Если пара ключей используется в сертификате, настроенном на ASA, то пару ключей можно экспортировать, введя:
# asa(config)# crypto ca export <tpname> pkcs12 test
где — имя точки доверия.
Если ключ отсутствует в сертификате, настроенном на ASA, необходимо создать временную точку доверия и зарегистрировать её с самозаверяющим сертификатом.
Предположим, keyname — имя экспортируемой пары ключей. Предположим, temptp — имя для временной точки доверия.
# 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
Теперь сгенерируйте PKCS12:
# asa(config)# crypto ca export xtp pkcs12 test
Обе описанные выше процедуры (1, 2) выведут на консоль кодированный в base64 p12 с паролем "test". Поместите все строки вывода в текстовый файл. Этот файл будет использоваться в качестве входных данных для инструмента.
На устройствах FTD процедура требует использования FMC следующим образом. Обратите внимание, что ключи не являются независимо управляемыми на FTD, поэтому все ключи должны иметь связанный сертификат.
Ниже приведено визуальное подтверждение того, как должно выглядеть содержимое экспортированного файла PKCS12:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<lines omitted>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
Использование инструмента показано в следующих примерах, демонстрирующих все возможные результаты.
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: