Një vulnerabilitet në Mozilla NSS që lejon ekzekutimin e kodit gjatë përpunimit të certifikatave

Në paketën e bibliotekave kriptografike NSS (Shërbimet e Sigurisë Dritare), të zhvilluara nga kompania Mozilla, është zbuluar një vulnerabilitet kritik (CVE-2021-43527), i cili mund të çojë në ekzekutimin e kodit nga agresori gjatë përpunimit të nënshkrimeve digjitale DSA ose RSA-PSS, të caktuara me metodën e kodimit DER (Rregullat e Kodimit të Distinguar). Problemi, i cili ka marrë emrin kodor BigSig, është zgjidhur në versionet NSS 3.73 dhe NSS ESR 3.68.1. Përditësimet e paketave janë në dispozicion për distribucione si Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Për momentin nuk ka përditësime për Fedora.

Problemi shfaqet në aplikacionet që përdorin NSS për përpunimin e nënshkrimeve digjitale CMS, S/MIME, PKCS #7 dhe PKCS #12, ose gjatë verifikimit të certifikatave në implementime TLS, X.509, OCSP dhe CRL. Vulnerabiliteti mund të shfaqet në aplikacione të ndryshme klient/serwer me mbështetje TLS, DTLS dhe S/MIME, si klientët e postës elektronike dhe shikuesit PDF që përdorin thirrjen NSS CERT_VerifyCertificate() për të verifikuar nënshkrimet digjitale.

Si shembuj të aplikacioneve vulnerabël përmendet LibreOffice, Evolution dhe Evince. Problemi potencialisht mund të prekë gjithashtu projekte të tilla si Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss për serverin http Apache, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. Megjithatë, vulnerabiliteti nuk shfaqet në Firefox, Thunderbird dhe Tor Browser, të cilat për verifikimin përdorin një bibliotekë të veçantë mozilla::pkix, e cila gjithashtu është pjesë e NSS. Problemi nuk prek as shfletuesit e bazuar në Chromium (nëse ato nuk janë ndërtuar posaçërisht me NSS), të cilët përdorën NSS deri në vitin 2015, por më pas u kaluan në BoringSSL.

Vulnerabiliteti shkaktohet nga një gabim në kodin e verifikimit të certifikatave në funksionin vfy_CreateContext nga skedari secvfy.c. Gabimi shfaqet si gjatë leximin nga klienti të certifikatave nga serveri, ashtu edhe gjatë përpunimit server të certifikatave të klientëve. Në procesin e verifikimit të nënshkrimit digjital, të koduar me metodën DER, NSS e dekodon nënshkrimin në një tampon me madhësi fikse dhe ia dërgon këtë tampon modulit PKCS #11. Gjatë përpunimit të mëtejshëm, për nënshkrimet DSA dhe RSA-PSS, nuk kontrollohet saktësisht madhësia, duke çuar në tejkalimin e tamponit të ndarë për strukturën VFYContextStr, nëse madhësia e nënshkrimit digjital tejkalon 16384 bit (për tamponin ndahen 2048 byte, por nuk kontrollohet se nënshkrimi mund të ketë një madhësi më të madhe).

Kodi që përmban vulnerabilitet është ndjekur që nga viti 2003, por nuk përbënte një kërcënim deri në rifaktorizimin e bërë në vitin 2012. Në vitin 2017, gjatë realizimit të mbështetjes RSA-PSS, u bë e njëjta gabim. Për të kryer një sulm, nuk kërkohet prodhimi i rëndë i çelësave të caktuar për të marrë të dhënat e nevojshme, pasi mbushja ndodh në fazën para verifikimit të nënshkrimit digjital. Pjesa e dhënave që del jashtë kufijve shkruhet në zonën e memories që përmban tregues për funksionet, duke e bërë krijimin e eksploitëve të funksionojnë më të lehtë.

