The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в Mozilla NSS, позволяющая выполнить код при обработке сертификатов

02.12.2021 15:57

В наборе криптографических библиотек NSS (Network Security Services), развиваемых компанией Mozilla, выявлена критическая уязвимость (CVE-2021-43527), которая может привести к выполнению кода злоумышленника при обработке цифровых подписей DSA или RSA-PSS, заданных с использованием метода кодирования DER (Distinguished Encoding Rules). Проблема, которой присвоено кодовое имя BigSig, устранена в выпусках NSS 3.73 и NSS ESR 3.68.1. Обновления пакетов в дистрибутивах доступны для Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Пока недоступны обновления для Fedora.

Проблема проявляется в приложениях, использующих 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, Сhrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss для http-сервера Apache, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. При этом уязвимость не проявляется в Firefox, Thunderbird и Tor Browser, в которых для верификации используется отдельная библиотека mozilla::pkix, также входящая в состав NSS. Проблеме не подвержены и браузеры на основе Chromium (если они специально не собраны c 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 в ходе экспериментов с новыми методами fuzzing-тестирования и является хорошей демонстрации того, как в широко протестированном известном проекте могут длительное время оставаться незамеченными тривиальные уязвимости:

  • Код NSS сопровождается опытной командой, отвечающей за безопасность, применяющей современные методы тестирования и анализа ошибок. Действует несколько программ по выплате существенных вознаграждений за выявление уязвимостей в NSS.
  • NSS был одним из первых проектов подключившихся в инициативе Google oss-fuzz и также проверялся в развиваемой Mozilla системе fuzzing-тестирования на базе libFuzzer.
  • Код библиотеки многократно проверялся в различных статических анализаторах, в том числе с 2008 года отслеживался сервисом Coverity.
  • До 2015 года NSS использовался в Google Chrome и независимо от Mozilla проверялся командой Google (с 2015 года Chrome перешёл на BoringSSL, но поддержка порта на базе NSS сохраняется).

Основные проблемы, из-за которых проблема долгое время оставалась незамеченной:

  • NSS модульная библиотека и fuzzing-тестирование проводилось не в целом, а на уровне отдельных компонентов. Например, отдельно проверялся код декодирования DER и обработки сертификатов - в ходе fuzzing-а вполне мог быть получен сертификат, приводящий к проявлению рассматриваемой уязвимости, но его проверка не доходила до кода верификации и проблема не обнаруживала себя.
  • При fuzzing-тестировании задавались жёсткие ограничения на размер вывода (10000 байт) при отсутствии подобных ограничений в NSS (многие структуры в штатном режиме могли иметь размер больше 10000 байт, поэтому для выявления проблем требовался больший объём входных данных). Для полноценной проверки лимит должен был быть 224-1 байт (16 МБ), что соответствует максимальному размеру сертификата, допустимого в TLS.
  • Неверное представление об охвате кода fuzzing-тестированием. Уязвимый код активно тестировался, но с использованием fuzzer-ов, не способных сгенерировать необходимые входные данные. Например, fuzzer tls_server_target использовал предопределённый набор готовых сертификатов, что ограничивало проверку кода верификации сертификата только TLS-сообщениями и изменениями состояния протокола.


  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Обновление Firefox 32.0.3 и Chrome 37.0.2062.124 с устранением уязвимости в NSS
  3. OpenNews: Уязвимость в GnuTLS, позволяющая возобновить сеанс TLS 1.3 без знания ключа
  4. OpenNews: Mozilla, Cloudflare и Facebook представили TLS-расширение для делегирования короткоживущих сертификатов
  5. OpenNews: Китай начал блокировать HTTPS-соединения, устанавливаемые с TLS 1.3 и ESNI
  6. OpenNews: Уязвимость в TLS, допускающая определение ключа для соединений на базе шифров DH
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/56268-nss
Ключевые слова: nss, mozilla, vulnerability
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (28) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 17:24, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –12 +/
    Опенсорс… DSA ещё не занесли в чёрный список? Самое время.
     
     
  • 2.3, Аноним (1), 17:27, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +/


    * These packages depend on dev-libs/nss:
    app-crypt/qca-2.3.4 (nss ? dev-libs/nss)
    net-analyzer/suricata-6.0.4 (dev-libs/nss)
    net-im/pidgin-2.14.8 (!gnutls ? dev-libs/nss)
    net-misc/chrony-4.1-r2 (nss ? dev-libs/nss)
    net-misc/curl-7.80.0 (nss ? dev-libs/nss:0[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?])
    sys-libs/libblockdev-2.26 (escrow ? >=dev-libs/nss-3.18.0)
    www-client/firefox-94.0 (>=dev-libs/nss-3.71)

    по-сути, только суриката и фф (согласно пакетному менеджеру).

     

  • 1.2, Аноним (-), 17:27, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –14 +/
    Объясните, как ssl, которая делается за кружкой пива в один вечер, может занимать столько лет и такой объем ненужнофигни ?
     
     
  • 2.10, Rev (?), 17:49, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +9 +/
    За вечер оно делается используя библиотеки. А именно в одной из них найдена ошибка.
     

  • 1.4, Аноним (4), 17:30, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не вижу обновлений в Fedora даже в testing:

    dnf update --enablerepo=updates-testing 'nss*'


    Стоят:

    nss-3.71.0-1.fc35.x86_64
    nss-devel-3.71.0-1.fc35.x86_64
    nss-mdns-0.15.1-2.fc35.x86_64
    nss-pem-1.0.8-1.fc35.x86_64

    - всё это прилетело 10 ноября.

     
     
  • 2.6, Аноним (1), 17:42, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В генту 3.73. Федора не самый современный дистр, обычно лаг исправлений очень большой. Но в генту тоже полгода назад добавили поломанную glibc и только вчера дали возможность отключить clone3 -- всё это время песочница не работала в старых билдах хромоподелок. И в фф тоже. Полгода прошло.
     
     
  • 3.34, Аноним (34), 12:54, 04/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > добавили поломанную glibc...

    А подробнее можно?

     
     
  • 4.35, Аноним (1), 12:58, 04/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> добавили поломанную glibc...
    > А подробнее можно?

    https://duckduckgo.com/?t=ffab&q=glibc+2.34+clone3&ia=web

    https://gitweb.gentoo.org/repo/gentoo.git/commit/sys-libs/glibc?id=16d8fcd2df5

     
  • 2.7, f95 (ok), 17:42, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А что там тестить, чинить надо... В Дебиане, например, есть во всех стабильных, но не в testing.
     
  • 2.26, Andrey (??), 09:36, 03/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Зеркала старые? У меня на двух машинах обновилось, на одной не захотело.
     

  • 1.5, А где же каменты (?), 17:40, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А нсс кто-нибудь кроме фф использует?
     
     
  • 2.9, BratishkaErik (ok), 17:49, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > В качестве примера уязвимых приложений упоминаются LibreOffice, Evolution и Evince. Потенциально проблема также может затрагивать такие проекты, как Pidgin, Apache OpenOffice, Suricata, Curl, Сhrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss для http-сервера Apache, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition.
     
     
  • 3.32, Аноним (32), 03:23, 04/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Энтерпрайзщина.
    Из всего перечисленного всерьез можно рассматривать разве что curl.
     
     
  • 4.33, Аноним (32), 03:23, 04/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и chrony еще, ок.
     
  • 4.36, Kuromi (ok), 17:55, 05/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну разумеется же. Тот факт что Ред Хат Мозилле за NSS приплачивает даже и не новость. У них та мопять эе контакты есть и в случае чего вопросы можно решить, а широкий круг пользователей - NSS даже и не гнались за этим никогда.
     

  • 1.8, ryoken (ok), 17:45, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>является хорошей демонстрации того, как в широко протестированном известном проекте могут длительное время оставаться незамеченными тривиальные уязвимости

    "У 7-ми нянек..."

     
     
  • 2.11, НяшМяш (ok), 18:05, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +11 +/
    > А проверяли бы PVS-Studio, то нашли бы

    а не, не та методичка

    > А написали бы на расте, не было бы таких уязвимостей

    вот, то что надо

     
     
  • 3.29, Аноним (29), 18:24, 03/12/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да хоть на Ada пусть переписывают или на Pascal, надоели со своими одними и теми же ошибками с размером буфера.
     

  • 1.17, Аноним (17), 18:55, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Правильно! Нечаво проверять входные данные, это тики процессора жрет и компухтер тормозить будет!
     
     
  • 2.18, Аноним (18), 19:41, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > тики процессора жрет и компухтер тормозить будет!

    С каких пор прораммистов это [снова] волнует?

     
     
  • 3.19, Аноним (17), 20:54, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Предложите другую причину с каким-то нормальным обоснование почему они это не делают.
     
     
  • 4.24, Аноним (24), 08:05, 03/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    https://habr.com/ru/post/151603/
     

  • 1.21, Аноним (21), 22:37, 02/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Почему Мозилла до сих пор не переписала всё на Rust?

    Им же заняться больше нечем - они и так уже все полимеры...

     
     
  • 2.22, Аноним (-), 23:14, 02/12/2021 [^] [^^] [^^^] [ответить]  
  • +7 +/
    А разве они не поувольняли программистов ?
     
     
  • 3.30, Аноним (29), 18:29, 03/12/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Им нужно тогда переименовать "уязвимость" в "особенность" и затравить в твитторе всех кто указывает на недостатки их ПО.
     
  • 2.31, Аноним (31), 03:03, 04/12/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так эта уязвимость firefox не затрагивает.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру