Langsung ke konten

PHP2Shell: Celah Kritis di Inti PHP, Update Sekarang!

PHP2Shell adalah dua celah kritis di inti PHP (CVSS 9.2) yang bisa memicu eksekusi kode tanpa login. Ketahui cara kerjanya, versi aman, dan mitigasinya.

Tangkapan layar pengumuman keamanan PHP pada halaman php.net, 21 Oktober 2026.
Tangkapan layar pengumuman keamanan PHP pada halaman php.net, 21 Oktober 2026.
Advertisement

Website “Hello World” tanpa login pun bisa diambil alih peretas. Inilah PHP2Shell, keluarga kerentanan kritis di inti PHP (CVSS hingga 9.2) yang memungkinkan eksekusi kode jarak jauh (RCE) tanpa autentikasi, serta kebocoran memori proses.

PHP menjalankan sekitar 70% website di dunia, termasuk WordPress, Drupal, dan MediaWiki. Celahnya ada di PHP itu sendiri, bukan di kode aplikasi Anda. Karena itu, website bisa terdampak walaupun kode aplikasinya aman. Tim PHP mengumumkan perbaikannya pada 21 Oktober 2026.

Kalau lebih suka menonton, ringkasannya ada di video berikut.

Ringkasan Singkat

  • Apa: dua kerentanan keamanan memori di inti PHP, dengan tingkat keparahan hingga CVSS 9.2.
  • Dampak: eksekusi kode jarak jauh (RCE) tanpa autentikasi, serta kebocoran memori proses PHP.
  • Yang terdampak: semua instalasi PHP yang melayani request web, termasuk PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, dan LiteSpeed.
  • Solusi: update ke PHP 8.5.12, 8.4.27, 8.3.36, atau 8.2.35.

Apa yang Bisa Dilakukan Penyerang?

  1. Menjalankan kode di server tanpa login. Penyerang berpotensi mengambil alih server, mengakses data sensitif, bergerak ke sistem lain, atau merusak tampilan website.
  2. Membaca memori proses PHP. Memori ini bisa berisi password, token autentikasi, API key, dan sertifikat, baik milik request lain maupun milik server.
  3. Mencuri data lewat kebocoran memori saja. Tanpa eksekusi kode, aktivitas ini lebih sulit dideteksi oleh alat yang berfokus pada kode berbahaya.

Dua Kerentanan di Balik PHP2Shell

CVEJenisRingkasan
CVE-2026-109618Korupsi akibat Out-of-Memory (OOM)Penanganan kehabisan memori bisa menginterupsi PHP saat data request baru terisi sebagian, lalu proses penutupan request memperlakukan data rusak itu sebagai valid.
CVE-2026-109619State global basi (stale global state)State milik satu request bertahan setelah memorinya dibebaskan, lalu dipakai request berikutnya di worker yang sama sebelum inisialisasi normal (use-after-free).

CVE-2026-109618 terjadi karena PHP memakai longjmp() untuk keluar saat memori habis. Pada beberapa kondisi, memori request sudah bisa dijangkau sebelum selesai diinisialisasi. Pada Apache mod_php, prosedur penutupan request selalu dijalankan, sehingga serangan dapat terjadi sebelum satu baris pun kode aplikasi berjalan.

CVE-2026-109619 membutuhkan dua peran: producer yang meninggalkan state basi (misalnya lewat fatal error, kehabisan memori, atau waktu eksekusi habis), dan consumer yang membacanya di request berikutnya sebelum PHP mereset state. Jalur yang sudah terkonfirmasi mencakup fitur session.upload_progress dan, di PHP 8.5, fatal_error_backtraces.

Siapa yang Berisiko?

LingkunganTingkat risiko menurut advisory
Apache mod_phpTertinggi, exploit tanpa autentikasi sudah terdemonstrasi
PHP-FPMRentan; jalur lewat session upload progress sudah divalidasi, untuk jalur OOM belum ada exploit lengkap
FrankenPHPKemungkinan rentan berdasarkan analisis source
LiteSpeed (LSAPI)Kemungkinan rentan, eksploitasi spesifik aplikasi belum divalidasi
php-cgiTermasuk instalasi yang berisiko

