Apa yang dirilis hari ini, dan kenapa ini berbeda
PHP merilis 8.5.12, 8.4.27, 8.3.36 dan 8.2.35 pada 21 Oktober. Advisori keamanan php.net menyebut rilis ini memperbaiki dua kerentanan kritis yang memungkinkan eksekusi kode jarak jauh (RCE) tanpa autentikasi: "fix two critical vulnerabilities that can allow unauthenticated remote code execution." Pasangan bug ini dijuluki PHP2Shell, dan pengumuman awal pada 20 Oktober memberi kedua CVE skor 9.2 di CVSS v4.0.
Yang membuat kasus ini lain dari berita keamanan PHP biasanya adalah lokasi bugnya. Bukan di WordPress, bukan di paket Composer, bukan di framework. Bugnya ada di mesin yang menjalankan semua itu. Menambal plugin, meng-upgrade Laravel atau mengaudit kode sendiri sama sekali tidak membantu. Satu-satunya perbaikan adalah binary PHP yang baru, atau, kalau itu belum bisa, mencabut server dari jaringan.
Dua bug itu, dalam bahasa sederhana
Advisori tersebut menjelaskan dua celah terpisah:
- CVE-2026-109618, "RCE via OOM corruption." Kalau PHP kehabisan memori saat masih menyiapkan data request, penanganan out-of-memory memotong proses itu di tengah jalan. Kondisi setengah jadi yang tersisa bisa dimanfaatkan untuk eksekusi kode.
- CVE-2026-109619, "RCE via stale global state." State request bertahan lebih lama daripada memori di belakangnya. Setelah memori itu dibebaskan, request berikutnya yang ditangani worker yang sama masih bisa menjangkaunya.
Menurut php.net, yang terdampak adalah "all PHP installations serving web requests, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed" — artinya semua instalasi PHP yang melayani request web. Proyek PHP menilai mod_php paling berisiko karena eksploit yang sudah didemonstrasikan berjalan "before any application code runs", sebelum satu baris pun kode aplikasi dieksekusi. Routing, pengecekan autentikasi, maupun aturan WAF di dalam aplikasi Anda tidak sempat melihat request tersebut.
Tulisan Sansec menambahkan dua detail penting untuk triase. Kode yang rentan sudah ada sejak PHP 5.4.0, rilis 2012, jadi semua versi PHP yang mungkin Anda temukan di produksi ikut terdampak. Selain itu, "every known trigger is a multipart/form-data request" — semua pemicu yang diketahui berupa request multipart/form-data, encoding standar untuk kiriman form HTML dan upload file.
Sansec juga mendaftar aplikasi yang sudah dikonfirmasi Calif bisa dibobol dengan RCE tanpa autentikasi. Di antaranya Magento 2.4.9, WordPress 7.1.2, Drupal 11.4.3, Joomla 6.1.4, MediaWiki 1.46.2, Nextcloud 35.0.1, Laravel 13.11 dan Symfony 8.1. Kesimpulannya untuk toko Magento berlaku bagi semua orang: "You cannot fix PHP2Shell from within your store code." PHP2Shell tidak bisa diperbaiki dari kode aplikasi.
Sudah dieksploitasi? Sumbernya tidak sepakat
Saat artikel ini terbit, peringatan CISA menyatakan lembaga itu "not observed exploitation", belum melihat eksploitasi. Meski begitu, CISA tetap meminta organisasi menginventaris semua sistem PHP dan menambal sekarang, serta menyatakan bahwa sistem yang tidak bisa di-update, atau yang menjalankan PHP 8.1 ke bawah, sebaiknya dimatikan sampai ditambal.
Cloudflare punya cerita lain. Unggahannya menyebut detail bug bocor lebih awal dan mereka melihat lalu lintas serangan yang menyasar pelanggannya. Cloudflare juga mengaku "observed how attackers were mutating the attack payload to try to bypass our protections" — penyerang terlihat mengubah-ubah payload untuk menembus proteksinya. Cloudflare mulai menggelar aturan WAF untuk paket gratis dan berbayar pada 03:02 UTC tanggal 21 Oktober, sekitar sembilan jam sebelum pengungkapan. Menurut kronologi Sansec, Cloudflare melihat serangan pertama pada 07:43 UTC, sedangkan rilis perbaikan baru keluar pukul 14:00 UTC.
Kedua versi bisa sama-sama benar. Lembaga pemerintah yang bilang belum melihat eksploitasi sedang membuat klaim yang lebih sempit daripada "tidak ada yang mengeksploitasi". Untuk perencanaan, anggap saja lalu lintas serangan sudah sampai ke internet sebelum patch tersedia, karena salah satu jaringan edge terbesar mengatakan begitu.
Besarnya paparan pun tidak disepakati. Tenable mengutip W3Techs, yang mencatat PHP dipakai di 69,3% situs yang bahasa server-nya diketahui, plus estimasi pihak luar sebesar 1,3 juta sampai 1,9 juta host terpapar. BleepingComputer menaruh pangsa PHP di kisaran 75–80% situs web dan mengutip estimasi VirusTotal lebih dari 5,1 juta host PHP terpapar. Angka mana pun yang Anda pegang, PHP menjalankan sekitar 70% sampai 80% web, dan populasi sebesar itulah yang saat ini punya RCE di level mesin.
Tambal malam ini: urutan kerja yang praktis
1. Cari versi yang benar-benar melayani request. CLI belum tentu build yang sama dengan yang dimuat FPM atau Apache. Paket distro, beberapa versi yang terpasang bersamaan, dan container bisa membuat php -v melaporkan satu versi sementara pool web menjalankan versi lain. Cek keduanya. Binary FPM sering diberi nomor versi (misalnya php-fpm8.3), dan di Apache dengan mod_php Anda perlu melihat modul mana yang dimuat:
php -v
php-fpm8.3 -v 2>/dev/null || php-fpm -v
apachectl -M 2>/dev/null | grep -i php
Image container, panel hosting terkelola, dan apa pun yang berjalan di FrankenPHP atau LiteSpeed perlu dicek dengan cara yang sama. Baca versinya dari runtime, bukan dari Dockerfile yang Anda kira masih mutakhir.
2. Upgrade ke rilis perbaikan di cabang Anda. Artinya 8.5.12, 8.4.27, 8.3.36 atau 8.2.35. Restart pool FPM atau Apache sesudahnya. CVE-2026-109619 menyangkut state yang bertahan antar-request di satu worker, jadi worker lama yang masih hidup belum ikut tertambal hanya karena paket di disk sudah baru.
3. Kalau Anda di 8.2, waktunya memang sudah sempit. 8.2.35 memperbaiki bug hari ini, tetapi cabang itu mencapai akhir masa dukungan pada 31 Desember 2026 (lihat halaman versi yang didukung PHP). Jadwalkan lompatan ke 8.3 atau lebih baru sekarang, mumpung Anda sudah berada di jendela perubahan.
4. Kalau Anda di 8.1, 8.0 atau 7.4, tenggatnya keras. Tidak akan ada rilis resmi untuk cabang-cabang ini. Tim PHP sudah menerbitkan backport sumber minimal untuk 7.4, 8.0 dan 8.1. Pilihan realistisnya tinggal tiga: build PHP sendiri dengan backport itu, ambil build bertambal dari vendor yang menawarkan dukungan jangka panjang, atau ikuti CISA dan matikan sistemnya sampai di-upgrade. "Nanti kita kerjakan sprint depan" tidak termasuk pilihan.
5. Terapkan pengaturan sementara, tapi jangan anggap itu perbaikan. Untuk sistem yang belum bisa ditambal hari ini, php.net mendaftar pengaturan yang mengurangi paparan. Contohnya memory_limit=-1 yang diset lewat php_admin_value, post_max_size yang rendah, session.upload_progress.enabled=0, dan di 8.5, fatal_error_backtraces=0. Advisori itu terang-terangan menyebut pengaturan ini mempersempit permukaan serangan tanpa menutupnya. Tenable mengutip release manager Joe Ferguson dengan lebih lugas: "ini settings won't save you." Pakai untuk membeli beberapa jam, bukan beberapa minggu.
6. Pasang filter di depan selama Anda bekerja. Semua pemicu yang diketahui berupa request multipart/form-data, dan Cloudflare sudah merilis aturan WAF di paket gratis maupun berbayar. Filter di edge layak dipasang, tetapi unggahan Cloudflare sendiri menggambarkan penyerang yang memodifikasi payload untuk mengakali aturannya. Anggap WAF sebagai penunda, bukan pengganti patch.
Sisi AI-nya, tanpa hype
Menurut Cloudflare, kredit riset jatuh ke Calif.io, Wiz, OpenAI dan Quarkslab. Kronologinya menunjukkan beberapa tim terpisah tiba di kode mesin yang sama, kode yang berumur sejak 2012. Sansec menyebut Calif menemukan beberapa jalur RCE pada 1 Agustus dan melaporkan bug pertama pada 11 Agustus. Wiz Research mengatakan menemukan bug pertamanya pada 19 Agustus dan melaporkannya pada 24 Agustus.
Wiz terbuka soal cara kerjanya: "We used Wiz Atlas, Gemini 4 Argon and GPT-5.6 Sol throughout this research." Wiz juga mengklaim "a single researcher completed in a week what previously would have taken a world-class team months of work" — satu peneliti menyelesaikan dalam seminggu pekerjaan yang dulu butuh berbulan-bulan bagi tim kelas dunia.
Silakan potong klaim itu sebanyak yang Anda mau; poin praktisnya tetap berlaku. Bug di kode mesin yang tua kini ditemukan lebih cepat dari dulu, dan kemungkinan besar oleh lebih dari satu tim sekaligus. Lalu embargonya bocor. Tanggal pengungkapan yang direncanakan adalah 22 Oktober, detailnya keluar pada 20 Oktober, dan menurut kronologi Sansec lalu lintas serangan datang beberapa jam sebelum rilis perbaikan. Asumsi nyaman bahwa ada jeda berhari-hari, atau seminggu, antara advisori dan eksploitasi tidak terbukti kali ini, dan tidak banyak alasan untuk berharap asumsi itu berlaku lain kali.
Yang perlu diubah setelah malam ini
Begitu apinya padam, perbaiki proses yang membuat malam ini terasa berat:
- Simpan inventaris runtime PHP yang selalu mutakhir, termasuk versi yang benar-benar dijalankan tiap pool FPM, modul Apache dan container, bukan cuma versi yang dilaporkan CLI. Instruksi pertama CISA adalah menginventaris semua sistem PHP. Kalau hari ini itu makan waktu berjam-jam, otomatiskan.
- Jadikan restart runtime operasi rutin. Kalau upgrade PHP dan mendaur ulang worker di seluruh armada server butuh tiket dan jendela maintenance, prosesnya akan terlalu lambat untuk bug level mesin berikutnya.
- Pensiunkan cabang yang sudah habis masa dukungannya sesuai jadwal, bukan di tengah insiden. Siapa pun yang masih di 7.4, 8.0 atau 8.1 malam ini harus memilih antara build dari backport atau mematikan server. Rencanakan untuk sudah lepas dari 8.2 sebelum 31 Desember.
- Siapkan opsi filter di edge agar bisa dinyalakan dalam hitungan menit, dan ingat bahwa itu hanya membeli waktu, tidak lebih.
Mesin PHP dipakai bersama oleh semua aplikasi PHP yang Anda jalankan, jadi ritme patch-nya adalah ritme patch Anda juga. Rilis hari ini adalah perbaikannya. Pasang malam ini.




Komentar (0)
Belum ada komentar. Mulai percakapannya.