PHP2Shell Dua Kerentanan Kritis di Interpreter PHP Itu Sendiri

PHP2Shell (CVE-2026-109618 & CVE-2026-109619) — Dua Kerentanan Kritis di Interpreter PHP Itu Sendiri

CVE-2026-109618 & CVE-2026-109619 · CVSS v4.0: 9.2 (Critical) · Patched: PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (21 Oktober 2026). Bocor ke publik satu hari sebelum jadwal rilis resmi, memaksa tim keamanan PHP mempercepat patch. Percobaan eksploitasi sudah terdeteksi beberapa jam sebelum patch resmi dirilis. Berbeda dari kerentanan WordPress “2Shell” sebelumnya — ini bug di interpreter PHP sendiri, bukan di framework atau CMS manapun.

Mayoritas insiden keamanan PHP selama ini berasal dari aplikasi di atasnya — plugin WordPress, ekstensi Magento, paket Laravel yang tidak terawat. Pembaruan dilakukan, beberapa secret dirotasi, selesai. PHP2Shell berbeda. Kerentanan ini berada di interpreter PHP itu sendiri — artinya perangkat lunak yang terdampak secara praktis adalah “apa pun yang menjalankan PHP,” dan perbaikan resmi hanya tersedia untuk empat cabang versi yang masih mendapat dukungan aktif.

🔴 Lakukan sekarang:
• Update ke PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 sesuai branch yang digunakan
• Restart setiap PHP worker setelah update — proses lama tetap menjalankan kode rentan sampai benar-benar dihentikan
• PHP 8.1 ke bawah (termasuk 7.x dan 5.x) tidak mendapat patch resmi — migrasi atau gunakan backport dari penyedia ELS (Endless Lifecycle Support)
• Cari seluruh instalasi PHP yang dimiliki — termasuk yang tertanam di vendor appliance, control panel, atau software yang membawa php-cgi.exe sendiri

1. Overview — CVE di Satu Pandang

[PHP2SHELL — QUICK FACTS]

CVE ID: CVE-2026-109618 dan CVE-2026-109619 (dua bug terpisah, satu nama kolektif)

Nama: PHP2Shell

CVSS Score: 9.2 (Critical) v4.0 — untuk kedua CVE

Tipe: Unauthenticated Remote Code Execution di level interpreter

Target: PHP core — bukan framework, bukan CMS, bukan plugin

Versi terdampak: Mencakup semua branch yang didukung (8.2–8.5). Tools eksploitasi yang bocor mengklaim mendukung PHP 5.4.0 ke atas

Versi aman: 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35

Discovered: Dilaporkan melalui proses bocor (leak) sebelum disclosure resmi

Advance notice: 20 Oktober 2026, 19:33 UTC (php.announce)

Patch released: 21 Oktober 2026 — dipercepat satu hari dari jadwal semula

Exploitation in the wild: Percobaan serangan terdeteksi Cloudflare pukul 07:43 UTC, beberapa jam sebelum patch resmi dirilis

CVE Nama Resmi Root Cause Dikonfirmasi RCE Terhadap
CVE-2026-109618 RCE via OOM Corruption Penanganan out-of-memory yang tidak sempurna mod_php (penuh), PHP-FPM (rentan, belum ada exploit lengkap)
CVE-2026-109619 RCE via Stale Global State Use-after-free lintas request pada persistent worker mod_php (penuh), PHP-FPM via session path (tervalidasi)
💡 Beda dengan seri “2Shell” WordPress: PHP2Shell sering disalahartikan sebagai bagian dari seri Comment2Shell, XSS2Shell, atau wp2shell yang dibahas sebelumnya di blog ini. Padahal PHP2Shell sama sekali berbeda — bug ini ada di interpreter PHP sendiri, memengaruhi setiap aplikasi yang berjalan di atasnya, bukan satu CMS tertentu. Skala dampaknya jauh lebih luas.

2. Root Cause — Dua Jalur Berbeda ke Memory Corruption

Kedua CVE adalah bug yang terpisah, tetapi keduanya bermuara pada masalah yang sama: PHP gagal menjaga konsistensi state internal ketika terjadi kondisi kegagalan yang tidak terduga.

[CVE-2026-109618 — RCE VIA OOM CORRUPTION]

Mekanisme: PHP menggunakan longjmp() untuk membatalkan sebuah request ketika terjadi kegagalan out-of-memory. Jika alokasi memori gagal saat data request masih dalam kondisi setengah terinisialisasi, kode shutdown yang berjalan setelahnya akan membaca atau mengambil keputusan berdasarkan state yang rusak tersebut.

Cara memicu: Multipart parsing memberikan beberapa jalur untuk memicu kondisi OOM tanpa harus melanggar limit yang terlihat jelas — contohnya bagian (part) dengan jumlah header yang tidak dibatasi.

Di mod_php: Seluruh proses ini terjadi di fase awal request — sebelum kode aplikasi apa pun sempat dijalankan.

[CVE-2026-109619 — RCE VIA STALE GLOBAL STATE]

