Ziņas par kritiskas ievainojamības noteikšana (jau norādīts CVE-2021-43527) en kriptogrāfisko bibliotēku komplekts NSS (Tīkla drošības pakalpojumi) no Mozilla, kas var izraisīt ļaunprātīga koda izpildi apstrādājot DSA vai RSA-PSS ciparparakstus, kas norādīti, izmantojot DER (Distinguished Encoding Rules).
Problēma izpaužas lietojumprogrammās, kas izmanto NSS, lai apstrādātu ciparparakstus CMS, S/MIME, PKCS # 7 un PKCS # 12, vai pārbaudot sertifikātus izvietošanā TLS, X.509, OCSP un CRL. Ievainojamība var rasties dažādās klientu un serveru lietojumprogrammās ar TLS, DTLS un S/MIME atbalstu, e-pasta klientos un PDF skatītājos, kas izmanto NSS CERT_VerifyCertificate () izsaukumu, lai pārbaudītu ciparparakstus.
LibreOffice, Evolution un Evince ir minēti kā neaizsargātu lietojumprogrammu piemēri. Potenciāli problēma var ietekmēt arī tādus projektus kā Pidgin, Apache OpenOffice, Suricata, Curl.
Tajā pašā laikā ievainojamība neparādās pārlūkprogrammās Firefox, Thunderbird un Tor Browser, kas verifikācijai izmanto atsevišķu mozilla :: pkix bibliotēku, kas arī ir daļa no NSS. The Pārlūkprogrammas, kuru pamatā ir Chrome (ja vien tie nav īpaši apkopoti ar NSS), kas izmantoja NSS līdz 2015. gadam, bet pēc tam tika pārnesti uz BoringSSL, viņus problēma neskar.
Ievainojamība ir radusies kļūdas dēļ sertifikāta verifikācijas kodā vfy_CreateContext faila secvfy.c funkcija. Kļūda izpaužas gan tad, kad klients nolasa sertifikātu no servera kā tad, kad serveris apstrādā klienta sertifikātus.
Pārbaudot DER kodētu ciparparakstu, NSS dekodē parakstu fiksēta izmēra buferī un nodod šo buferi modulim PKCS # 11. Pēcapstrādes laikā DSA un RSA-PSS parakstu izmērs tiek nepareizi pārbaudīts, kā rezultātā rodas kurā noved pie VFYContextStr struktūrai piešķirtā bufera pārpildes, ja ciparparaksta izmērs pārsniedz 16384 bitus (buferim tiek atvēlēti 2048 baiti, bet netiek pārbaudīts, vai paraksts var būt lielāks).
Kods, kas satur ievainojamību, ir datēts ar 2003. gadu, taču tas nebija drauds līdz pārstrukturēšanai 2012. gadā. 2017. gadā tika pieļauta tāda pati kļūda, ieviešot RSA-PSS atbalstu. Lai veiktu uzbrukumu, nepieciešamo datu iegūšanai nav nepieciešama resursietilpīga noteiktu atslēgu ģenerēšana, jo pārpilde notiek posmā pirms ciparparaksta derīguma pārbaudes. Datu ārpus robežām daļa tiek ierakstīta atmiņas apgabalā, kurā ir funkciju norādes, tādējādi atvieglojot darba uzdevumu izveidi.
Ievainojamību atklāja Google Project Zero pētnieki eksperimentu laikā ar jaunām neskaidrām testēšanas metodēm, un tas ir labs pierādījums tam, kā plaši pārbaudītā zināmā projektā triviālas ievainojamības var palikt nepamanītas ilgu laiku.
Attiecībā galvenās problēmas, kurām problēma palika nepamanīta ilgu laiku:
- NSS disku bibliotēkas un izplūdes testi netika veikti kopumā, bet gan atsevišķu komponentu līmenī.
- Piemēram, kods, lai atšifrētu DER un apstrādātu sertifikātus, tika pārbaudīts atsevišķi; Izplūdes laikā varēja iegūt sertifikātu, kas noveda pie attiecīgās ievainojamības izpausmes, taču tā pārbaude nesasniedza pārbaudes kodu un problēma netika atklāta.
- Izplūdes testu laikā tika noteikti stingri ierobežojumi izvades lielumam (10,000 10,000 baiti), ja NSS nebija šādu ierobežojumu (daudzas struktūras normālā režīmā varētu būt lielākas par 2 24 baitiem, tāpēc, lai identificētu problēmas, ir nepieciešams vairāk ievades datu ). Pilnīgai pārbaudei ierobežojumam bija jābūt 1 16 –XNUMX baitam (XNUMX MB), kas atbilst TLS atļautajam sertifikāta maksimālajam izmēram.
- Nepareizs priekšstats par koda pārklājumu, izmantojot neskaidrus testus. Ievainojamais kods tika aktīvi pārbaudīts, taču tika izmantoti fuzeri, kas nespēja ģenerēt nepieciešamos ievades datus. Piemēram, fuzzer tls_server_target izmantoja iepriekš definētu gatavu sertifikātu kopu, kas ierobežoja sertifikāta verifikācijas koda pārbaudi tikai ar TLS ziņojumiem un protokola stāvokļa izmaiņām.
Visbeidzot, Ir vērts pieminēt, ka problēma ar koda nosaukumu BigSig ir novērsta NSS 3.73 un NSS ESR 3.68.1 un risinājuma atjauninājumi pakotnes formā jau ir izlaisti dažādos izplatījumos: Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD utt.
Ja vēlaties uzzināt vairāk par to, varat konsultēties šo saiti.