PHP Luncurkan Pembaruan Keamanan Windows Kedua dalam Lima Hari Tangani Celah Brotli

Tim pengembang PHP telah merilis ulang paket instalasi resmi Windows untuk versi PHP 8.2 hingga 8.5 guna mengatasi kerentanan CVE-2026-111497. Celah keamanan ini bersumber dari pustaka kompresi Brotli yang disertakan di dalam paket rilis tersebut. Celah tersebut berpotensi memungkinkan penyerang merusak memori sistem dan secara teoretis mengeksekusi kode berbahaya.

Pihak PHP menjelaskan bahwa eksploitasi dapat terjadi melalui ekstensi cURL ketika ekstensi tersebut menguraikan respons HTTP terkompresi secara otomatis. Secara bawaan, cURL sebenarnya menonaktifkan fitur otomatis tersebut. Namun, berbagai aplikasi serta pustaka klien HTTP sering kali mengaktifkannya demi efisiensi pertukaran data jaringan.

Paket-paket yang diperbarui tersebut mengusung penomoran versi 8.5.12-1, 8.4.27-1, 8.3.36-1, serta 8.2.35-1. Rilis darurat ini hadir hanya berselang lima hari usai rilis tanggal 21 Oktober yang sebelumnya menambal dua kerentanan eksekusi kode jarak jauh PHP2Shell. Karena memanfaatkan basis kode sumber PHP yang persis sama, seluruh perbaikan terdahulu tetap dipertahankan, sementara pustaka Brotli kini telah ditingkatkan ke versi 1.2.1 yang sudah aman.

PHP senantiasa menyertakan Software Bill of Materials (SBOM) berisi daftar komponen terpadu pada setiap paket distribusinya. Pada rilis x64 Non Thread Safe pekan lalu untuk keempat versi tersebut, dokumen daftar komponen menunjukkan keberadaan Brotli 1.2.0, yang merupakan salah satu versi terdampak masalah kritis ini.

Pengguna lingkungan Windows sangat disarankan mengunduh paket mutakhir ini langsung dari halaman resmi unduhan PHP. Mengingat nomor versi inti PHP tidak berganti, perintah pengecekan php -v akan tetap memperlihatkan angka yang identik sebelum dan sesudah instalasi. Tanda pengenal paket baru terletak pada akhiran -1 di nama berkas, semisal php-8.5.12-1-nts-Win32-vs17-x64.zip, beserta kecocokan nilai hash SHA-256 di laman unduh.

Fitur dekompresi otomatis bekerja saat cURL meminta kiriman terkompresi dari peladen lalu mengekstraknya seketika. Dalam sintaksis pemrograman PHP, opsi CURLOPT_ENCODING dipakai untuk mengaktifkan mekanisme ini, di mana nilai kosong berarti menyetujui seluruh format kompresi yang dapat ditangani oleh cURL.

Guzzle, salah satu pustaka klien HTTP terpopuler di ekosistem PHP, mengonfigurasi nilai kosong tersebut secara otomatis untuk seluruh permintaan yang dilewatkan melalui cURL, seperti tampak pada rilis 7.16.1 dan 8.3.1. Mengacu pada kode tersebut serta keterangan resmi PHP, aplikasi yang membiarkan setelan baku Guzzle secara langsung memenuhi syarat keterpaparan terhadap eksploitasi pada kompilasi Windows pekan lalu. Redaksi The Hacker News sendiri belum melakukan uji coba teknis langsung pada lingkungan Windows.

Skenario penyerangan dapat dilancarkan melalui pengiriman payload respons terkompresi khusus dari peladen luar yang sedang dihubungi oleh aplikasi PHP korban.

Terkait tingkat bahayanya, Google menetapkan skor keparahan celah ini sebesar 9,2 dari 10 atau kategori Kritis pada skala CVSS 4.0. Sementara itu, Red Hat menyematkan skor 8,1 dengan klasifikasi Penting menurut penghitungan skala CVSS 3.1.

Sejumlah peneliti dari Imperva berhasil membuktikan eksekusi kode melalui kerentanan ini pada build resmi Node.js, meski memerlukan beberapa kali percobaan hingga berhasil. Pemberitahuan resmi PHP tidak melaporkan adanya insiden serangan nyata. Penilaian CISA per 23 Oktober juga mencatat belum ada eksploitasi aktif, sehingga belum masuk ke katalog Kerentanan yang Dieksploitasi (KEV).

Temuan kerentanan berisiko ini awalnya diidentifikasi oleh periset dari OpenAI. Pihak Google kemudian menambalnya pada paket Brotli 1.2.1, 1.1.1, serta 1.0.10 ketika diumumkan perdana tanggal 21 Oktober. Proyek lain seperti Node.js, Bun, dan perangkat lunak yang mengemas pustaka Brotli mandiri turut merilis tambalan serupa.

Catatan PHP tidak menyertakan langkah mitigasi alternatif bagi sistem yang belum dapat diperbarui. OpenAI menyarankan penonaktifan fungsi dekompresi otomatis Brotli pada klien HTTP sampai sistem ditambal, seraya mengingatkan bahwa sekadar menghapus nilai br dari header Accept-Encoding tidak serta-merta mencegah peladen mengirimkan format tersebut.

Penerapan anjuran tersebut pada kode PHP dilakukan dengan tidak menetapkan CURLOPT_ENCODING, sebab cURL tidak menguraikan respons tanpa opsi itu. Pada Guzzle, pengguna dapat menyetel opsi permintaan decode_content ke status false, yang menonaktifkan seluruh dekode otomatis sehingga respons gzip juga diterima mentah.