Mekanisme: Use-after-free yang membentang antar-request. Sebuah fatal error (termasuk OOM) dapat meninggalkan persistent worker dengan pointer yang mengarah ke memori milik request yang sudah selesai. Request berikutnya di worker yang sama menyentuh state basi tersebut sebelum proses inisialisasi normal mereset-nya.

Jalur yang terkonfirmasi: Fitur session.upload_progress — diperkenalkan sejak PHP 5.4, aktif secara default, dan menurut PHP sendiri jarang digunakan. Fitur ini mengakses session handling sebelum inisialisasi normal berjalan, bahkan tanpa pemanggilan session_start().

Kenapa lebih rumit dieksekusi: Butuh kondisi timing yang lebih presisi dibanding CVE-2026-109618, tetapi PHP tetap mengonfirmasi RCE penuh terhadap mod_php dan jalur session terhadap PHP-FPM.

Deployment mode Tingkat Keterpaparan Catatan
mod_php (Apache) Paling rentan RCE penuh terkonfirmasi untuk kedua CVE
PHP-FPM Rentan FPM mematikan child process saat request startup gagal — menghambat jalur OOM yang paling bersih, tapi PHP tetap menilai susceptible. Jalur session (CVE-2026-109619) tervalidasi penuh.
FrankenPHP Kemungkinan rentan Dinilai PHP kemungkinan rentan terhadap serangan OOM yang independen dari aplikasi, mirip mod_php
LSAPI (LiteSpeed) Serupa FPM Perilaku mendekati PHP-FPM dalam konteks ini
💡 Kenapa petunjuk “PHP 5.4” penting: Banner yang beredar dalam materi bocoran mengklaim dukungan mulai PHP 5.4.0 — ternyata ini petunjuk yang akurat. PHP 5.4 adalah versi yang memperkenalkan fitur session.upload_progress, komponen kunci di jalur eksploitasi CVE-2026-109619.

3. Timeline — Bagaimana Kebocoran Mengubah Jadwal Disclosure

PHP2Shell punya cerita disclosure yang tidak biasa: bocor ke publik sehari sebelum jadwal resmi, memaksa tim keamanan PHP mempercepat rilis patch di tengah tekanan waktu.

[TIMELINE — LEAK TO PATCH]

20 Oktober 2026 (pagi): Sebuah posting di Hacker News mengklaim dua kerentanan RCE PHP dengan rating 10.0, berlaku sejak PHP 5, akan diungkap 22 Oktober. Tidak ada bukti selain klaim sepihak. Posting dihapus, tapi screenshot sudah menyebar.

20 Oktober 2026: watchTowr mengonfirmasi informasi yang bocor adalah nyata dan masih dalam status embargo.

20 Oktober 2026, 19:33 UTC: Tim keamanan PHP mengirim advance notice resmi melalui php.announce — mengonfirmasi dua kerentanan kritis, rating CVSS v4.0 9.2, rilis dijadwalkan keesokan harinya.

21 Oktober 2026, 07:43 UTC: CTO Cloudflare melaporkan percobaan serangan awal terhadap situs PHP — beberapa jam sebelum patch resmi dirilis. Cloudflare langsung mengaktifkan WAF rule darurat untuk semua plan, termasuk tier gratis.

21 Oktober 2026: PHP merilis 8.5.12, 8.4.27, 8.3.36, dan 8.2.35 bersama advisory resmi untuk kedua CVE.

⚠️ Rating 10.0 yang beredar tidak akurat: Angka CVSS 10.0 yang sempat viral dalam materi bocoran bukan rating resmi dari PHP. Rating resmi yang dipublikasikan dalam advisory adalah 9.2 (CVSS v4.0) untuk kedua CVE — tetap kategori Critical, tapi penting untuk mengacu pada sumber resmi saat terjadi kebocoran informasi.

4. Masalah End-of-Life — Mengapa Ini Lebih Besar dari Satu Patch

PHP hanya merilis patch resmi untuk empat branch yang masih didukung aktif (8.2–8.5). Branch di bawahnya — termasuk PHP 7.x dan 5.x yang masih sangat luas digunakan — tidak mendapat apa pun dari php.net.

Branch PHP Status Upstream Sumber Patch
8.5 Active support s/d 31 Des 2027 PHP 8.5.12 (upstream)
8.4 Active support s/d 31 Des 2026 PHP 8.4.27 (upstream)
8.3 Security fixes only s/d 31 Des 2027 PHP 8.3.36 (upstream)
8.2 Security fixes only s/d 31 Des 2026 PHP 8.2.35 — patch terakhir untuk branch ini
8.1 & 8.0 End of life Tidak ada dari upstream — perlu ELS atau backport distro
7.0–7.4 End of life Tidak ada dari upstream — perlu ELS atau backport distro
5.x End of life Tidak ada dari upstream — tools eksploitasi bocoran mengklaim dukungan dari 5.4.0

