Peringatan Keamanan
Kerentanan Fungsi extract() pada PHP: Ancaman Memory Corruption dan Remote Code Execution
Kerentanan kritis telah ditemukan pada fungsi extract() di PHP, khususnya ketika digunakan dengan flag EXTR_REFS. Fungsi ini, dalam kondisi tertentu, dapat menyebabkan memory corruption seperti double-free atau use-after-free, terutama bila data masukan berisi objek yang memiliki metode destruktor (__destruct()) yang memodifikasi atau menghapus variabel secara tak terduga.
Kerentanan Fungsi extract() pada PHP: Ancaman Memory Corruption dan Remote Code Execution
Kerentanan kritis telah ditemukan pada fungsi extract() di PHP, khususnya ketika digunakan dengan flag EXTR_REFS. Fungsi ini, dalam kondisi tertentu, dapat menyebabkan memory corruption seperti double-free atau use-after-free, terutama bila data masukan berisi objek yang memiliki metode destruktor (__destruct()) yang memodifikasi atau menghapus variabel secara tak terduga.
Jika berhasil dieksploitasi, celah ini memungkinkan eksekusi kode arbitrer (Remote Code Execution - RCE) dan akses baca/tulis ke memori internal PHP. Akibatnya, penyerang dapat mengambil alih sistem, menyusupkan perintah berbahaya, hingga mencuri data sensitif.
Detail Kerentanan :
Detail Kerentanan :
- Fungsi terdampak: extract() dengan flag EXTR_REFS
- Versi PHP terdampak
- PHP 5.x (terutama rawan terhadap double-free)
- PHP 7.x dan 8.x (rentan terhadap use-after-free)
- CVE / Advisory: GHSA-4pwq-3fv3-gm94
- Tanggal pengungkapan resmi: Maret 2024
Fungsi extract() digunakan untuk mengimpor elemen dari array ke dalam simbol lokal. Misalnya :
$data = ['username' => 'admin'];
extract($data);
echo $username; // 'admin'
Namun, ketika digunakan dengan flag EXTR_REFS, referensi langsung terhadap nilai dalam array akan dibuat. Jika array berisi objek kompleks yang memiliki metode __destruct(), dan destruktor ini menghapus atau memodifikasi referensi tersebut, maka dapat menyebabkan free memory lebih dari sekali atau akses ke memori yang sudah tidak valid (use-after-free).
Ini adalah jenis kerentanan Memory Corruption Attack, yang bisa digunakan untuk menyuntikkan dan menjalankan kode berbahaya di sistem target.
Dampak Potensial
Dampak Potensial
- Remote Code Execution (RCE): Penyerang dapat mengeksekusi perintah sistem melalui PHP.
- Privasi dan Keamanan Data: Kemungkinan bocornya data internal yang seharusnya tidak dapat diakses.
- Pengambilalihan Server: Jika PHP berjalan sebagai bagian dari server web, seluruh sistem bisa dikompromikan.
Langkah Mitigasi
Perbarui PHP ke versi terbaru yang telah menerima perbaikan resmi untuk kerentanan ini.
- Hindari penggunaan extract(), terutama dengan flag EXTR_REFS.
- Jika extract() harus digunakan:
- Validasi dan sanitasi data masukan.
- Pastikan tidak ada objek dengan metode __destruct() berbahaya.
- Gunakan alternatif yang lebih aman seperti ekstraksi manual array.
Kesimpulan
Kerentanan pada fungsi extract() menunjukkan betapa pentingnya praktik pengkodean yang aman, bahkan pada fitur bawaan bahasa pemrograman populer seperti PHP. Pengembang harus menghindari penggunaan fitur yang berisiko tinggi, terutama saat menangani data dari pengguna. Perbarui sistem Anda, audit kode Anda, dan pertimbangkan pendekatan pemrograman defensif untuk menjaga sistem dari eksploitasi.
Sumber : https://www.idsirtii.or.id/peringatan.html
Sumber : https://www.idsirtii.or.id/peringatan.html