BigSig, o vulnerabilitate în Mozilla NSS care ar putea permite executarea codului

Vestea despre identificarea unei vulnerabilitati critice (listat deja sub CVE-2021-43527) en setul de biblioteci criptografice NSS (Servicii de securitate a rețelei) de la Mozilla care ar putea duce la executarea de cod rău intenționat la procesarea semnăturilor digitale DSA sau RSA-PSS specificate folosind DER (Distinguished Encoding Rules).

Problema se manifestă în aplicațiile care utilizează NSS pentru a gestiona semnăturile digitale CMS, S/MIME, PKCS # 7 și PKCS # 12, sau la verificarea certificatelor în implementări TLS, X.509, OCSP și CRL. Vulnerabilitatea ar putea apărea în diverse aplicații client și server cu suport TLS, DTLS și S/MIME, clienți de e-mail și vizualizatoare PDF care utilizează apelul NSS CERT_VerifyCertificate () pentru a verifica semnăturile digitale.

LibreOffice, Evolution și Evince sunt menționate ca exemple de aplicații vulnerabile. Potențial, problema poate afecta și proiecte precum Pidgin, Apache OpenOffice, Suricata, Curl, printre altele.

În același timp, vulnerabilitatea nu apare în Firefox, Thunderbird și Tor Browser, care utilizează o bibliotecă mozilla :: pkix separată pentru verificare, care face, de asemenea, parte din NSS. The Browsere bazate pe Chrome (cu excepția cazului în care au fost compilate în mod specific cu NSS), care a folosit NSS până în 2015, dar apoi a fost transferat la BoringSSL, nu sunt afectați de problemă.

Vulnerabilitatea se datorează unei erori în codul de verificare a certificatului din vfy_CreateContext funcția fișierului secvfy.c. Eroarea se manifestă atât atunci când clientul citește certificatul de pe server ca atunci când serverul procesează certificatele clientului.

Atunci când verifică o semnătură digitală codificată DER, NSS decodifică semnătura într-un buffer de dimensiune fixă ​​și transmite acest buffer către modulul PKCS # 11. În timpul post-procesării, pentru semnăturile DSA și RSA-PSS, dimensiunea este verificată incorect, rezultând în care duce la o depășire a bufferului alocat pentru structura VFYContextStr, dacă dimensiunea semnăturii digitale depășește 16384 biți (pentru buffer sunt alocați 2048 octeți, dar nu se verifică că semnătura poate fi mai mare).

Codul care conține vulnerabilitatea datează din 2003, dar nu a fost o amenințare până la refactorizarea în 2012. În 2017, aceeași greșeală a fost făcută la implementarea suportului RSA-PSS. Pentru a efectua un atac, nu este necesară o generare intensivă de resurse a anumitor chei pentru a obține datele necesare, deoarece depășirea are loc în etapa anterioară verificării validității semnăturii digitale. Partea în afara limitelor datelor este scrisă într-o zonă de memorie care conține indicatori de funcție, ceea ce face ușoară crearea exploit-urilor de lucru.

Vulnerabilitatea a fost identificată de cercetătorii Google Project Zero în timpul experimentelor cu noi metode de testare fuzzing și este o bună demonstrație a modului în care vulnerabilitățile banale pot rămâne nedetectate mult timp într-un proiect bine-cunoscut bine testat.

în ceea ce privește probleme principale pentru care problema a trecut neobservată pentru mult timp:

  • Biblioteca de unități NSS și testele de fuzzing nu au fost efectuate în întregime, ci la nivel de componentă individuală.
  • De exemplu, codul de decodificare a certificatelor DER și de procesare a fost verificat separat; În cursul fuzzing-ului, s-ar fi putut obține un certificat, ducând la manifestarea vulnerabilității în cauză, dar verificarea acesteia nu a ajuns la codul de verificare și problema nu a fost dezvăluită.
  • În timpul testelor de fuzzing, au fost stabilite limite stricte pentru dimensiunea ieșirii (10,000 de octeți) în absența unor astfel de limitări în NSS (multe structuri în modul normal ar putea fi mai mari de 10,000 de octeți, prin urmare, pentru a identifica problemele, sunt necesare mai multe date de intrare). ). Pentru verificarea completă, limita ar fi trebuit să fie de 2 24 -1 octeți (16 MB), ceea ce corespunde dimensiunii maxime a unui certificat permisă în TLS.
  • Concepție greșită despre acoperirea codului prin teste fuzzing. Codul vulnerabil a fost testat activ, dar folosind fuzere, care nu au putut genera datele de intrare necesare. De exemplu, fuzzer tls_server_target a folosit un set predefinit de certificate out-of-the-box, care a limitat verificarea codului de verificare a certificatului la numai mesajele TLS și modificările stării protocolului.

În cele din urmă, Merită menționat că problema cu numele de cod BigSig a fost rezolvată în NSS 3.73 și NSS ESR 3.68.1 iar actualizările soluției sub formă de pachet au fost deja lansate în diferitele distribuții: Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD etc.

Dacă doriți să aflați mai multe despre aceasta, puteți consulta următorul link.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.