Vulnerabiliteti u identifikua nga kërkuesit e Google Project Zero gjatë eksperimentimeve me metoda të reja të testimit fuzzing dhe është një shembull i shkëlqyer se si vulnerabilitetet triviale mund të mbeten të paqena për një kohë të gjatë në një projekt të njohur dhe të testuar gjerësisht:

  • Kodi NSS mbĂ«shtetet nga njĂ« ekip profesionistĂ«sh qĂ« merren me sigurinĂ«, duke aplikuar metoda moderne tĂ« testimit dhe analizĂ«s sĂ« gabimeve. Ka disa programe pĂ«r shpĂ«rblime tĂ« konsiderueshme pĂ«r identifikimin e vulnerabiliteteve nĂ« NSS.
  • NSS ishte njĂ« nga projektet e para qĂ« iu bashkua iniciativĂ«s Google oss-fuzz dhe gjithashtu u testua nĂ« sistemin e fuzzing-tĂ« zhvilluar nga Mozilla, duke pĂ«rdorur libFuzzer.
  • Kodi i bibliotekĂ«s Ă«shtĂ« verifikuar shumĂ« herĂ« nĂ« analizatorĂ«t e ndryshĂ«m statikĂ«, duke pĂ«rfshirĂ« shĂ«rbimin Coverity qĂ« i ka ndjekur qĂ« nga viti 2008.
  • Derisa nĂ« vitin 2015, NSS u pĂ«rdor nĂ« Google Chrome dhe u testua nĂ« mĂ«nyrĂ« tĂ« pavarur nga Mozilla nga ekipi i Google (qĂ« nga viti 2015, Chrome kaloi nĂ« BoringSSL, por mbĂ«shtetje pĂ«r portin e bazuar nĂ« NSS vazhdon).

Problemet kryesore që e bënë këtë çështje të mbetet për një kohë të gjatë të paqenë:

  • NSS Ă«shtĂ« njĂ« bibliotekĂ« modulare dhe testimi fuzzing nuk u realizua nĂ« tĂ«rĂ«si, por nĂ« nivel tĂ« komponentĂ«ve tĂ« veçantĂ«. PĂ«r shembull, u kontrollua veçmas kodi i dekodimit tĂ« DER dhe pĂ«rpunimit tĂ« çertifikatave - gjatĂ« fuzzing-ut mund tĂ« ishte marrĂ« njĂ« çertifikatĂ« qĂ« çonte nĂ« shfaqjen e vulnerabilitetit tĂ« shqyrtuar, por verifikimi i saj nuk arrinte deri nĂ« kodin e verifikimit dhe problemi nuk e identifikonte veten.
  • GjatĂ« testimit fuzzing, u vendosĂ«n kufij tĂ« rreptĂ« mbi madhĂ«sinĂ« e output-it (10000 byte) ndĂ«rsa nuk kishte kufij tĂ« tillĂ« nĂ« NSS (shumĂ« struktura mund tĂ« kishin njĂ« madhĂ«si mĂ« tĂ« madhe se 10000 byte nĂ« funksionimin normal, prandaj kĂ«rkohej njĂ« volum mĂ« i madh tĂ« tĂ« dhĂ«nave hyrĂ«se pĂ«r tĂ« identifikuar problemet). PĂ«r njĂ« verifikim tĂ« plotĂ«, kufiri duhet tĂ« ishte 224-1 byte (16 MB), qĂ« korrespondon me madhĂ«sinĂ« maksimale tĂ« certifikatĂ«s qĂ« lejohet nĂ« TLS.
  • E pĂ«rfaqĂ«suar gabim rreth mbulimit tĂ« kodit nĂ« testimin fuzzing. Kodi i rrezikshĂ«m u testua aktivisht, por me pĂ«rdorimin e fuzzer-ave qĂ« nuk ishin nĂ« gjendje tĂ« gjeneronin tĂ« dhĂ«nat hyrĂ«se tĂ« nevojshme. PĂ«r shembull, fuzzer tls_server_target pĂ«rdori njĂ« grup tĂ« paracaktuar tĂ« certifikatave, gjĂ« qĂ« kufizoi kontrollin e kodit tĂ« verifikimit tĂ« certifikatĂ«s vetĂ«m nĂ« mesazhet TLS dhe ndryshimet e gjendjes sĂ« protokollit.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster