Kerentanan ing perpustakaan kanthi implementasi utama algoritma SHA-3

Kerentanan (CVE-3-2022) wis diidentifikasi ing implementasine fungsi hash kriptografi SHA-37454 (Keccak) sing ditawakake ing paket XKCP (Paket Kode Keccak eXtended), sing bisa nyebabake kebanjiran buffer sajrone pangolahan tartamtu. data format. Masalah kasebut disebabake bug ing kode implementasi khusus SHA-3, lan dudu kerentanan ing algoritma kasebut. Paket XKCP diarani minangka implementasi resmi SHA-3, dikembangake kanthi input saka tim pangembangan Keccak, lan digunakake minangka basis kanggo fungsi SHA-3 ing macem-macem basa pamrograman (contone, kode XKCP digunakake ing hashlib Python. modul, Ruby digest paket sha3 lan PHP hash_* fungsi).

Miturut peneliti sing nemtokake masalah kasebut, dheweke bisa nggunakake kerentanan kanggo nglanggar sifat kriptografi saka fungsi hash lan nemokake preimages pisanan lan kapindho, uga ndeteksi tabrakan. Kajaba iku, diumumake manawa eksploitasi prototipe bakal digawe sing bakal ngidini kode dieksekusi nalika ngitung hash file sing dirancang khusus. Kerentanan kasebut uga bisa digunakake kanggo nyerang algoritma verifikasi tandha digital sing nggunakake SHA-3 (contone, Ed448). Rincian cara serangan direncanakake bakal diterbitake mengko, sawise kerentanan wis diilangi ing endi wae.

Durung jelas kepiye kerentanan mengaruhi aplikasi sing ana ing praktik, amarga masalah kasebut katon ing kode kasebut, kalkulasi hash siklik ing blok kudu digunakake lan salah sawijining blok sing diproses kudu ukurane udakara 4 GB (paling ora. 2^32 - 200 bita). Nalika ngolah data input bebarengan (tanpa ngetung urut-urutan hash ing bagean), masalah ora katon. Minangka cara pangayoman sing paling gampang, disaranake kanggo mbatesi ukuran maksimal data sing ana ing siji pengulangan pitungan hash.

Kerentanan kasebut disebabake kesalahan ing proses blokir data input. Amarga mbandhingake nilai sing salah karo jinis "int", ukuran data sing ora bener ditemtokake, sing nyebabake buntut ditulis ngluwihi buffer sing diparengake. Utamane, perbandingan kasebut nggunakake ekspresi "partialBlock + instance-> byteIOIndex", sing nyebabake overflow integer kanggo nilai gedhe saka bagean konstituen. Kajaba iku, ana jinis cast sing salah "(unsigned int)(dataByteLen - i)" ing kode kasebut, sing nyebabake kebanjiran ing sistem kanthi jinis size_t 64-bit.

Kode conto sing nyebabake kebanjiran: ngimpor hashlib h = hashlib.sha3_224 () m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Source: opennet.ru

Add a comment