Vulnerabilitate în biblioteca principală de implementare a algoritmului SHA-3

În implementarea funcției hash criptografice SHA-3 (Keccak), propusă în pachetul XKCP (eXtended Keccak Code Package), a fost descoperită o vulnerabilitate (CVE-2022-37454) care poate duce la o supraaglomerare a buffer-ului în timpul procesării unor date formate în mod specific. Problema este cauzată de o eroare în codul unei implementări specifice a SHA-3, nu de o vulnerabilitate a algoritmului în sine. Pachetul XKCP este prezentat ca implementarea oficială a SHA-3, dezvoltat cu participarea echipei de dezvoltatori Keccak și folosit ca bază în funcțiile de lucru cu SHA-3 în diferite limbaje de programare (de exemplu, codul XKCP este utilizat în modulul hashlib din Python, pachetul digest-sha3 din Ruby și funcțiile de hash_* din PHP).

Conform declarațiilor cercetătorului care a descoperit problema, acesta a reușit să folosească vulnerabilitatea pentru a compromite proprietățile criptografice ale funcției hash și a găsi primele și cele de-a doua preimagine, precum și pentru a determina coliziunile. În plus, s-a anunțat crearea unui prototip de exploit care permite executarea codului în timpul calculării hash-ului unui fișier format în mod special. Vulnerabilitatea poate fi, de asemenea, utilizată pentru atacuri asupra algoritmilor de verificare a semnăturilor digitale care folosesc SHA-3 (de exemplu, Ed448). Detalii ale metodelor de atac urmează să fie publicate ulterior, după eliminarea globală a vulnerabilității.

Cât de mult afectează vulnerabilitatea aplicațiile existente în practică, este încă neclar, deoarece pentru a se manifesta problema, codul trebuie să aplice calculul hash-ului în mod ciclic pe blocuri, iar unul dintre blocurile procesate trebuie să aibă o dimensiune de aproximativ 4 GB (de cel puțin 2^32 - 200 bytes). Atunci când datele de intrare sunt procesate deodată (fără calculul secvențial al hash-ului în părți), problema nu se manifestă. Ca cea mai simplă metodă de protecție, se propune limitarea dimensiunii maxime a datelor implicate într-o singură iterație de calculare a hash-ului.

Vulnerabilitatea este cauzată de o eroare în manipularea pe bloc a datelor de intrare. Datorită comparării incorecte a valorilor de tip „int”, se determină o dimensiune greșită a datelor ce urmează a fi procesate, ceea ce duce la scrierea unui tail în afara buffer-ului alocat. În special, în comparație s-a folosit expresia „partialBlock + instance->byteIOIndex”, care, la valori mari ale componentelor, a dus la un overflow întreg. În plus, în cod a fost o conversie greșită de tip „(unsigned int)(dataByteLen - i)”, care a provocat un overflow pe sistemele cu tip size_t de 64 de biți.

Exemplu de cod care duce la overflow: 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.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster