Tim pengembang PHP telah menyusun ulang paket instalasi resmi Windows untuk versi PHP 8.2 hingga 8.5 guna mengatasi celah keamanan CVE-2026-111497, sebuah kelemahan pada pustaka kompresi Brotli bawaan. Kerentanan berbahaya ini dapat memungkinkan pihak penyerang merusak memori sistem dan berpotensi mengeksekusi kode program secara sewenang-wenang.
Pihak PHP menerangkan bahwa celah ini dapat dieksploitasi lewat ekstensi cURL ketika ekstensi tersebut memproses dekompresi respons HTTP secara otomatis. Meskipun konfigurasi cURL mematikannya secara bawaan, berbagai aplikasi dan pustaka klien HTTP pihak ketiga dapat mengaktifkan fungsi tersebut kapan saja.
Paket-paket hasil kompilasi ulang yang berlabel 8.5.12-1, 8.4.27-1, 8.3.36-1, serta 8.2.35-1 ini diluncurkan lima hari pasca pembaruan 21 Oktober yang sebelumnya membereskan dua kerentanan eksekusi kode jarak jauh PHP2Shell. Paket terbaru ini memakai basis kode sumber PHP yang sama sehingga tambalan sebelumnya tetap terjaga, dan kini telah menyertakan versi Brotli 1.2.1 yang sudah diperbaiki.
Pengembang PHP selalu merilis daftar komponen perangkat lunak (software bill of materials) pada setiap berkas distribusinya. Untuk rilisan x64 Non Thread Safe pekan lalu pada keempat varian tersebut, daftar komponen secara gamblang masih memuat Brotli 1.2.0, salah satu versi yang rentan.
Pihak PHP mengimbau para pengguna sistem Windows segera mengunduh dan memasang versi terbaru dari laman resmi mereka. Berhubung nomor versi inti PHP tidak berganti, perintah php -v akan memperlihatkan angka yang identik sebelum dan setelah instalasi. Identifikasi paket mutakhir dapat dilihat melalui akhiran -1 pada nama berkas, semisal php-8.5.12-1-nts-Win32-vs17-x64.zip, dan nilai hash SHA-256 pada situs pengunduhan.
Proses dekompresi otomatis berarti cURL meminta server mengirimkan respons berformat kompresi lalu mengekstraknya secara mandiri. Di skrip PHP, opsi CURLOPT_ENCODING digunakan untuk menyalakannya, di mana pemberian nilai kosong akan membuat cURL menerima seluruh format data yang didukung.
Guzzle, salah satu pustaka HTTP client populer di PHP, menerapkan nilai kosong tersebut secara baku untuk setiap transmisi via cURL, setidaknya menurut kode pada rilis 7.16.1 serta 8.3.1. Mengacu pada kode pustaka itu dan penjelasan PHP, aplikasi yang membiarkan konfigurasi bawaan Guzzle otomatis memenuhi kriteria ancaman celah pada kompilasi Windows rilis pekan kemarin. Tim The Hacker News sendiri belum melakukan uji coba teknis pada sistem berbasis Windows.
Eksploitasi nantinya akan berbentuk manipulasi payload respons terkompresi dari server target yang dikontak oleh aplikasi PHP korban.
Google memberi peringkat keparahan celah ini sebesar 9,2 dari 10 atau kategori Kritis pada standar skema CVSS 4.0. Sementara itu, pihak Red Hat menilainya pada skala 8,1 alias Penting mengacu matriks CVSS 3.1.
Peneliti keamanan dari Imperva berhasil mengeksekusi kode lewat kelemahan ini di build resmi Node.js, meski memerlukan beberapa kali percobaan. Dalam laporannya, PHP tidak menyebut adanya kasus penyerangan aktif. Penilaian CISA per 23 Oktober juga mencatat nihil eksploitasi di dunia nyata, serta belum memasukkannya ke katalog Known Exploited Vulnerabilities pada hari tersebut.
Temuan kerentanan ini awalnya diidentifikasi oleh periset dari OpenAI. Google kemudian menerbitkan perbaikan pada Brotli 1.2.1, 1.1.1, dan 1.0.10 saat kerentanan pertama kali dibeberkan ke publik tanggal 21 Oktober. Proyek Node.js, Bun, serta software lain yang mengemas pustaka Brotli mandiri turut merilis patch pembaruan.
Pemberitahuan resmi PHP tidak memberikan solusi sementara bagi sistem yang belum memungkinkan pembaruan. OpenAI menganjurkan penonaktifan dekompresi Brotli otomatis di klien HTTP sampai sistem diperbarui, sambil mengingatkan bahwa menyingkirkan br dari header Accept-Encoding semata “tidak menghentikan server mengirimkannya begitu saja.”
Dalam ranah kode PHP, menerapkan saran tersebut berarti menghindari pemakaian CURLOPT_ENCODING karena cURL tidak akan mengekstrak data tanpa instruksi tersebut. Pada pustaka Guzzle, pengguna harus mengubah pengaturan opsi decode_content menjadi false, yang berimbas mematikan pembongkaran otomatis seluruhnya sehingga data kompresi gzip juga tetap tiba dalam wujud terkompresi.