Sertifikatların işlənməsi zamanı Mozilla NSS-də kodun icrası zəifliyi

Mozilla tərəfindən hazırlanmış NSS (Şəbəkə Təhlükəsizliyi Xidmətləri) kriptoqrafik kitabxanalar dəstində kritik zəiflik (CVE-2021-43527) müəyyən edilmişdir ki, bu da DSA və ya RSA-PSS rəqəmsal imzalarının işlənilməsi zamanı təcavüzkar kodunun icrasına səbəb ola bilər. DER kodlaşdırma metodu (Möhtəşəm Kodlaşdırma Qaydaları). BigSig kod adlı problem NSS 3.73 və NSS ESR 3.68.1-də həll olunur. Dağıtımlarda paket yeniləmələri Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD üçün mövcuddur. Fedora üçün hələ heç bir yeniləmə yoxdur.

Problem CMS, S/MIME, PKCS #7 və PKCS #12 rəqəmsal imzaları idarə etmək üçün NSS istifadə edən proqramlarda və ya TLS, X.509, OCSP və CRL tətbiqlərində sertifikatların yoxlanılması zamanı baş verir. Zəiflik rəqəmsal imzaları yoxlamaq üçün NSS CERT_VerifyCertificate() çağırışından istifadə edən TLS, DTLS və S/MIME-ni dəstəkləyən müxtəlif müştəri və server proqramlarında, e-poçt müştərilərində və PDF görüntüləyicilərində görünə bilər.

LibreOffice, Evolution və Evince həssas tətbiqlərə misal olaraq qeyd olunur. Potensial olaraq, problem Pidgin, Apache OpenOffice, Suricata, Curl, Chrony, Red Hat Directory Server, Red Hat Certificate System, Apache http server üçün mod_nss, Oracle Communications Messaging Server, Oracle Directory Server Enterprise Edition kimi layihələrə də təsir edə bilər. Bununla belə, boşluq yoxlama üçün NSS-ə daxil olan ayrıca mozilla::pkix kitabxanasından istifadə edən Firefox, Thunderbird və Tor Browser-də görünmür. 2015-ci ilə qədər NSS-dən istifadə edən, lakin sonra BoringSSL-ə keçən Chromium əsaslı brauzerlər (xüsusi olaraq NSS ilə qurulmayıbsa) problemdən təsirlənmir.

Zəifliyə secvfy.c faylından vfy_CreateContext funksiyasında sertifikatın doğrulama kodundakı xəta səbəb olur. Səhv həm müştəri serverdən sertifikat oxuduqda, həm də server müştəri sertifikatlarını emal etdikdə baş verir. DER kodlu rəqəmsal imzanı yoxlayarkən, NSS imzanı sabit ölçülü buferə deşifrə edir və buferi PKCS #11 moduluna ötürür. Sonrakı emal zamanı ölçü DSA və RSA-PSS imzaları üçün səhv yoxlanılır, bu, rəqəmsal imzanın ölçüsü 16384 bitdən çox olduqda VFYContextStr strukturu üçün ayrılmış buferin daşmasına səbəb olur (bufer üçün 2048 bayt ayrılır, lakin imzanın daha böyük ola biləcəyi yoxlanılmır) ).

Boşluğu ehtiva edən kodu 2003-cü ilə qədər izləmək olar, lakin 2012-ci ildə həyata keçirilən refaktorinqə qədər o, təhlükə yaratmadı. 2017-ci ildə RSA-PSS dəstəyini həyata keçirərkən eyni səhvə yol verildi. Hücum etmək üçün lazımi məlumatları əldə etmək üçün resurs tələb edən müəyyən açarların yaradılması tələb olunmur, çünki daşqın rəqəmsal imzanın düzgünlüyünü yoxlamadan əvvəl baş verir. Məlumatların hüdudlardan kənara çıxan hissəsi funksiyalara göstəriciləri ehtiva edən yaddaş sahəsinə yazılır ki, bu da işləyən ekspluatların yaradılmasını asanlaşdırır.

Zəiflik Google Project Zero tədqiqatçıları tərəfindən yeni qeyri-müəyyən test üsulları ilə təcrübə apararkən aşkar edilmişdir və geniş şəkildə sınaqdan keçirilmiş tanınmış layihədə əhəmiyyətsiz boşluqların uzun müddət aşkar edilməməsinin yaxşı nümayişidir:

  • NSS kodu ən müasir sınaq və səhv təhlili üsullarından istifadə edərək təcrübəli təhlükəsizlik qrupu tərəfindən saxlanılır. NSS-də zəiflikləri müəyyən etmək üçün əhəmiyyətli mükafatlar ödəmək üçün bir neçə proqram mövcuddur.
  • NSS Google-un oss-fuzz təşəbbüsünə qoşulan ilk layihələrdən biri idi və həmçinin Mozilla-nın libFuzzer əsaslı fuzz test sistemində sınaqdan keçirilmişdir.
  • Kitabxana kodu dəfələrlə müxtəlif statik analizatorlarda yoxlanılıb, o cümlədən 2008-ci ildən Coverity xidməti tərəfindən nəzarət edilir.
  • 2015-ci ilə qədər NSS Google Chrome-da istifadə olunurdu və Mozilla-dan asılı olmayaraq Google komandası tərəfindən müstəqil şəkildə yoxlanılırdı (2015-ci ildən Chrome BoringSSL-ə keçdi, lakin NSS əsaslı port üçün dəstək qalır).

Problemin uzun müddət aşkar edilmədiyi əsas problemlər:

  • NSS modul kitabxanası və fuzzing testi bütövlükdə deyil, fərdi komponentlər səviyyəsində həyata keçirilmişdir. Məsələn, DER-in dekodlanması və sertifikatların işlənməsi kodu ayrıca yoxlanıldı - fuzzing zamanı sözügedən zəifliyin təzahürünə səbəb olacaq sertifikat əldə edilə bilərdi, lakin onun yoxlanışı yoxlama koduna çatmadı və problem yox idi. özünü ortaya qoyur.
  • Füzing testi zamanı NSS-də oxşar məhdudiyyətlər olmadığı halda çıxış ölçüsünə (10000 bayt) ciddi məhdudiyyətlər qoyuldu (normal rejimdə olan bir çox strukturların ölçüsü 10000 baytdan çox ola bilər, ona görə də problemləri müəyyən etmək üçün daha çox giriş məlumatı tələb olunurdu) . Tam yoxlama üçün limit TLS-də icazə verilən maksimum sertifikat ölçüsünə uyğun gələn 224-1 bayt (16 MB) olmalıdır.
  • Qeyri-səlis test kodunun əhatə dairəsi haqqında yanlış fikir. Zəif kod aktiv şəkildə sınaqdan keçirildi, lakin lazımi giriş məlumatlarını yarada bilməyən fuzzerlərdən istifadə edildi. Məsələn, fuzzer tls_server_target əvvəlcədən təyin edilmiş hazır sertifikatlar dəstindən istifadə etdi, bu da sertifikatın yoxlanılması kodunun yoxlanılmasını yalnız TLS mesajları və protokol vəziyyəti dəyişiklikləri ilə məhdudlaşdırdı.

Mənbə: opennet.ru

Добавить комментарий