Vulnerability in Mozilla NSS allows code execution when processing certificates

Mozilla arendatud NSS (Network Security Services) krĂŒptograafiliste teekide komplektis tuvastati kriitiline haavatavus (CVE-2021-43527), mis vĂ”ib vĂ”imaldada rĂŒndajal koodi tĂ€itmist DSA vĂ”i RSA-PSS digitaalsete allkirjade töötlemisel, mis on mÀÀratud DER (Distinguished Encoding Rules) kodeerimismeetodi kasutamisega. Probleem, mille koodinimi on BigSig, on kĂ”rvaldatud NSS 3.73 ja NSS ESR 3.68.1 vĂ€ljaannetes. Pakettide uuendused jaotustes on saadaval Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD jaoks. Fedora jaoks uuendused ei ole veel saadaval.

Probleem ilmneb rakendustes, mis kasutavad NSS-i digitaalsete allkirjade CMS, S/MIME, PKCS #7 ja PKCS #12 töötlemiseks vÔi sertifikaatide kontrollimiseks TLS, X.509, OCSP ja CRL rakendustes. Haavatavus vÔib ilmneda erinevates kliendi- ja serverirakendustes, mis toetavad TLS, DTLS ja S/MIME, e-posti klientides ja PDF-vaatamisprogrammides, mis kasutavad NSS-kutset CERT_VerifyCertificate() digitaalsete allkirjade kontrollimiseks.

NĂ€itena haavatavatest rakendustest mainitakse LibreOffice'i, Evolutioni ja Evince'i. Potentsiaalselt vĂ”ivad probleem mĂ”jutada ka projekte nagu Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss Apache HTTP serverile, Oracle Communications Messaging Server ja Oracle Directory Server Enterprise Edition. Samuti ei avaldu haavatavus Firefoxis, Thunderbirdis ja Tor Browseris, kus valideerimiseks kasutatakse eraldi teeki mozilla::pkix, mis kuulub samuti NSS-i. Probleem ei puuduta ka Chromiumi pĂ”hiseid brausereid (kui need ei ole spetsiaalselt kokku pandud NSS-iga), mis kasutasid NSS-i kuni 2015. aastani, kuid on seejĂ€rel ĂŒle lĂ€inud BoringSSL-ile.

Haavatavus on pĂ”hjustatud tĂ”rkest sertifikaatide valideerimise kontrollikoodis funktsioonis vfy_CreateContext failis secvfy.c. TĂ”rge ilmneb nii kliendi sertifikaadi lugemisel serverist kui ka töötlemisel. serveriga klientide sertifikaate. Digitaalse allkirja kontrollimise kĂ€igus, mis on kodeeritud DER-meetodil, dekodeerib NSS allkirja fikseeritud suurusega puhvri ja edastab selle PKCS #11 moodulisse. Edasise töötlemise kĂ€igus kontrollitakse DSA ja RSA-PSS allkiri puhul suurust vÀÀralt, mis viib mĂ€lupuhvri ĂŒlevooluni, mis on ette nĂ€htud VFYContextStr struktuuri jaoks, kui digitaalne allkiri ĂŒletab 16384 bitti (mĂ€lupuhvrile on eraldatud 2048 baiti, aga ei kontrollita, et allkiri vĂ”ib olla suurem).

Haavatavusega kood on tuvastatud alates 2003. aastast, kuid see ei ole kujutanud ohtu enne 2012. aastal tehtud refaktoreerimist. 2017. aastal RSA-PSS toe rakendamisel tehti sama viga. RĂŒnnaku teostamiseks ei ole vaja ressursimahukat kindlate vĂ”tmete genereerimist vajalike andmete saamiseks, kuna ĂŒlevool toimub allkirja Ă”igsuse kontrollimise enne. ÜlemÀÀrased andmed kirjutatakse mĂ€lu osasse, mis sisaldab funktsioonide silte, mis lihtsustab töötavate eksploitide loomist.

Haavatavus avastati Google Project Zero uurijate poolt uute fuzzimislausete testimise meetodite katsetamise kÀigus ja see on hea nÀide sellest, kuidas laialdaselt testitud tuntud projektis vÔivad triviaalne haavatavused pikka aega mÀrkamata jÀÀda:

  • NSS-i koodi toetab kogenud meeskond, kes vastutab turvalisuse ja rakendab modernseid testimis- ja vigade analĂŒĂŒsi meetodeid. Töötavad mitmed programmid, mis pakuvad olulisi preemiaid NSS-is leiduvate haavatavuste avastamise eest.
  • NSS oli ĂŒks esimesi projekte, mis liitus Google'i oss-fuzz algatusega ja seda testiti ka Mozilla arendatavas fuzzimistestimise sĂŒsteemis libFuzzeri baasil.
  • Raamatukogu kood on korduvalt kontrollitud erinevate staatiliste analĂŒsaatorite poolt, sealhulgas on alates 2008. aastast jĂ€lginud Coverity teenus.
  • Kuni 2015. aastani kasutati NSS-i Google Chrome'is ja sĂ”ltumatult Mozilla poolt kontrollis seda Google'i meeskond (alates 2015. aastast on Chrome ĂŒle lĂ€inud BoringSSL-ile, kuid NSS-pĂ”hise sadama tugi pĂŒsib).

Peamised probleemid, miks probleem pikka aega tÀhelepanuta jÀi:

  • NSS moodulaarne teek ja fuzzing-testimine viidi lĂ€bi mitte tervikuna, vaid ĂŒksikute komponentide tasandil. NĂ€iteks kontrolliti eraldi DER dekodeerimise koodi ja sertifikaatide töötlemist — fuzzing-i kĂ€igus oleks vĂ”inud saada sertifikaadi, mis viib uuritava haavatavuse ilminguni, kuid selle kontroll ei jĂ”udnud verifitseerimise koodini ning probleem ei avaldunud.
  • Fuzzing-testimise kĂ€igus kehtestati vĂ€ljundi suurusele ranged piirangud (10000 baiti), samas kui NSS-is selliseid piiranguid ei olnud (paljud struktuurid normaalses reĆŸiimis vĂ”isid olla suuremad kui 10000 baiti, seega probleemide tuvastamiseks oli vajalik suurem sisendandmete maht). TĂ€ielikuks kontrollimiseks pidi piirang olema 224-1 baiti (16 MB), mis vastab maksimaalsele sertifikaadi suurusele, mis on TLS-is lubatud.
  • Vale arusaam fuzzing-testi katte ulatusest. Haavatav kood on aktiivselt testitud, kuid fuzzerite abil, mis ei suuda genereerida vajalikke sisendeid. NĂ€iteks kasutas fuzzer tls_server_target eelnevalt mÀÀratud sertifikaatide komplekti, mis piiras sertifikaadi kontrollimise koodi validatsiooni ainult TLS- sĂ”numite ja protokolli oleku muutustega.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster