Новости о выявление критической уязвимости (уже указан в CVE-2021-43527) en набор криптографических библиотек NSS (Услуги сетевой безопасности) из Mozilla, что может привести к выполнению вредоносного кода при обработке цифровых подписей DSA или RSA-PSS, указанных с помощью DER (Distinguished Encoding Rules).
Проблема проявляется в приложениях, использующих NSS для обработки цифровых подписей CMS, S / MIME, PKCS № 7 и PKCS № 12, или при проверке сертификатов в развертываниях TLS, X.509, OCSP и CRL. Уязвимость может возникнуть в различных клиентских и серверных приложениях с поддержкой TLS, DTLS и S / MIME, в почтовых клиентах и программах просмотра PDF, которые используют вызов NSS CERT_VerifyCertificate () для проверки цифровых подписей.
LibreOffice, Evolution и Evince упоминаются как примеры уязвимых приложений.. Потенциально проблема также может затронуть такие проекты, как Pidgin, Apache OpenOffice, Suricata, Curl и другие.
Al mismo tiempo, уязвимость не проявляется в Firefox, Thunderbird и Tor Browser, которые используют для проверки отдельную библиотеку mozilla :: pkix, которая также является частью NSS. В Браузеры на базе Chrome (если они не были специально скомпилированы с NSS), которые использовали NSS до 2015 года, но затем были перенесены в BoringSSL, они не затронуты проблемой.
Уязвимость возникает из-за ошибки в коде проверки сертификата в vfy_CreateContext. функция файла secvfy.c. Ошибка проявляется как при чтении клиентом сертификата с сервера как когда сервер обрабатывает сертификаты клиента.
При проверке цифровой подписи в формате DER NSS декодирует подпись в буфер фиксированного размера и передает этот буфер в модуль PKCS # 11. Во время постобработки для подписей DSA и RSA-PSS размер проверяется неправильно, в результате в котором приводит к переполнению выделенного буфера для структуры VFYContextStr, если размер цифровой подписи превышает 16384 бита (для буфера выделяется 2048 байтов, но не проверено, что подпись может быть больше).
Код, содержащий уязвимость, восходит к 2003 году., но это не представляло угрозы до рефакторинга в 2012 году. В 2017 году такая же ошибка была сделана при реализации поддержки RSA-PSS. Для проведения атаки не требуется ресурсоемкая генерация определенных ключей для получения необходимых данных, поскольку переполнение происходит на этапе, предшествующем проверке действительности цифровой подписи. Часть данных, выходящая за границы, записывается в область памяти, которая содержит указатели на функции, что упрощает создание рабочих эксплойтов.
Уязвимость обнаружили исследователи Google Project Zero. во время экспериментов с новыми методами тестирования фаззинга и является хорошей демонстрацией того, как тривиальные уязвимости могут долгое время оставаться незамеченными в хорошо протестированном известном проекте.
Что касается основные проблемы, для которых проблема осталась незамеченной надолго:
- Библиотека накопителей NSS и тесты фаззинга проводились не полностью, а на уровне отдельных компонентов.
- Например, код для декодирования сертификатов DER и обработки сертификатов проверялся отдельно; В ходе фаззинга вполне мог быть получен сертификат, что привело к проявлению рассматриваемой уязвимости, но его проверка не дошла до проверочного кода и проблема не была выявлена.
- Во время фаззинга были установлены строгие ограничения на размер вывода (10,000 10,000 байт) при отсутствии таких ограничений в NSS (многие структуры в нормальном режиме могут иметь размер более 2 24 байт, поэтому для выявления проблем требуется больше входных данных. ). Для полной проверки предел должен составлять 1 16 -XNUMX байта (XNUMX МБ), что соответствует максимальному размеру сертификата, разрешенному в TLS.
- Заблуждение о покрытии кода фаззинг-тестами. Уязвимый код активно тестировался, но с использованием фазеров, которые не могли сгенерировать необходимые входные данные. Например, fuzzer tls_server_target использовал предопределенный набор готовых сертификатов, который ограничивал проверку кода проверки сертификата только сообщениями TLS и изменениями состояния протокола.
Наконец, Стоит отметить, что проблема с кодовым именем BigSig была исправлена в NSS 3.73 и NSS ESR 3.68.1. а обновления решения в виде пакетов уже были выпущены в различных дистрибутивах: Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD и т. д.
Если вы хотите узнать об этом больше, вы можете проконсультироваться по следующей ссылке.