Data exposure analysis mencatat sekitar 884.000 host internet-facing yang HTTP banner-nya melaporkan PHP 8.1 atau lebih lama per 20 Oktober 2026 — sekitar 59% dari seluruh host yang melaporkan versi sama sekali. Banner tidak selalu mencerminkan keterpaparan pasti (beberapa menjalankan paket backport), tetapi angka ini tetap menunjukkan skala masalah yang sangat besar.

💡 Yang sering terlewat saat audit: Instalasi PHP yang paling berbahaya adalah yang tidak disadari sebagai “server PHP” — vendor appliance, software Windows yang membawa php-cgi.exe sendiri, control panel hosting, atau wiki internal yang dibuat bertahun-tahun lalu dan tidak pernah disentuh lagi. Audit menyeluruh harus mencakup semua ini, bukan hanya aplikasi web utama.

5. Mitigasi — Langkah Patch dan Verifikasi

  • 1. Inventarisasi seluruh instalasi PHP
    Daftar biasanya lebih panjang dari yang diperkirakan. Cek lokasi standar, build ELS di bawah /opt/alt/, dan jangan lupa vendor bundle serta control panel.
  • 2. Update ke versi patch sesuai branch
    Branch yang masih didukung mendapat update dari upstream atau distro. Branch EOL perlu backport dari penyedia ELS (seperti TuxCare) atau benar-benar dilepaskan dari akses publik.
  • 3. Restart atau ganti setiap PHP worker — langkah yang sering terlewat
    Menginstal paket yang sudah dipatch saja tidak cukup selama worker masih berjalan dengan kode lama. PHP-FPM master yang sudah jalan, atau mod_php yang dimuat di Apache, tetap menyimpan kode lama di memori sampai benar-benar di-restart. Pada shared hosting dengan puluhan FPM pool, ini adalah kasus klasik di mana satu versi di-restart dan yang lain terlewat.
  • 4. Jangan percaya scanner yang hanya baca version string
    Paket backport ELS atau distro bisa saja tetap melaporkan nomor versi upstream aslinya. Scanner yang hanya membandingkan version string bisa salah menandai host yang sebenarnya sudah dipatch.
  • 5. Mitigasi sementara jika belum bisa patch segera
    Bukan solusi permanen, tetapi bisa mengurangi risiko sambil menunggu jendela maintenance:

    session.upload_progress.enabled = 0
    session.use_strict_mode = 1

    Untuk FPM pool, override dengan php_admin_flag dan restart pool tersebut. Ingat: ini menutup jalur session yang terkonfirmasi, bukan seluruh jalur OOM lainnya.

# Cek proses PHP yang sedang berjalan
ps aux | grep -E ‘[p]hp-fpm|[p]hp-cgi|[l]sphp|[h]ttpd|[a]pache2’# Cek semua binary PHP yang terinstal beserta versinya
for p in /usr/bin/php /usr/bin/php[0-9]* /opt/alt/php*/usr/bin/php; do [ -x “$p” ] && echo “$p $(“$p” -r ‘echo PHP_VERSION;’)”; done

# Pastikan setiap FPM master benar-benar sudah di-restart setelah update
ps -eo pid,lstart,args | grep ‘[p]hp-fpm: master’

# Update via package manager (Debian/Ubuntu)
sudo apt-get update && sudo apt-get upgrade php*

# Update ELS build (RPM-based, untuk branch EOL)
sudo yum update alt-php*

⚠️ Deteksi eksploitasi: Jika PHP worker (php-fpm, php-cgi, lsphp, atau proses Apache) tiba-tiba menjalankan shell, curl, wget, atau perintah pengintaian seperti whoami/id/uname — itu sinyal kuat bahwa eksploitasi sedang atau sudah terjadi. Jika ditemukan, isolasi server dan amankan log sebelum melakukan pembersihan apapun — log akses yang bersih bukan jaminan aman, karena log default tidak mencatat body POST.

TL;DR

  • PHP2Shell = dua kerentanan RCE kritis di interpreter PHP sendiri, bukan framework atau CMS
  • CVE-2026-109618: RCE via OOM corruption. CVE-2026-109619: RCE via stale global state (use-after-free lintas request)
  • CVSS 9.2 (Critical) untuk keduanya — terkonfirmasi RCE penuh terhadap mod_php
  • Bocor ke publik sehari sebelum jadwal resmi — eksploitasi aktif terdeteksi sebelum patch rilis
  • Patch resmi: PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35
  • Branch EOL (8.1 ke bawah, termasuk 7.x dan 5.x) tidak mendapat patch upstream — butuh ELS atau migrasi
  • Mitigasi sementara (session.upload_progress off, strict mode) hanya menutup satu jalur, bukan solusi lengkap
  • Update sekarang, dan jangan lupa restart setiap PHP worker setelahnya.

You may also like...

1 Response

  1. October 24, 2026

    […] 📌 Referensi: Elias Taylor — “There isn’t an easy exploit for this PHP vulnerability” Lihat juga artikel teknis PHP2Shell sebelumnya di blog ini untuk detail root cause CVE-2026-109618 dan CVE-2026-109619. CVE-2026-109618 dan CVE-2026-109619. […]

Leave a Reply

Your email address will not be published. Required fields are marked *