Varnarleysi við framkvæmd kóða í Mozilla NSS við vinnslu vottorða

Mikilvægur varnarleysi (CVE-2021-43527) hefur fundist í NSS (Network Security Services) setti dulkóðunarsafna sem Mozilla hefur þróað, sem getur leitt til þess að árásarkóði sé keyrður þegar unnið er með DSA eða RSA-PSS stafrænar undirskriftir sem tilgreindar eru með DER kóðun aðferð ( Distinguished Encoding Rules). Málið, sem heitir BigSig, er leyst í NSS 3.73 og NSS ESR 3.68.1. Pakkauppfærslur í dreifingum eru fáanlegar fyrir Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Það eru engar uppfærslur í boði fyrir Fedora ennþá.

Vandamálið kemur upp í forritum sem nota NSS til að meðhöndla CMS, S/MIME, PKCS #7 og PKCS #12 stafrænar undirskriftir, eða þegar vottorð eru staðfest í TLS, X.509, OCSP og CRL útfærslum. Varnarleysið getur birst í ýmsum biðlara- og netþjónaforritum sem styðja TLS, DTLS og S/MIME, tölvupóstbiðlara og PDF-skoðara sem nota NSS CERT_VerifyCertificate() símtalið til að staðfesta stafrænar undirskriftir.

LibreOffice, Evolution og Evince eru nefnd sem dæmi um viðkvæm forrit. Hugsanlega gæti vandamálið einnig haft áhrif á verkefni eins og Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss fyrir Apache http netþjóninn, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. Hins vegar birtist varnarleysið ekki í Firefox, Thunderbird og Tor vafra, sem nota sérstakt mozilla::pkix bókasafn, sem einnig er innifalið í NSS, til staðfestingar. Vafrar sem byggja á króm (nema þeir séu sérstaklega smíðaðir með NSS), sem notuðu NSS til 2015, en skiptu síðan yfir í BoringSSL, verða heldur ekki fyrir áhrifum af vandamálinu.

Varnarleysið stafar af villu í staðfestingarkóða vottorðsins í vfy_CreateContext aðgerðinni úr secvfy.c skránni. Villan á sér stað bæði þegar viðskiptavinurinn les vottorð frá þjóninum og þegar þjónninn vinnur úr biðlaraskírteinum. Þegar DER-kóðuð stafræn undirskrift er staðfest, afkóðar NSS undirskriftina í biðminni í fastri stærð og sendir biðminni til PKCS #11 einingarinnar. Við frekari vinnslu er stærðin ranglega könnuð fyrir DSA og RSA-PSS undirskrift, sem leiðir til yfirflæðis á biðminni sem úthlutað er fyrir VFYContextStr uppbyggingu ef stærð stafrænu undirskriftarinnar fer yfir 16384 bita (2048 bæti eru úthlutað fyrir biðminni, en ekki er athugað hvort undirskriftin geti verið stærri) ).

Kóðann sem innihélt varnarleysið má rekja aftur til ársins 2003, en honum stafaði ekki ógn af fyrr en við endurnýjun sem framkvæmd var árið 2012. Árið 2017 voru sömu mistök gerð þegar RSA-PSS stuðningur var innleiddur. Til að framkvæma árás er ekki þörf á auðlindafrekri framleiðslu á tilteknum lyklum til að fá nauðsynleg gögn, þar sem yfirflæðið á sér stað á stigi áður en gengið er úr skugga um réttmæti stafrænu undirskriftarinnar. Sá hluti gagnanna sem fer út fyrir mörkin er skrifaður á minnissvæði sem inniheldur vísbendingar um aðgerðir, sem einfaldar að búa til vinnuafrek.

Varnarleysið var uppgötvað af rannsakendum frá Google Project Zero á meðan þeir voru að gera tilraunir með nýjar óljósar prófunaraðferðir og er góð sýning á því hvernig léttvægir veikleikar geta verið ógreindir í langan tíma í margprófuðu vel þekktu verkefni:

  • NSS kóðanum er viðhaldið af reyndu öryggisteymi sem notar nýjustu prófunar- og villugreiningaraðferðir. Það eru nokkur forrit til staðar til að greiða umtalsverð umbun fyrir að bera kennsl á veikleika í NSS.
  • NSS var eitt af fyrstu verkefnunum sem tóku þátt í oss-fuzz frumkvæði Google og var einnig prófað í libFuzzer-undirstaða fuzz prófunarkerfis Mozilla.
  • Bókasafnskóðinn hefur verið skoðaður margoft í ýmsum stöðugreiningartækjum, þar á meðal verið fylgst með Coverity þjónustunni síðan 2008.
  • Fram til ársins 2015 var NSS notað í Google Chrome og var sjálfstætt staðfest af Google teyminu óháð Mozilla (síðan 2015 skipti Chrome yfir í BoringSSL, en stuðningur við NSS-tengt tengið er áfram).

Helstu vandamálin vegna þess að vandamálið var ógreint í langan tíma:

  • NSS mátsafnið og óljós próf voru ekki gerðar í heild, heldur á stigi einstakra íhluta. Til dæmis var kóðinn fyrir afkóðun DER og vinnslu vottorða athugaður sérstaklega - við flöskuna hefði mátt fá vottorð sem myndi leiða til birtingar umrædds varnarleysis, en athugun þess náði ekki staðfestingarkóðanum og vandamálið ekki opinbera sig.
  • Við óljós prófun voru settar strangar takmarkanir á úttaksstærð (10000 bæti) í fjarveru svipaðra takmarkana í NSS (mörg mannvirki í venjulegum ham gætu haft stærð meira en 10000 bæti, svo fleiri inntaksgögn voru nauðsynleg til að bera kennsl á vandamál) . Fyrir fulla sannprófun ættu mörkin að vera 224-1 bæti (16 MB), sem samsvarar hámarksstærð skírteina sem leyfð er í TLS.
  • Misskilningur um umfjöllun um fuzz prófunarkóða. Viðkvæmi kóðinn var virkur prófaður, en með því að nota fuzzers sem gátu ekki búið til nauðsynleg inntaksgögn. Til dæmis notaði fuzzer tls_server_target fyrirframskilgreint sett af tilbúnum vottorðum, sem takmarkaði athugun vottorðs á staðfestingarkóða við aðeins TLS skilaboð og breytingar á samskiptareglum.

Heimild: opennet.ru

Bæta við athugasemd