Vulnerabilitet në Mozilla NSS, që lejon ekzekutimin e kodit gjatë përpunimit të certifikatave

Në paketën e bibliotekave kriptografike NSS (Shërbime të Sigurisë në Rrjet), të zhvilluara nga kompania Mozilla, është zbuluar një ndjeshmëri kritike (CVE-2021-43527), e cila mund të çojë në ekzekutimin e kodit nga një sulmues gjatë përpunimit të nënshkrimeve digjitale DSA ose RSA-PSS, të caktuara duke përdorur metodën e kodimit DER (Rregullat e Kodimit të Dalluar). Problemi, i njohur me emrin kodues BigSig, është rregulluar në edicionet NSS 3.73 dhe NSS ESR 3.68.1. Përditësimet e paketave janë të disponueshme për distribucionet Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Për momentin nuk ka përditësime të disponueshme për Fedora.

Problemi shfaqet në aplikacione që përdorin NSS për të përpunuar nënshkrimet digjitale CMS, S/MIME, PKCS #7 dhe PKCS #12, ose gjatë verifikimit të certifikatave në realizimet TLS, X.509, OCSP dhe CRL. Ndjeshmëria mund të dalë në aplikacione të ndryshme klient-server me mbështetje për TLS, DTLS dhe S/MIME, klientët e postës dhe shikuesit PDF që përdorin thirrjen NSS CERT_VerifyCertificate() për të verifikuar nënshkrimet digjitale.

Si një shembull i aplikacioneve të ndjeshme përmenden LibreOffice, Evolution dhe Evince. Problemi mund të prekë gjithashtu projekte të tjera 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ë, kjo ndjeshmëri nuk shfaqet në Firefox, Thunderbird dhe Tor Browser, të cilat përdorin një bibliotekë të veçantë mozilla::pkix për verifikim, e cila është gjithashtu pjesë e NSS. Problemi nuk i prekur as shfletuesit që bazohen në Chromium (nëse nuk janë ndërtuar posaçërisht me NSS), të cilat kishin përdorur NSS deri në vitin 2015, por më pas kaluan në BoringSSL.

Ndjeshmëria shkaktohet nga një gabim në kodin e verifikimit të certifikatave në funksionin vfy_CreateContext nga skedari secvfy.c. Gabimi shfaqet si gjatë leximit të certifikatës nga klienti nga serveri, ashtu edhe gjatë përpunimit. serverin certifikatet e klientëve. Gjatë verifikimit të nënshkrimit digjital, i koduar me metodën DER, NSS dekodon nënshkrimin në një buffer me madhësi të fiksuar dhe e dërgon këtë buffer në modulin PKCS #11. Gjatë përpunimit të mëtejshëm, për nënshkrimet DSA dhe RSA-PSS, madhësia verifikohet në mënyrë të papërshtatshme, çka çon në mbingarkesë të buffer-it të alokuar për strukturën VFYContextStr, nëse madhësia e nënshkrimit digjital e tejkalon 16384 bit (buffer-i alokohet 2048 byte, por nuk kontrollohet që nënshkrimi mund të jetë më i madh).

Kodi që përmban një dobësi është ndjekur që nga viti 2003, por nuk paraqiste rrezik deri në refaktorimin e bërë në vitin 2012. Në vitin 2017, gjatë zbatimit të mbështetjes për RSA-PSS, u bë e njëjta gabim. Për të kryer një sulm, nuk kërkohet gjenerim burimesh të rëndë të çelësave të caktuar për të marrë të dhënat e nevojshme, pasi mbingarkesa ndodh në fazën para verifikimit të korrektësisë së nënshkrimit digjital. Pjesa e të dhënave që del jashtë kufijve shkruhet në një zonë të memories që përmban tregues për funksione, çka e përmirëson krijimin e eksploitëve të funksionueshëm.

