Pada tanggal 6 September 2023, Zero-day exploit pada WebP Codec baru saja ditemukan oleh Apple Security Engineering and Architecture dan Citizen Lab, berkaitan dengan heap buffer overflow pada format gambar WebP.

Sumber masalah berada di dalam fungsi “BuildHuffmanTable”, yang digunakan untuk memverifikasi keakuratan data. Kode ini menginisialisasi tabel HuffmanCode berdasarkan ukuran yang ditentukan (didefinisikan oleh LENGTHS_TABLE_BITS). Kemudian, fungsi ini mencoba membuat tabel Huffman dari data yang diberikan. Jika tabel tidak dibangun dengan benar, kode akan lompat ke label End, untuk error handling atau clean-up

HuffmanCode table[1 << LENGTHS_TABLE_BITS];

if (!VP8LBuildHuffmanTable(table, LENGTHS_TABLE_BITS,
               code_length_code_lengths,
               NUM_CODE_LENGTH_CODES)) {
   goto End;
}
Code Snippet 1. Kerentanan Pada BuildHuffmanTable

Kerentanan terjadi ketika table memory tidak mengalokasikan ruang yang cukup untuk data yang sudah terverifikasi. Apabila table sudah terisi penuh, sistem akan mencoba menulis data di luar memori yang telah ditentukan. Dalam bidang keamanan komputer, ini disebut Out-of-Bounds (OOB) write, dan dapat menyebabkan perilaku tidak terduga, crash, atau bahkan potensial eksploitasi. Dalam kasus kerentanan ini, penyerang dapat menggunakan OOB write untuk menulis data melebih memori yang dialokasikan sehingga menimpa alokasi memori data lain termasuk function pointer dan juga return address, menyebabkan system crash dan memungkinkan untuk menjalankan kode secara bebas di system.

Tentunya ada peran serta dari korban dalam mengeksploitasi kerentanan ini. Penyerang membuat website yang memiliki gambar berformat WebP yang sangat besar. Lalu penyerang mengirimkan link menuju website itu kepada si korban. Ketika korban membuka website tersebut, gambar WebP yang ada didalam website tersebut akan menyebabkan heap buffer overflow, membuat Huffman Table terisi penuh dan memberikan kesempatan untuk penyerang menjalankan kode/aplikasi yang diinginkan.

Untuk mengatasi masalah ini, mekanisme pengaman telah diterapkan. Dari sebelumnya  menginisialisasi ukuran tabel secara lansung, pada update yang dirilis, fungsi VP8LHuffmanTablesAllocate ditambahkan. Fungsi ini memeriksa dan mengalokasikan jumlah memori yang sesuai untuk tabel berdasarkan kebutuhan data. Setelah memastikan berapa memori yang dibutuhkan, tabel Huffman kemudian dibangun dengan fungsi VP8LBuildHuffmanTable seperti sebelumnya.

HuffmanTables tables;

if (!VP8LHuffmanTablesAllocate(1 << LENGTHS_TABLE_BITS, &tables) || 
    !VP8LBuildHuffmanTable(&tables, LENGTHS_TABLE_BITS,
                  code_length_code_lengths.NUM_CODE_LENGTH_CODES)) {
   goto End;
}
Code Snippet 2. HuffmanTables

Google akhirnya memberi perhatian serius pada kerentanan ini dan untuk mengatasi permasalahan ini dengan meluncurkan security patch untuk produk Google Chrome tanggal 11 September 2023, atau 5 hari setelah kerentanan ini ditemukan. Disusul oleh Mozilla sehari kemudian untuk produk Thunderbird dan FireFox. Tentunya, apabila anda pengguna aplikasi tersebut, segera melakukan update dengan patch yang telah dirilis untuk memastikan anda aman dari bahaya ekspoitasi siber.

Sumber: Critical vulnerability in WebP Codec has browser vendors scrambling for updates (stackdiary.com)