Vulnerabilitatea în bibliotecă cu implementarea principală a algoritmului SHA-3

O vulnerabilitate (CVE-3-2022) a fost identificată în implementarea funcției de hash criptografic SHA-37454 (Keccak) oferită în pachetul XKCP (eXtended Keccak Code Package), care poate duce la o depășire a tamponului în timpul procesării anumitor date formatate. Problema este cauzată de o eroare în codul unei implementări specifice a SHA-3 și nu de o vulnerabilitate a algoritmului în sine. Pachetul XKCP este prezentat ca implementare oficială a SHA-3, dezvoltată cu contribuția echipei de dezvoltare Keccak și folosit ca bază pentru funcțiile SHA-3 în diferite limbaje de programare (de exemplu, codul XKCP este folosit în hashlib-ul Python module, pachetul Ruby digest sha3 și funcțiile PHP hash_*).

Potrivit cercetătorului care a identificat problema, el a putut folosi vulnerabilitatea pentru a încălca proprietățile criptografice ale funcției hash și pentru a găsi prima și a doua preimagini, precum și pentru a detecta coliziuni. În plus, s-a anunțat că va fi creat un prototip de exploit care să permită executarea codului la calcularea hash-ului unui fișier special conceput. Vulnerabilitatea ar putea fi folosită și pentru a ataca algoritmii de verificare a semnăturii digitale care folosesc SHA-3 (de exemplu, Ed448). Detaliile metodelor de atac sunt planificate să fie publicate ulterior, după ce vulnerabilitatea a fost eliminată peste tot.

Nu este încă clar cât de mult afectează vulnerabilitatea aplicațiilor existente în practică, deoarece pentru ca problema să se manifeste în cod, trebuie utilizate calcule hash ciclice în blocuri, iar unul dintre blocurile procesate trebuie să aibă o dimensiune de aproximativ 4 GB (cel puțin 2^32 - 200 de octeți). Atunci când procesați datele de intrare dintr-o dată (fără a calcula secvențial hash-ul în părți), problema nu apare. Ca cea mai simplă metodă de protecție, se propune limitarea dimensiunii maxime a datelor implicate într-o iterație a calculului hash.

Vulnerabilitatea este cauzată de o eroare în procesarea în bloc a datelor de intrare. Datorită comparării incorecte a valorilor cu tipul „int”, se determină dimensiunea incorectă a datelor în așteptare, ceea ce duce la scrierea cozii dincolo de bufferul alocat. În special, comparația a folosit expresia „partialBlock + instance->byteIOIndex”, ceea ce a condus la depășirea întregului pentru valori mari ale părților constitutive. În plus, a existat un tip incorect turnat „(unsigned int)(dataByteLen - i)” în cod, care a provocat o depășire pe sistemele cu un tip size_t pe 64 de biți.

Exemplu de cod care provoacă depășire: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Sursa: opennet.ru

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster