Tim pengembang PHP telah merilis ulang paket instalasi resmi Windows untuk versi PHP 8.2 hingga 8.5 guna mengatasi CVE-2026-111497. Kerentanan ini ditemukan di dalam pustaka kompresi Brotli bawaan paket tersebut. Celah keamanan ini berpotensi memberikan celah bagi penyerang untuk merusak memori sistem dan mengeksekusi instruksi kode berbahaya secara ilegal.
Pihak PHP menjelaskan bahwa celah ini dapat diakses melalui ekstensi cURL ketika fungsi tersebut mengurai respons HTTP secara otomatis. Meskipun cURL menonaktifkan fitur tersebut secara bawaan, berbagai aplikasi pihak ketiga maupun pustaka klien HTTP kerap mengaktifkannya untuk kebutuhan performa.
Paket kompilasi ulang yang mengusung penomoran 8.5.12-1, 8.4.27-1, 8.3.36-1, serta 8.2.35-1 tersebut diluncurkan hanya lima hari setelah pembaruan tanggal 21 Oktober yang membenahi dua kerentanan remote code execution PHP2Shell. Pembaruan ini tetap mempertahankan kode sumber PHP serupa sehingga perbaikan sebelumnya tidak hilang, sembari memperbarui pustaka Brotli ke versi aman 1.2.1.
PHP senantiasa menyertakan software bill of materials, yang memuat daftar perincian seluruh komponen internal, di setiap berkas paket. Daftar pada build x64 Non Thread Safe pekan lalu di keempat versi tersebut mengonfirmasi kehadiran Brotli 1.2.0, salah satu versi yang bermasalah.
Pengembang PHP mengimbau seluruh pengguna lingkungan Windows untuk segera mengunduh versi rakitan terbaru lewat portal unduhan resmi. Berhubung versi inti PHP sama sekali tidak mengalami pergantian nomor rilis, eksekusi perintah php -v bakal memunculkan angka identik. Kehadiran tanda pembeda -1 pada nama arsip berkas, semisal php-8.5.12-1-nts-Win32-vs17-x64.zip, dan nilai checksum SHA-256 pada portal menjadi penanda rilis anyar ini.
Proses dekompresi otomatis berarti cURL meminta respons terkompresi dari peladen web lalu mengekstraknya secara langsung. Pada skrip PHP, konfigurasi CURLOPT_ENCODING dipakai untuk mengaktifkan fungsi ini, dan pengisian nilai kosong berarti menerima seluruh format kompresi bawaan cURL.
Guzzle, pustaka klien HTTP populer untuk PHP, menyetel nilai kosong tersebut secara bawaan saat mengirimkan permintaan melalui cURL, seperti yang terlihat pada kode rilis 7.16.1 dan 8.3.1. Mengacu pada mekanisme tersebut serta laporan formal PHP, aplikasi yang membiarkan konfigurasi standar Guzzle memenuhi kriteria eksploitasi pada rilis Windows pekan lalu. Redaksi The Hacker News menyatakan belum menguji skenario ini di perangkat Windows nyata.
Upaya serangan siber nantinya akan dikirimkan dalam format respons kompresi khusus yang telah dimanipulasi dari peladen yang dihubungi oleh program PHP tersebut.
Google memberikan penilaian kerentanan ini pada skor 9.2 dari skala 10 atau kategori Kritis menurut metrik CVSS 4.0. Sementara itu, pihak Red Hat menetapkan tingkat keparahan pada skor 8.1 atau kategori Penting lewat metrik CVSS 3.1.
Para peneliti dari Imperva berhasil mendemonstrasikan eksekusi kode melalui celah ini pada satu kompilasi resmi Node.js setelah melewati sejumlah percobaan. Pengumuman resmi PHP sendiri tidak menyebutkan adanya insiden serangan nyata. Penilaian lembaga CISA per 23 Oktober mendokumentasikan ketiadaan aksi eksploitasi aktif, dan cacat ini belum tercantum pada katalog Known Exploited Vulnerabilities pada pembaruan tanggal tersebut.
Tim peneliti OpenAI menjadi pihak pertama yang mengidentifikasi kelemahan ini. Google kemudian merilis tambalan di Brotli versi 1.2.1, 1.1.1, serta 1.0.10 ketika celah diumumkan perdana tanggal 21 Oktober. Proyek Node.js, Bun, beserta perangkat lunak lain yang menyematkan pustaka Brotli mandiri juga telah mempublikasikan perbaikan serupa.
Catatan PHP tidak menyediakan opsi mitigasi sementara bagi server yang belum dapat memperbarui sistem. OpenAI menganjurkan penonaktifan dekompresi otomatis Brotli pada klien HTTP hingga tambalan terpasang, sembari mengingatkan bahwa menghapus parameter br dalam tajuk Accept-Encoding saja tidak menghalangi peladen untuk tetap membalas dengan kompresi tersebut.
Di ekosistem PHP, penerapan saran mitigasi tersebut berarti menghindari penggunaan konfigurasi CURLOPT_ENCODING, sebab cURL tak memproses dekompresi tanpa opsi itu. Bagi pengguna Guzzle, langkah mitigasi dilakukan dengan mengatur opsi decode_content menjadi false, yang berakibat mematikan seluruh dekode otomatis sehingga berkas berformat gzip juga diterima dalam wujud terkompresi.
