Celah ditemukan awal Agustus 2026; detail dan PoC bocor sehari sebelum rilis, sehingga PHP memajukan rilis perbaikan ke 21 Oktober. Waktu dalam UTC.
| Tanggal | Kejadian |
|---|---|
| 22 Okt 2026 | Sansec menilai eksploitasi massal lebih kecil dari dugaan awal: PoC publik tidak jalan di instalasi PHP default. Searchlight Cyber merilis scanner open source. (Help Net Security, Sansec) |
| 21 Okt 2026, 14:00 | PHP merilis 8.2.35, 8.3.36, 8.4.27, 8.5.12 beserta dua advisory. (Datadog) |
| 21 Okt 2026, 07:43 | Cloudflare mencatat serangan awal dan memasang aturan WAF untuk semua pelanggan. (Sansec, Help Net Security) |
| 20 Okt 2026 | Embargo bocor; watchTowr mengonfirmasi bisa mereproduksi CVE-2026-109618. PHP mengumumkan rilis darurat untuk esok hari. (watchTowr, TuxCare) |
| 17 Okt 2026 | Honeypot Amazon MadPot mencatat percobaan eksploitasi, empat hari sebelum pengumuman. (Datadog) |
| 25 Sep 2026 | Pull request perbaikan dibuka di PHP. (ELLIO) |
| 24 Agu 2026 | Wiz Research melaporkan celah ke PHP. (Sansec) |
| 11 Agu 2026 | Calif melaporkan bug pertama ke PHP; disclosure terkoordinasi dimulai. (Sansec) |
Peran AI. Penemu yang disebut: Ryan Austin (Calif), tim Wiz Research, dan OpenAI (Sansec). Wiz menyatakan model AI mutakhir “secara substansial menurunkan hambatan” untuk mengubah bug lama ini menjadi eksploit (Help Net Security). Rincian cara AI dipakai belum dipublikasikan.
Penyebab teknis
Keduanya adalah bug manajemen memori di inti PHP yang muncul saat sebuah request gagal di tengah jalan (fatal error atau kehabisan memori), sebelum kode aplikasi sempat berjalan. Bagian ini sengaja tidak memuat rincian eksploit.
CVE-2026-109618: data setengah jadi setelah kehabisan memori
Terjadi saat PHP mengurai data form ($_POST, termasuk multipart) di awal request (Datadog).
- Saat menambah entri ke hash table, PHP menaikkan penghitung entri sebelum mengalokasikan memori untuk kuncinya.
- Penyerang mengirim data form yang membuat alokasi itu menembus
memory_limit. - PHP menghentikan request dengan fatal error (lewat
longjmp), sehingga entri tadi tercatat ada tetapi isinya belum terisi. - Saat request dibersihkan, PHP memproses entri setengah jadi itu seolah-olah valid. Sisa byte di memori bisa dibentuk penyerang sehingga proses pembersihan memanggil fungsi pilihan penyerang, misalnya menjalankan perintah sistem sebagai user web.
Perbaikannya mengubah penanganan error agar alokasi yang gagal tidak meninggalkan entri setengah jadi (Datadog).
CVE-2026-109619: state global basi (use-after-free antar-request)
Request yang mati di tengah jalan bisa meninggalkan state di level worker yang masih menunjuk ke memori milik request itu, padahal memorinya sudah dibebaskan. Request berikutnya di worker yang sama membaca state itu sebelum diinisialisasi ulang (Datadog).
- Jalur yang dikonfirmasi: pemrosesan upload, termasuk fitur session upload progress yang aktif secara default dan berjalan bahkan tanpa
session_start()(watchTowr). - Jalur lain: state backtrace dari fatal error (khusus PHP 8.5).
- Penyerang perlu mengenai worker yang sama berulang kali, jadi pool worker yang besar menurunkan peluang berhasil per percobaan.
Catatan: sumber berbeda soal pembagian CVE
Sebagian besar sumber (Datadog, ELLIO, watchTowr, TuxCare) memetakan kehabisan memori ke 109618 dan session upload progress ke 109619. Sansec membaliknya dan juga menyebut type confusion di OPcache. ELLIO mencatat bahwa liputan awal keliru menempatkan jalur session di 109618 (ELLIO). Dokumen ini mengikuti pemetaan mayoritas; tindakan perbaikannya sama.
Siapa yang terdampak
Semua server yang menjalankan PHP versi di bawah rilis perbaikan dan menerima request POST dari internet dianggap terdampak; konfigurasi default sudah mengandung bug ini (Datadog).
| Cabang PHP | Terdampak | Versi aman |
|---|---|---|
| 8.5 | sebelum 8.5.12 | 8.5.12 |
| 8.4 | sebelum 8.4.27 | 8.4.27 |
| 8.3 | sebelum 8.3.36 | 8.3.36 |
| 8.2 | sebelum 8.2.35 | 8.2.35 |
| 7.4, 8.0, 8.1 (EOL) | semua | backport dari PHP security team, paket distro, atau dukungan berbayar |
| 7.3 ke bawah | semua | tidak ada patch resmi; migrasi atau dukungan berbayar (mis. TuxCare ELS) |
Sumber tabel: Datadog, watchTowr, Sansec.
Jenis server. Apache mod_php paling berisiko dan sudah dibuktikan bisa dieksploitasi dengan pengaturan default. PHP-FPM tetap terdampak, terutama lewat 109619; FPM mematikan child saat startup request gagal sehingga jalur 109618 paling mudah terhalang, tetapi PHP tetap menganggapnya rentan. php-cgi, FrankenPHP dan LiteSpeed juga disebut (TuxCare, Help Net Security).
Status eksploitasi masih diperdebatkan.
- watchTowr, Datadog dan ELLIO melaporkan upaya eksploitasi nyata sejak 21 Oktober. ELLIO mencatat 743 request dari 33 alamat IP pada hari pertama, sebagian mengirim malware varian Mirai (ELLIO).
- Sansec (update 22 Oktober) menilai PoC publik tidak berhasil di instalasi PHP default dan sebagian butuh bug tambahan di aplikasi (Sansec).
- Per 22 Oktober belum ada laporan publik tentang server yang terkonfirmasi berhasil dibobol (ELLIO). NCSC Inggris tetap menyarankan mematikan sistem yang belum bisa di-patch (Help Net Security).
Cara cek server Anda
Cek versi PHP yang dipakai web server, bukan hanya versi CLI, lalu pastikan prosesnya sudah di-restart setelah update.
- Versi PHP CLI dan paket terpasang (Debian/Ubuntu):
php -v
dpkg -l | grep -E 'php[0-9.]+-(fpm|common)'
- Versi yang dipakai web: buat sementara file berisi
<?php echo PHP_VERSION;di web root, buka di browser, lalu hapus lagi. Atau lihat versi di panel hosting. - Paket distro sering menambal tanpa mengubah nomor versi utama, jadi cek changelog paketnya (Sansec, TuxCare):
# Debian/Ubuntu (sesuaikan versi)
zgrep CVE-2026-109618 /usr/share/doc/php8.4-common/changelog.Debian.gz
# RHEL/Alma/Rocky
rpm -q --changelog php-common | grep CVE-2026-109618
- Pastikan master PHP-FPM dijalankan setelah update terpasang (TuxCare):
ps -eo pid,lstart,args | grep '[p]hp-fpm: master'
Paket lama tetap jalan di memori sampai proses di-restart, walaupun paket baru sudah terpasang.
Mitigasi
Update PHP lalu restart semua worker; langkah lain hanya mengurangi risiko sementara (Datadog, Sansec).
1. Update PHP (perbaikan utama)
| Platform | Cara |
|---|---|
Ubuntu/Debian dengan PPA Ondřej (ppa:ondrej/php, deb.sury.org) |
sudo apt update && sudo apt install --only-upgrade 'php8.4*' (sesuaikan cabang), lalu restart FPM |
| Ubuntu 22.04 (PHP 8.1 bawaan) | update keamanan Ubuntu biasa |
| Ubuntu 14.04–20.04, Debian 9–11 | Ubuntu Pro Legacy atau Freexian ELTS (berbayar) |
| RHEL/Alma/Rocky/Fedora | paket vendor (Red Hat RHSB-2026-013) atau repository Remi |
| cPanel, Plesk, DirectAdmin | update PHP lewat panel, cek changelog-nya |
Docker image resmi php |
tarik tag terbaru lalu build ulang dan ganti container; 8.1 ke bawah tidak dapat perbaikan |
2. Restart semua proses PHP
PHP-FPM dan mod_php tetap memakai kode lama di memori sampai di-restart (TuxCare):
sudo systemctl restart php8.4-fpm # sesuaikan versi
sudo systemctl restart apache2 # bila memakai mod_php
3. Mitigasi sementara bila belum bisa update
Semua langkah ini parsial. watchTowr bahkan menilai mitigasi lewat php.ini tidak efektif (watchTowr), jadi jangan dijadikan pengganti patch.
- Matikan session upload progress:
session.upload_progress.enabled = 0. Menutup jalur session 109619 saja, tidak berpengaruh ke 109618. - Aktifkan
session.use_strict_mode = 1. - Blokir
multipart/form-datadi web server untuk aplikasi yang tidak menerima upload. Hati-hati: ini mematikan upload dan sebagian form checkout (Sansec). - Batasi ukuran body, jumlah part, dan header per part di reverse proxy bila upload tetap dibutuhkan (ELLIO).
- WAF: Cloudflare sudah memasang aturan untuk vektor yang diketahui bagi semua pelanggan, termasuk paket gratis (Help Net Security).
- Isolasi atau matikan sementara sistem yang tidak bisa di-patch, sesuai saran CERT-EU dan NCSC Inggris.
Datadog menyebut memory_limit = -1 memutus jalur 109618 yang diketahui, tetapi Sansec mengingatkan satu request bisa menghabiskan seluruh RAM server. Pakai hanya bila ada batas memori di level container atau cgroup.
4. Deteksi
- Tanda terkuat: proses PHP (php-fpm, apache) menjalankan
sh,bash,curl,wget, Python atau Perl (Datadog, TuxCare). - Log PHP:
Allowed memory size ... exhausted ... in Unknown on line 0berarti request gagal saat inisialisasi, sebelum skrip apa pun berjalan. - Log Apache: worker mati dengan
Segmentation fault (11)berulang kali. - Request: User-Agent
php2shell-scan/109618,php2shell-109618,php2shell-verify/1.0; boundary multipart berawalan----p2s; POST multipart dengan ratusan field file kosong atau nama field bersarang sangat dalam (ELLIO). - Payload yang terlihat: malware varian Mirai yang diunduh ke
/tmp; ELLIO menyarankan memblokir C2134.199.154.64dan membatasi DNS keluar (port 53) hanya ke resolver sendiri (ELLIO).
Log akses default tidak mencatat isi POST, jadi log yang tampak bersih belum berarti aman (TuxCare).
5. Bila curiga sudah dibobol
- Isolasi server; simpan log PHP dan web server, snapshot konfigurasi, dan file mencurigakan sebelum mengubah apa pun.
- Cari web shell dan file baru di web root, cron job baru, dan akun baru.
- Patch saja tidak mengusir penyusup yang sudah masuk. Ganti kredensial (database,
.env, API key) dan pertimbangkan membangun ulang server dari sumber bersih.
Studi kasus: server produksi penulis
Server produksi penulis sempat terdampak (PHP 8.4.26), tetapi tidak ditemukan tanda eksploitasi, dan sudah ditambal pada 22 Oktober 2026 pukul 01:05 UTC, dua hari setelah rilis perbaikan. Server ini menjalankan Ubuntu 24.04 dengan web server Caddy di depan PHP-FPM (aplikasi Laravel); mod_php tidak dipakai.
Status sebelum dan sesudah
| Pemeriksaan | Sebelum | Sesudah |
|---|---|---|
| Versi PHP-FPM | 8.4.26 (rentan) | 8.4.27 (aman) |
| CVE-2026-109618/109619 di changelog paket | tidak ada | tercatat |
| Master PHP-FPM dijalankan | 21 Okt 2026, sebelum patch | 23 Okt 2026, sesudah patch |
session.upload_progress.enabled |
On (default) | Off |
session.use_strict_mode |
Off | On |
| Web, panel admin, API game | normal | normal |
Pemeriksaan tanda pembobolan
Semua dicek untuk periode sejak 17 Oktober 2026, tanggal upaya eksploitasi pertama yang tercatat. Hasilnya bersih:
- Log akses web: 0 request dengan User-Agent
php2shell, boundary----p2s, atau penanda PoC. - Alamat C2 dan server unduhan malware yang dilaporkan peneliti: 0 kemunculan di log akses dan syslog, tidak ada koneksi aktif.
- Log PHP: 0 fatal error kehabisan memori saat inisialisasi (
Unknown on line 0) dan 0 crash worker (segfault). - Proses: tidak ada proses anak PHP-FPM selain PHP sendiri, dan user web tidak menjalankan proses lain.
- File: tidak ada file PHP baru di web root dan tidak ada file asing di repository aplikasi. Satu file yang tanggal ubahnya baru, isinya identik dengan versi di git (berasal dari deploy rutin).
- Persistence: user web tidak punya crontab, dan tidak ada file mencurigakan miliknya di
/tmp.
Langkah yang penulis ambil
- Mencadangkan konfigurasi PHP-FPM sebelum mengubah apa pun.
- Memperbarui semua paket
php8.4-*ke 8.4.27 dari PPA Ondřej, dengan file konfigurasi lama dipertahankan. - Menambahkan file konfigurasi terpisah untuk PHP-FPM yang mematikan session upload progress dan menyalakan strict session mode. Aplikasi memakai sistem session sendiri, jadi fitur bawaan ini tidak dibutuhkan.
- Menguji konfigurasi, lalu me-restart PHP-FPM. Gangguan layanan hanya sekitar 1–2 detik.
- Memastikan proses baru berjalan dengan versi aman, lalu mengecek web, panel admin, dan API game.
Faktor yang sudah membantu sebelumnya: PHP berjalan sebagai user web tanpa hak root, dan mod_php, jalur yang paling mudah dieksploitasi, tidak dipakai. Sebaliknya, jumlah worker PHP-FPM kecil (5), dan pool kecil memudahkan penyerang mengenai worker yang sama, sehingga patch tetap wajib.
Segera perbarui PHP ke 8.2.35, 8.3.36, 8.4.27 atau 8.5.12, lalu restart semua proses PHP. PHP2Shell adalah dua celah kritis di inti PHP (CVSS v4.0 9.2) yang bisa berujung pada eksekusi kode jarak jauh (RCE) tanpa login, cukup lewat request HTTP POST ke skrip PHP apa pun.
- CVE-2026-109618: kehabisan memori (
memory_limit) saat PHP mengurai data form meninggalkan data setengah jadi yang kemudian dipakai saat request dibersihkan. - CVE-2026-109619: request yang gagal di tengah jalan meninggalkan pointer ke memori yang sudah dibebaskan (use-after-free), lalu dibaca request berikutnya di worker yang sama.
- Celah ini ada sejak lama (menurut Sansec sejak PHP 5.4, 2012) dan diperbaiki dalam rilis darurat 21 Oktober 2026.
- Upaya eksploitasi sudah terlihat di internet sejak hari rilis. Tingkat keberhasilannya masih diperdebatkan, tapi semua sumber sepakat: patch adalah satu-satunya perbaikan tuntas.
Sumber
Semua halaman di bawah dibaca pada 23 Oktober 2026. Advisory resmi PHP: GHSA-w8hw-w9fx-j79w (CVE-2026-109618) dan GHSA-6wmf-4rv5-p3rp (CVE-2026-109619).


