Mozilla'i arendatavates NSS (Network Security Services) krĂŒptograafia raamatukogudes tuvastati kriitiline haavatavus (CVE-2021-43527), mis vĂ”ib pĂ”hjustada rĂŒndaja koodi tĂ€itmist DSA vĂ”i RSA-PSS digitaalsete allkirjade töötlemisel, mis on mÀÀratud DER (Distinguished Encoding Rules) koodimise meetodi abil. Probleem, mille koodinimi on BigSig, on lahendatud NSS versioonides 3.73 ja NSS ESR 3.68.1. Paketi uuendused on saadaval Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD distributsioonides. Fedora jaoks pole uuendusi veel saadaval.
Probleem ilmneb rakendustes, mis kasutavad NSS-i CMS, S/MIME, PKCS #7 ja PKCS #12 digitaalsete allkirjade töötlemiseks vÔi sertifikaatide kinnitamiseks TLS, X.509, OCSP ja CRL rakendustes. Haavatavus vÔib esineda erinevates TLS, DTLS ja S/MIME toega kliendi- ja serverirakendustes, postiklientides ja PDF-vaatlejates, mis kasutavad NSS-i funktsiooni CERT_VerifyCertificate() digitaalsete allkirjade kontrollimiseks.
Haavatavate rakenduste nĂ€idetena nimetatakse LibreOffice'i, Evolutioni ja Evince'i. Potentsiaalselt vĂ”ivad probleemist olla mĂ”jutatud ka sellised projektid nagu Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss Apache http-serverây jaoks, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. Samas ei ilmne haavatavus Firefoxis, Thunderbirdis ja Tor Browseris, kus kinnitamiseks kasutatakse eraldi raamatukogu mozilla::pkix, mis kuulub samuti NSS-i. Chromiumi pĂ”hised brauserid ei ole samuti haavatavad (kui neid ei ole spetsiaalselt NSS-iga kompileeritud), kuna nad kasutasid NSS-i kuni 2015. aastani, kuid seejĂ€rel viidi ĂŒle BoringSSL-ile.
Haavatavus tuleneb vea olemasolust sertifikaatide kinnitamise kontrolli koodis funktsioonis vfy_CreateContext failist secvfy.c. Vea ilmnemine on seotud nii kliendilt sertifikaadi lugemisega serverist kui ka töötlemisega. serverilt kliendi sertifikaatide puhul. Digitaalsete allkirjade kontrollimise protsessis, mis on kodeeritud DER-meetodi abil, dekodeerib NSS allkirja fikseeritud suurusega puhvri ja edastab selle PKCS #11 moodulile. Edasi töötlemisel, DSA ja RSA-PSS allkirjade puhul ei kontrollita suurust Ă”igesti, mis toob kaasa puhverĂŒlekande VFYContextStr struktuuri jaoks, kui digitaalsete allkirjade suurus ĂŒletab 16384 bitti (puhvri jaoks on eraldatud 2048 baiti, kuid ei kontrollita, et allkiri vĂ”ib olla suurem).
Haavatavusega kood on jĂ€lgitav alates 2003. aastast, kuid see ei olnud ohtlik kuni 2012. aastal toimunud refaktooringuni. 2017. aastal RSA-PSS toetuse juurutamisel tehti sama viga. RĂŒnnaku tegemiseks ei ole vajalik ressursside intensiivne teatud vĂ”tmete genereerimine vajalike andmete saamiseks, kuna ĂŒleujutus toimub enne digitaalallkirja kehtivuse kontrollimist. Piiridest vĂ€ljas olev osa andmeid kirjutatakse mĂ€lu-alasse, mis sisaldab funktsioonide nĂ€itajaid, mis lihtsustab töötavate eksploitide loomist.
Haavatavus tuvastati Google Project Zero teadlaste poolt uute fuzzing-testimise meetodite katsetamisel ja on hea nĂ€ide sellest, kuidas laialdaselt testitud tuntud projekti sees vĂ”ivad pĂŒsida triviaalsete haavatavuste jĂ€lgedes.
- NSS koodi toetab kogenud meeskond, kes vastutab turvalisuse eest ja rakendab kaasaegseid testimise ja vigade analĂŒĂŒsi meetodeid. Töötavad mitmed programmid, mis maksavad olulisi preemiaid NSS-is tuvastatud haavatavuste eest.
- NSS oli ĂŒks esimesi projekte, mis liitus Google'i oss-fuzzi algatusega ja seda testiti ka Mozilla arendatavas fuzzy-testeerimise sĂŒsteemis, mis pĂ”hineb libFuzzeril.
- Raamatukogu kood on korduvalt kontrollitud erinevates staatilistes analĂŒĂŒsijates, sealhulgas alates 2008. aastast Coverity teenuses.
- Kuni 2015. aastani kasutati NSS-i Google Chrome'is ja seda kontrolliti sÔltumatult Mozilla meeskonna poolt (alates 2015. aastast on Chrome liikunud BoringSSL-i, kuid NSS-i pÔhine port jÀtkab toetust).
PÔhiprobleemid, miks probleem kaua tÀhelepanuta jÀi:
- NSS on moodulraamatukogu ja fuzzing-testimine toimus mitte tervikuna, vaid eraldi komponentide tasemel. NĂ€iteks kontrolliti eraldi DER-dekodeerimise ja sertifikaatide töötlemise koodi â fuzzimise kĂ€igus vĂ”is kergesti saada sertifikaadi, mis viis vaadeldava haavatavuse vĂ€ljendamiseni, kuid selle kontroll ei jĂ”udnud verifikatsioonikoodini ja probleem ei avanenud.
- Fuzzing-testimise ajal kehtestati vĂ€ljundi suurusele ranged piirangud (10000 bait), samas kui NSS-is ei olnud selliseid piiranguid (paljud struktuurid normaalses reĆŸiimis vĂ”isid olla suuremad kui 10000 bait, mistĂ”ttu probleemide avastamiseks oli vajalik suurem sisendandmete maht). TĂ€ielikuks kontrollimiseks pidi piir olema 224-1 baiti (16 MB), mis vastab TLS-is lubatud maksimaalsele sertifikaadi suurusele.
- Vale arusaam fuzzing-testimise kodekatte ulatusest. Haavatavat koodi testiti aktiivselt, kuid kasutati fuzzer'e, mis ei suutnud genereerida vajalikke sisendandmeid. NÀiteks fuzzer tls_server_target kasutas etteantud komplekti valmis sertifikaate, mis piiras sertifikaadi verifitseerimise koodi kontrolli ainult TLS-sÔnumitega ja protokolli olekumuutustega.
Allikas: opennet.ru