Një dobësi u zbulua nga studiusit e Google Project Zero gjatë eksperimenteve me metoda të reja të testimit fuzzing dhe është një shembull i mirë se si në një projekt të njohur të testuar gjerësisht mund të mbeten të pa vënë re dobësitë triviale për një kohë të gjatë:

  • Kodi NSS shoqĂ«rohet nga njĂ« ekip tĂ« eksperteve pĂ«rgjegjĂ«s pĂ«r sigurinĂ«, qĂ« pĂ«rdor metoda moderne testimi dhe analizimi tĂ« gabimeve. EkzistojnĂ« disa programe pĂ«r shpĂ«rblimin e ndjeshĂ«m pĂ«r zbulimin e dobĂ«sive nĂ« NSS.
  • NSS ishte njĂ« nga projektet e para qĂ« iu bashkua iniciativĂ«s Google oss-fuzz dhe gjithashtu u kontrollua nĂ« sistemin e zhvilluar tĂ« testimit fuzzing nga Mozilla mbi bazĂ«n e libFuzzer.
  • Kodi i bibliotekĂ«s Ă«shtĂ« kontrolluar disa herĂ« nĂ« analizatorĂ« statikĂ« tĂ« ndryshĂ«m, duke pĂ«rfshirĂ« shĂ«rbimin Coverity qĂ« Ă«shtĂ« ndjekur qĂ« nga viti 2008.
  • Derisa nĂ« vitin 2015 NSS u pĂ«rdor nĂ« Google Chrome dhe u kontrollua nga ekipi i Google, pĂ«rveç Mozilla-s (nga viti 2015 Chrome kaloi nĂ« BoringSSL, por mbĂ«shtetje pĂ«r portin e bazuar nĂ« NSS vazhdon).

Problemet kryesore për të cilat kjo çështje mbeti e pa vënë re për një kohë të gjatë:

  • Biblioteka modulare NSS dhe testimi fuzzing u realizua jo nĂ« tĂ«rĂ«si, por nĂ« nivelin e komponenteve tĂ« veçanta. PĂ«r shembull, u kontrollua veçmas kodi i dekodimit DER dhe pĂ«rpunimi i certifikatave — gjatĂ« fuzzing-ut mund tĂ« ishte marrĂ« njĂ« certifikatĂ« qĂ« shkaktonte shfaqjen e vulnerabilitetit tĂ« shqyrtuar, por verifikimi i saj nuk arrinte deri te kodi i verifikimit dhe problemi nuk e shfaqte veten.
  • GjatĂ« testimit fuzzing, u vendosĂ«n kufizime tĂ« rrepta pĂ«r madhĂ«sinĂ« e daljes (10,000 byte) nĂ« mungesĂ« tĂ« kufizimeve tĂ« tilla nĂ« NSS (shumĂ« struktura nĂ« mĂ«nyrĂ«n e zakonshme mund tĂ« kishin madhĂ«si mĂ« tĂ« madhe se 10,000 byte, kĂ«shtu qĂ« pĂ«r tĂ« identifikuar problemet kĂ«rkohej njĂ« volum mĂ« i madh tĂ« dhĂ«nash). PĂ«r njĂ« verifikim tĂ« plotĂ«, kufiri duhet tĂ« ishte 224-1 byte (16 MB), qĂ« pĂ«rkon me madhĂ«sinĂ« maksimale tĂ« certifikatĂ«s tĂ« pranueshme nĂ« TLS.
  • NjĂ« keqkuptim nĂ« lidhje me mbulimin e kodit nga testimi me fuzzing. Kodi i ndjeshĂ«m Ă«shtĂ« testuar aktivisht, por duke pĂ«rdorur fuzzera qĂ« nuk janĂ« nĂ« gjendje tĂ« gjenerojnĂ« tĂ« dhĂ«nat e nevojshme tĂ« hyrjes. PĂ«r shembuj, fuzzera tls_server_target pĂ«rdori njĂ« grup tĂ« paracaktuar certifikatash tĂ« gatshme, çka kufizoi verifikimin e kodit tĂ« verifikimit tĂ« certifikatĂ«s vetĂ«m nĂ« mesazhet TLS dhe ndryshimet e gjendjes sĂ« protokollit.

Burimi: opennet.ru

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