Solusi Utama: Update PHP

Segera update ke versi yang sudah ditambal:

  • PHP 8.5.12
  • PHP 8.4.27
  • PHP 8.3.36
  • PHP 8.2.35

Catatan penting:

  • Distribusi Linux dan vendor LTS menerima patch lebih awal, jadi cek paket terbaru dari vendor Anda.
  • PHP 8.1 ke bawah tidak lagi didukung secara resmi. Cek vendor distro Anda untuk backport, atau upgrade ke versi yang didukung. Tim keamanan PHP juga menyediakan backport minimal untuk PHP 7.4, 8.0, dan 8.1 bagi yang membangun dari source.
  • Jika Anda memakai rpms.remirepo.net, tim PHP menyarankan beralih ke paket distribusi atau build dari source, karena repo tersebut tidak menyediakan update pada hari pengumuman.
  • Pengguna shared hosting: hubungi penyedia hosting untuk memastikan versi PHP Anda sudah ditambal.

Cek versi di server:

php -v

Setelah update, restart semua worker (misalnya PHP-FPM atau Apache) agar versi baru benar-benar dipakai.

Mitigasi Sementara (Jika Belum Bisa Update)

Langkah-langkah ini hanya mengurangi jalur serangan tertentu dan tidak membuat instalasi aman. Anggap ini jembatan sampai Anda bisa update.

Untuk celah OOM (CVE-2026-109618):

; Sebaiknya diatur administratif agar tidak bisa di-override aplikasi
; (php_admin_value di pool FPM atau konfigurasi Apache)
memory_limit = -1

; Batasi ukuran request
post_max_size = 8M    ; 32M jika aplikasi memang butuh upload file
  • Pastikan tidak ada pool, direktori, atau pengaturan aplikasi yang mengembalikan batas memori yang terbatas.
  • Terapkan batas di web server atau proxy untuk ukuran request, jumlah field, jumlah bagian multipart, jumlah header, dan kedalaman nesting.
  • Gunakan batas cgroup atau container sebagai batas ketersediaan, sebaiknya dengan kebijakan yang hanya mematikan worker yang terdampak. Jangan memakai RLIMIT_AS atau RLIMIT_DATA, karena justru bisa memicu kegagalan alokasi yang rentan.

Untuk celah state basi (CVE-2026-109619):

session.upload_progress.enabled = 0

; Khusus PHP 8.5
fatal_error_backtraces = 0
  • Atur lewat php.ini, pool FPM, atau konfigurasi server yang berlaku sebelum parsing request, lalu restart semua worker. Jangan mengandalkan ini_set() atau .user.ini.
  • Hapus setelan INI yang tidak valid atau usang yang diterapkan per request, karena bisa memunculkan diagnostik sebelum inisialisasi. Menyembunyikan pesan dengan error_reporting, display_errors, atau @ tidak membantu.
  • Perbaiki fatal error dan execution timeout yang bisa dijangkau penyerang, termasuk di proses upload, import, dan callback.

Checklist Singkat

  1. Cek versi: php -v
  2. Update ke versi yang sudah ditambal
  3. Restart semua worker (PHP-FPM/Apache)
  4. Audit log error dan deprecation
  5. Rotasi password dan API key jika server sempat terpapar, karena kebocoran memori sulit dideteksi

Pertanyaan yang Sering Diajukan

Apakah WordPress saya terdampak? Celahnya ada di PHP, bukan di WordPress. Yang perlu diperbarui adalah versi PHP di server atau hosting Anda.

Apakah firewall atau plugin keamanan cukup? Tidak ada jaminan. Advisory menegaskan bahwa mitigasi konfigurasi hanya mengurangi risiko dan update adalah satu-satunya solusi lengkap.

Bagaimana jika log saya bersih? Ketiadaan error di log bukan bukti aman. Kegagalan bisa terjadi sebelum PHP sempat menulis pesan, dan log lama mungkin tidak mencatat deprecation.

Artikel ini membahas konsep dan mitigasi, tanpa detail teknis eksploitasi. Selalu rujuk ke advisory resmi untuk informasi terbaru.

Sumber

Advertisement