Vulnerebleco de ekzekuto de kodo en Mozilla NSS dum prilaborado de atestiloj

Kritika vundebleco (CVE-2021-43527) estis identigita en la NSS (Network Security Services) aro de kriptaj bibliotekoj evoluigitaj de Mozilla, kiu povas konduki al la ekzekuto de atakanta kodo dum prilaborado de DSA aŭ RSA-PSS ciferecaj subskriboj specifitaj uzante la DER-kodiga metodo (Distinguished Encoding Rules). La problemo, kodita BigSig, estas solvita en NSS 3.73 kaj NSS ESR 3.68.1. Pakaj ĝisdatigoj en distribuoj disponeblas por Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Ne estas ĝisdatigoj disponeblaj por Fedora ankoraŭ.

La problemo okazas en aplikoj kiuj uzas NSS por manipuli CMS, S/MIME, PKCS #7 kaj PKCS #12 ciferecajn subskribojn, aŭ dum kontrolado de atestiloj en TLS, X.509, OCSP kaj CRL-efektivigoj. La vundebleco povas aperi en diversaj klientaj kaj servilaj aplikoj, kiuj subtenas TLS, DTLS kaj S/MIME, retpoŝtajn klientojn kaj PDF-spektantojn, kiuj uzas la NSS CERT_VerifyCertificate() alvokon por kontroli ciferecajn subskribojn.

LibreOffice, Evolution kaj Evince estas menciitaj kiel ekzemploj de vundeblaj aplikoj. Eble, la problemo ankaŭ povas influi projektojn kiel Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss por la Apache http-servilo, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. Tamen, la vundebleco ne aperas en Firefox, Thunderbird kaj Tor-Retumilo, kiuj uzas apartan mozilla::pkix-bibliotekon, ankaŭ inkluzivitan en NSS, por kontroli. Kromi-bazitaj retumiloj (krom se ili estas specife konstruitaj kun NSS), kiuj uzis NSS ĝis 2015, sed poste ŝanĝis al BoringSSL, ankaŭ ne estas tuŝitaj de la problemo.

La vundebleco estas kaŭzita de eraro en la atestila konfirmkodo en la funkcio vfy_CreateContext de la dosiero secvfy.c. La eraro okazas kaj kiam la kliento legas atestilon de la servilo kaj kiam la servilo prilaboras klientajn atestilojn. Dum kontrolado de DER-kodita cifereca subskribo, NSS malkodas la subskribon en fiksgrandan bufron kaj pasas la bufron al la PKCS numero 11 modulo. Dum plua pretigo, la grandeco estas neĝuste kontrolita por DSA kaj RSA-PSS-signaturoj, kio kondukas al superfluo de la bufro asignita por la strukturo VFYContextStr se la grandeco de la cifereca subskribo superas 16384 bitojn (2048 bajtoj estas asignitaj por la bufro, sed oni ne kontrolas, ke la subskribo povas esti pli granda) ).

La kodo enhavanta la vundeblecon povas esti spurita reen al 2003, sed ĝi ne prezentis minacon ĝis refactoring efektivigita en 2012. En 2017, la sama eraro estis farita dum efektivigado de RSA-PSS-subteno. Por efektivigi atakon, ne necesas generado de rimedo-intensa generacio de certaj ŝlosiloj por akiri la necesajn datumojn, ĉar la superfluo okazas en la stadio antaŭ kontroli la ĝustecon de la cifereca subskribo. La parto de la datenoj, kiu iras preter la limoj, estas skribita al memorareo enhavanta montrilojn al funkcioj, kio simpligas la kreadon de funkciaj ekspluatoj.

La vundebleco estis malkovrita de esploristoj de Google Project Zero dum eksperimentado kun novaj fuzz-testmetodoj kaj estas bona pruvo pri kiel bagatelaj vundeblecoj povas resti nerimarkitaj dum longa tempo en vaste testita konata projekto:

  • La NSS-kodo estas konservita fare de sperta sekureca teamo uzanta pintnivelajn testajn kaj erarajn analizteknikojn. Estas pluraj programoj por pagi signifajn rekompencojn por identigi vundeblecojn en NSS.
  • NSS estis unu el la unuaj projektoj se temas pri aliĝi al la oss-fuzz-iniciato de Google kaj ankaŭ estis testita en la libFuzzer-bazita fuzz-testsistemo de Mozilla.
  • La bibliotekkodo estis kontrolita multajn fojojn en diversaj senmovaj analiziloj, inkluzive de estado monitorita fare de la Coverity-servo ekde 2008.
  • Ĝis 2015, NSS estis uzita en Google Chrome kaj estis sendepende kontrolita fare de la Google-teamo sendepende de Mozilla (ekde 2015, Chrome ŝanĝis al BoringSSL, sed subteno por la NSS-bazita haveno restas).

La ĉefaj problemoj pro kiuj la problemo restis nerimarkita dum longa tempo:

  • La modula biblioteko de NSS kaj fuzzing-testado estis faritaj ne kiel tutaĵo, sed sur la nivelo de individuaj komponentoj. Ekzemple, la kodo por malkodi DER kaj prilaborado de atestiloj estis kontrolita aparte - dum fuzzing oni povus akiri atestilon, kiu kondukus al la manifestiĝo de la koncerna vundebleco, sed ĝia kontrolo ne atingis la konfirmkodon kaj la problemo ne atingis. malkaŝi sin.
  • Dum fuziga testado, striktaj restriktoj estis fiksitaj sur la produktaĵgrandeco (10000 bajtoj) en la foresto de similaj restriktoj en NSS (multaj strukturoj en normala reĝimo povis havi grandecon de pli ol 10000 bajtoj, tiel ke pli da enirdatenoj estis postulataj por identigi problemojn) . Por plena konfirmo, la limo devus esti 224-1 bajtoj (16 MB), kio respondas al la maksimuma atestgrandeco permesita en TLS.
  • Miskompreniĝo pri fuzz-testa kodkovrado. La vundebla kodo estis aktive testita, sed uzante fuzers kiuj estis nekapablaj generi la necesajn enirdatenojn. Ekzemple, fuzzer tls_server_target uzis antaŭdifinitan aron de pretaj atestiloj, kiuj limigis la atestilkonfirmkodkontrolon al nur TLS-mesaĝoj kaj protokolaj statoŝanĝoj.

fonto: opennet.ru

Aldoni komenton