BigSig, уязвимост в Mozilla NSS, която може да позволи изпълнение на код

Новините за идентифициране на критична уязвимост (вече изброени под CVE-2021-43527) en набор от криптографски библиотеки НСС (Услуги за мрежова сигурност) от Mozilla, което може да доведе до изпълнение на злонамерен код при обработка на цифрови подписи DSA или RSA-PSS, посочени с помощта на DER (Разграничени правила за кодиране).

Проблемът се проявява в приложения, които използват 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 и други.

В същото време, уязвимостта не се появява във 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 MB), което съответства на максималния размер на сертификат, разрешен в TLS.
  • Погрешно схващане за покритието на кода чрез тестове за размиване. Уязвимият код беше активно тестван, но с помощта на fuzers, които не успяха да генерират необходимите входни данни. Например, fuzzer tls_server_target използва предварително дефиниран набор от готови сертификати, които ограничават проверката на кода за проверка на сертификата само до TLS съобщения и промени в състоянието на протокола.

И накрая, Струва си да се спомене, че проблемът с кодовото име BigSig е отстранен в NSS 3.73 и NSS ESR 3.68.1 и актуализациите на решението под формата на пакет вече са пуснати в различните дистрибуции: Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD и др.

Ако искате да научите повече за това, можете да се консултирате следната връзка.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорник за данните: AB Internet Networks 2008 SL
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.