BigSig, zraniteľnosť v Mozilla NSS, ktorá by mohla umožniť spustenie kódu

Správy o identifikáciu kritickej zraniteľnosti (už uvedené pod CVE-2021-43527) en súbor kryptografických knižníc NSS (Služby zabezpečenia siete) od Mozilly, čo by mohlo viesť k spusteniu škodlivého kódu pri spracovaní digitálnych podpisov DSA alebo RSA-PSS špecifikovaných pomocou DER (Distinguished Encoding Rules).

Problém sa prejavuje v aplikáciách, ktoré využívajú NSS na spracovanie digitálnych podpisov CMS, S / MIME, PKCS # 7 a PKCS # 12, alebo pri overovaní certifikátov v nasadení TLS, X.509, OCSP a CRL. Zraniteľnosť sa môže vyskytnúť v rôznych klientskych a serverových aplikáciách s podporou TLS, DTLS a S/MIME, e-mailových klientoch a prehliadačoch PDF, ktoré na overenie digitálnych podpisov používajú volanie NSS CERT_VerifyCertificate ().

Ako príklady zraniteľných aplikácií sú uvedené LibreOffice, Evolution a Evince. Problém môže potenciálne ovplyvniť aj projekty ako Pidgin, Apache OpenOffice, Suricata, Curl a iné.

Súčasne zraniteľnosť sa neobjavuje v prehliadačoch Firefox, Thunderbird a Tor, ktoré na overenie využívajú samostatnú knižnicu mozilla :: pkix, ktorá je tiež súčasťou NSS. The Prehliadače založené na prehliadači Chrome (pokiaľ neboli špecificky zostavené s NSS), ktorý používal NSS do roku 2015, ale potom sa preniesol na BoringSSL, sa ich problém netýka.

Zraniteľnosť je spôsobená chybou v overovacom kóde certifikátu v vfy_CreateContext funkcie súboru secvfy.c. Chyba sa prejaví aj vtedy, keď klient načíta certifikát zo servera ako keď server spracováva certifikáty klienta.

Pri overovaní digitálneho podpisu s kódovaním DER NSS dekóduje podpis do vyrovnávacej pamäte s pevnou veľkosťou a túto vyrovnávaciu pamäť odovzdá modulu PKCS # 11. Počas následného spracovania je pri podpisoch DSA a RSA-PSS nesprávne overená veľkosť, čo má za následok čo vedie k pretečeniu alokovanej vyrovnávacej pamäte pre štruktúru VFYContextStr, ak veľkosť digitálneho podpisu presiahne 16384 bitov (2048 bajtov je alokovaných pre vyrovnávaciu pamäť, ale nie je overené, či môže byť podpis väčší).

Kód, ktorý obsahuje túto chybu, pochádza z roku 2003, no hrozilo to až pri refaktoringu v roku 2012. V roku 2017 sa stala rovnaká chyba pri implementácii podpory RSA-PSS. Na vykonanie útoku nie je na získanie potrebných údajov potrebné generovanie určitých kľúčov náročné na zdroje, pretože k pretečeniu dochádza v štádiu pred overením platnosti digitálneho podpisu. Časť údajov, ktorá je mimo hraníc, sa zapíše do oblasti pamäte, ktorá obsahuje ukazovatele funkcií, čo uľahčuje vytváranie pracovných exploitov.

Zraniteľnosť bola identifikovaná výskumníkmi Google Project Zero počas experimentov s novými metódami fuzzing testovania a je dobrou ukážkou toho, ako môžu triviálne zraniteľnosti zostať dlho neodhalené v dobre otestovanom známom projekte.

pokiaľ ide o hlavné problémy, pre ktoré problém zostal nepovšimnutý na dlhú dobu:

  • Knižnica pohonov NSS a fuzzing testy neboli vykonané ako celok, ale na úrovni jednotlivých komponentov.
  • Napríklad kód na dekódovanie DER a spracovanie certifikátov bol overený samostatne; V priebehu fuzzingu mohol byť dobre získaný certifikát, ktorý viedol k prejaveniu predmetnej zraniteľnosti, ale jeho overenie nedosiahlo overovací kód a problém nebol odhalený.
  • Počas fuzzing testov boli stanovené prísne limity na veľkosť výstupu (10,000 10,000 bajtov), ​​ak takéto obmedzenia v NSS neexistovali (veľa štruktúr v normálnom režime mohlo byť väčších ako 2 24 bajtov, preto je na identifikáciu problémov potrebných viac vstupných údajov ). Pre úplné overenie mal byť limit 1 16 -XNUMX bajtov (XNUMX MB), čo zodpovedá maximálnej veľkosti certifikátu povolenej v TLS.
  • Mylná predstava o pokrytí kódu fuzzing testami. Zraniteľný kód bol aktívne testovaný, ale pomocou fuzerov, ktoré neboli schopné vygenerovať požadované vstupné dáta. Napríklad fuzzer tls_server_target používal preddefinovanú sadu preddefinovaných certifikátov, ktorá obmedzovala overenie overovacieho kódu certifikátu iba na správy TLS a zmeny stavu protokolu.

konečne, Stojí za zmienku, že problém s kódovým označením BigSig bol opravený v NSS 3.73 a NSS ESR 3.68.1 a aktualizácie riešenia vo forme balíkov už boli vydané v rôznych distribúciách: Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD atď.

Ak sa o tom chcete dozvedieť viac, môžete sa poradiť nasledujúci odkaz.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Za údaje zodpovedá: AB Internet Networks 2008 SL
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.