Kerentanan eksekusi kode ing Mozilla NSS nalika ngolah sertifikat

Kerentanan kritis (CVE-2021-43527) wis diidentifikasi ing perpustakaan kriptografi NSS (Layanan Keamanan Jaringan) sing dikembangake dening Mozilla, sing bisa nyebabake eksekusi kode penyerang nalika ngolah tanda tangan digital DSA utawa RSA-PSS sing ditemtokake nggunakake Metode encoding DER ( Distinguished Encoding Rules). Jeksa Agung bisa ngetokake, codenamed BigSig, wis ditanggulangi ing NSS 3.73 lan NSS ESR 3.68.1. Nganyari paket ing distribusi kasedhiya kanggo Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Ora ana update sing kasedhiya kanggo Fedora.

Masalah dumadi ing aplikasi sing nggunakake NSS kanggo nangani CMS, S / MIME, PKCS # 7 lan PKCS # 12 teken digital, utawa nalika verifikasi sertifikat ing TLS, X.509, OCSP lan CRL implementasine. Kerentanan bisa katon ing macem-macem aplikasi klien lan server sing ndhukung TLS, DTLS lan S / MIME, klien email lan PDF viewers sing nggunakake telpon NSS CERT_VerifyCertificate () kanggo verifikasi teken digital.

LibreOffice, Evolution lan Evince disebutake minangka conto aplikasi sing rawan. Kemungkinan, masalah kasebut uga bisa mengaruhi proyek kayata Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss kanggo server Apache http, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. Nanging, kerentanan kasebut ora katon ing Firefox, Thunderbird lan Tor Browser, sing nggunakake perpustakaan mozilla:: pkix sing kapisah, uga kalebu ing NSS, kanggo verifikasi. browser basis Chromium (kajaba padha khusus dibangun karo NSS), kang digunakake NSS nganti 2015, nanging banjur pindhah menyang BoringSSL, uga ora kena pengaruh masalah.

Kerentanan disebabake kesalahan ing kode verifikasi sertifikat ing fungsi vfy_CreateContext saka file secvfy.c. Kesalahan kasebut kedadeyan nalika klien maca sertifikat saka server lan nalika server ngolah sertifikat klien. Nalika verifikasi teken digital DER-dienkode, NSS decode teken menyang buffer ukuran tetep lan liwat buffer kanggo PKCS # 11 modul. Sajrone pangolahan luwih lanjut, ukurane salah dicenthang kanggo tandha DSA lan RSA-PSS, sing ndadΓ©kakΓ© kebanjiran buffer sing dialokasikan kanggo struktur VFYContextStr yen ukuran tandha digital ngluwihi 16384 bit (2048 bait dialokasikan kanggo buffer, nanging ora dicenthang yen teken bisa luwih gedhe) ).

Kode sing ngemot kerentanan kasebut bisa dilacak wiwit taun 2003, nanging ora nyebabake ancaman nganti refactoring ditindakake ing taun 2012. Ing 2017, kesalahan sing padha ditindakake nalika ngetrapake dhukungan RSA-PSS. Kanggo nindakake serangan, generasi kunci-intensif sumber daya tartamtu ora dibutuhake kanggo entuk data sing dibutuhake, amarga kebanjiran kedadeyan ing tahap sadurunge mriksa bener tandha digital. Bagean data sing ngluwihi wates ditulis menyang area memori sing ngemot penunjuk kanggo fungsi, sing nyederhanakake nggawe eksploitasi kerja.

Kerentanan kasebut ditemokake dening peneliti saka Google Project Zero nalika nyobi karo metode pengujian fuzzing anyar lan minangka demonstrasi sing apik babagan kerentanan sing ora pati penting bisa ora dideteksi nganti suwe ing proyek terkenal sing wis diuji kanthi akeh:

  • Kode NSS dikelola dening tim keamanan sing berpengalaman nggunakake teknik pengujian lan analisis kesalahan sing paling canggih. Ana sawetara program kanggo mbayar ganjaran sing signifikan kanggo ngenali kerentanan ing NSS.
  • NSS minangka salah sawijining proyek pisanan sing gabung karo inisiatif oss-fuzz Google lan uga diuji ing sistem pengujian fuzz basis libFuzzer Mozilla.
  • Kode perpustakaan wis dicenthang kaping pirang-pirang ing macem-macem analisa statis, kalebu dipantau dening layanan Coverity wiwit 2008.
  • Nganti 2015, NSS digunakake ing Google Chrome lan diverifikasi sacara mandiri dening tim Google kanthi bebas saka Mozilla (wiwit 2015, Chrome pindhah menyang BoringSSL, nanging dhukungan kanggo port basis NSS tetep).

Masalah utama amarga masalah kasebut tetep ora dideteksi nganti suwe:

  • Perpustakaan modular NSS lan tes fuzzing ditindakake ora sakabehe, nanging ing tingkat komponen individu. Contone, kode kanggo dekoding DER lan sertifikat pangolahan wis dicenthang kanthi kapisah - sajrone fuzzing, sertifikat bisa dipikolehi sing bakal nyebabake manifestasi kerentanan kasebut, nanging mriksa kasebut ora tekan kode verifikasi lan masalah kasebut ora. mbukak dhewe.
  • Sajrone testing fuzzing, watesan ketat disetel ing ukuran output (10000 bait) tanpa watesan sing padha ing NSS (akeh struktur ing mode normal bisa duwe ukuran luwih saka 10000 bait, supaya data input luwih dibutuhake kanggo ngenali masalah) . Kanggo verifikasi lengkap, watesan kudune 224-1 bita (16 MB), sing cocog karo ukuran sertifikat maksimal sing diidini ing TLS.
  • Misconception babagan jangkoan kode testing fuzz. Kode sing rawan diuji kanthi aktif, nanging nggunakake fuzzer sing ora bisa ngasilake data input sing dibutuhake. Contone, fuzzer tls_server_target nggunakake set sertifikat sing wis siap digawe, sing mbatesi mriksa kode verifikasi sertifikat mung kanggo pesen TLS lan owah-owahan status protokol.

Source: opennet.ru

Add a comment