Kerentanan di perpustakaan dengan implementasi utama algoritma SHA-3

Kerentanan (CVE-3-2022) telah diidentifikasi dalam implementasi fungsi hash kriptografi SHA-37454 (Keccak) yang ditawarkan dalam paket XKCP (eXended Keccak Code Package), yang dapat menyebabkan buffer overflow selama pemrosesan tertentu data yang diformat. Masalah ini disebabkan oleh bug dalam kode implementasi spesifik SHA-3, dan bukan oleh kerentanan dalam algoritma itu sendiri. Paket XKCP disebut-sebut sebagai implementasi resmi SHA-3, dikembangkan dengan masukan dari tim pengembangan Keccak, dan digunakan sebagai dasar fungsi SHA-3 dalam berbagai bahasa pemrograman (misalnya, kode XKCP digunakan dalam hashlib Python modul, paket intisari Ruby sha3 dan fungsi hash_* PHP).

Menurut peneliti yang mengidentifikasi masalah tersebut, dia dapat menggunakan kerentanan tersebut untuk melanggar properti kriptografi fungsi hash dan menemukan gambar awal pertama dan kedua, serta mendeteksi tabrakan. Selain itu, diumumkan bahwa prototipe eksploitasi akan dibuat yang memungkinkan kode dieksekusi saat menghitung hash dari file yang dirancang khusus. Kerentanan juga berpotensi digunakan untuk menyerang algoritma verifikasi tanda tangan digital yang menggunakan SHA-3 (misalnya, Ed448). Rincian metode serangan rencananya akan dipublikasikan kemudian, setelah kerentanan di mana-mana dihilangkan.

Belum jelas seberapa besar kerentanan mempengaruhi aplikasi yang ada dalam praktiknya, karena agar masalah muncul dalam kode, perhitungan hash siklik dalam blok harus digunakan dan salah satu blok yang diproses harus berukuran sekitar 4 GB (setidaknya 2^32 - 200 byte). Saat memproses data masukan sekaligus (tanpa menghitung hash secara berurutan sebagian), masalah tidak muncul. Sebagai metode perlindungan paling sederhana, diusulkan untuk membatasi ukuran maksimum data yang terlibat dalam satu iterasi penghitungan hash.

Kerentanan tersebut disebabkan oleh kesalahan dalam blok pengolahan data masukan. Karena perbandingan nilai yang salah dengan tipe "int", ukuran data tertunda yang salah ditentukan, yang menyebabkan ekor ditulis di luar buffer yang dialokasikan. Secara khusus, perbandingan tersebut menggunakan ekspresi “partialBlock + instance->byteIOIndex”, yang menyebabkan integer overflow untuk nilai besar dari bagian-bagian penyusunnya. Selain itu, ada tipe cast "(unsigned int)(dataByteLen - i)" yang salah dalam kode, yang menyebabkan overflow pada sistem dengan tipe size_t 64-bit.

Contoh kode yang menyebabkan overflow: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.perbarui(m1) h.perbarui(m2) cetak(h.hexdigest())

Sumber: opennet.ru

Tambah komentar