Pagkahuyang sa pagpatuman sa code sa Mozilla NSS sa pagproseso sa mga sertipiko

Ang usa ka kritikal nga kahuyangan (CVE-2021-43527) nahibal-an sa NSS (Network Security Services) nga set sa cryptographic nga mga librarya nga gimugna ni Mozilla, nga mahimong mosangpot sa pagpatuman sa attacker code sa pagproseso sa DSA o RSA-PSS digital nga mga pirma nga gipiho gamit ang Pamaagi sa pag-encode sa DER ( Distinguished Encoding Rules). Ang isyu, nga gi-codenamed BigSig, nasulbad sa NSS 3.73 ug NSS ESR 3.68.1. Ang mga update sa package sa mga distribusyon magamit alang sa Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD. Wala pa'y mga update nga magamit alang sa Fedora.

Ang problema mahitabo sa mga aplikasyon nga naggamit sa NSS sa pagdumala sa CMS, S/MIME, PKCS #7 ug PKCS #12 nga mga digital nga pirma, o sa pag-verify sa mga sertipiko sa TLS, X.509, OCSP ug CRL nga mga pagpatuman. Ang pagkahuyang mahimong makita sa lainlaing mga aplikasyon sa kliyente ug server nga nagsuporta sa TLS, DTLS ug S/MIME, mga kliyente sa email ug mga tigtan-aw sa PDF nga naggamit sa tawag sa NSS CERT_VerifyCertificate() aron mapamatud-an ang mga digital nga pirma.

Ang LibreOffice, Evolution ug Evince gihisgutan isip mga pananglitan sa mga mahuyang nga aplikasyon. Posible, ang problema mahimo usab nga makaapekto sa mga proyekto sama sa Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, mod_nss para sa Apache http server, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition. Bisan pa, ang pagkahuyang dili makita sa Firefox, Thunderbird ug Tor Browser, nga naggamit ug lahi nga mozilla::pkix library, gilakip usab sa NSS, alang sa pag-verify. Ang mga browser nga nakabase sa Chromium (gawas kung kini espesipikong gitukod gamit ang NSS), nga gigamit ang NSS hangtod 2015, apan gibalhin sa BoringSSL, dili usab apektado sa problema.

Ang kahuyang kay tungod sa usa ka sayop sa certificate verification code sa vfy_CreateContext function gikan sa secvfy.c file. Ang sayup mahitabo sa diha nga ang kliyente nagbasa sa usa ka sertipiko gikan sa server ug kung ang server nagproseso sa mga sertipiko sa kliyente. Sa pagmatuod sa usa ka DER-encoded digital signature, gi-decode sa NSS ang pirma ngadto sa fixed-size buffer ug ipasa ang buffer ngadto sa PKCS #11 module. Atol sa dugang nga pagproseso, ang gidak-on sayop nga gisusi alang sa DSA ug RSA-PSS nga mga pirma, nga mosangpot sa pag-awas sa buffer nga gigahin alang sa VFYContextStr nga istruktura kung ang gidak-on sa digital nga pirma molapas sa 16384 bits (2048 bytes ang gigahin alang sa buffer, apan wala gisusi nga ang pirma mahimong mas dako) ).

Ang code nga adunay sulud nga pagkahuyang mahimong masubay balik sa 2003, apan wala kini naghulga hangtod sa usa ka refactoring nga gihimo kaniadtong 2012. Sa 2017, ang parehas nga sayup nahimo sa pagpatuman sa suporta sa RSA-PSS. Aron sa paghimo sa usa ka pag-atake, resource-intensive generation sa pipila ka mga yawe dili gikinahanglan aron sa pagkuha sa gikinahanglan nga data, tungod kay ang pag-awas mahitabo sa entablado sa atubangan sa pagsusi sa pagkahusto sa digital nga pirma. Ang bahin sa datos nga molapas sa mga utlanan gisulat sa usa ka lugar sa panumduman nga adunay mga pointer sa mga gimbuhaton, nga nagpasimple sa paghimo sa mga pagpahimulos sa pagtrabaho.

Ang pagkahuyang nadiskubrehan sa mga tigdukiduki gikan sa Google Project Zero samtang nag-eksperimento sa bag-ong mga pamaagi sa pagsulay sa fuzzing ug usa ka maayo nga pagpakita kung giunsa ang mga wala’y hinungdan nga kahuyangan mahimong dili mamatikdan sa dugay nga panahon sa usa ka kaylap nga nasulayan nga ilado nga proyekto:

  • Ang NSS code gipadayon sa usa ka eksperyensiyadong grupo sa seguridad gamit ang state-of-the-art nga pagsulay ug mga teknik sa pagtuki sa sayop. Adunay ubay-ubay nga mga programa nga gipahimutang aron sa pagbayad sa mahinungdanong mga ganti alang sa pag-ila sa mga kahuyangan sa NSS.
  • Ang NSS maoy usa sa unang mga proyekto nga miapil sa oss-fuzz initiative sa Google ug gisulayan usab sa Mozilla's libFuzzer-based fuzz testing system.
  • Ang code sa librarya gisusi sa daghang mga higayon sa lain-laing mga static analyzer, lakip ang pagmonitor sa serbisyo sa Coverity sukad 2008.
  • Hangtod sa 2015, ang NSS gigamit sa Google Chrome ug independente nga gipamatud-an sa Google team nga independente sa Mozilla (sukad sa 2015, ang Chrome mibalhin sa BoringSSL, apan ang suporta alang sa NSS-based nga pantalan nagpabilin).

Ang mga nag-unang problema tungod kay ang problema nagpabilin nga wala mamatikdi sa dugay nga panahon:

  • Ang NSS modular library ug fuzzing testing gihimo dili sa kinatibuk-an, apan sa lebel sa indibidwal nga mga sangkap. Pananglitan, ang code alang sa pag-decode sa DER ug pagproseso sa mga sertipiko gisusi nga gilain - sa panahon sa pag-fuzzing, mahimo’g makuha ang usa ka sertipiko nga mosangput sa pagpakita sa pagkahuyang nga gipangutana, apan ang tseke niini wala makaabot sa verification code ug ang problema wala. ipadayag ang kaugalingon.
  • Atol sa fuzzing testing, ang estrikto nga mga restriksyon gitakda sa output size (10000 bytes) kung walay susamang restriksyon sa NSS (daghang mga istruktura sa normal nga mode mahimong adunay gidak-on nga labaw pa sa 10000 bytes, busa gikinahanglan ang dugang input data aron mahibal-an ang mga problema) . Alang sa hingpit nga pag-verify, ang limitasyon kinahanglan nga 224-1 bytes (16 MB), nga katumbas sa labing kadaghan nga gidak-on sa sertipiko nga gitugotan sa TLS.
  • Sayop nga pagsabut bahin sa pagsakup sa code sa pagsulay sa fuzz. Ang bulnerable nga code aktibong gisulayan, apan gamit ang mga fuzzer nga dili makahimo sa gikinahanglan nga data sa input. Pananglitan, ang fuzzer tls_server_target migamit ug predefined set sa ready-made certificates, nga naglimite sa certificate verification code check sa TLS messages lang ug protocol state changes.

Source: opennet.ru

Idugang sa usa ka comment