Gocelerus

Blog · 22 Oct 2026 · 8 min read

PHP2Shell: Celah Kritis PHP CVE-2026-109618 & CVE-2026-109619, dan Cara Mengamankannya

Dua celah di inti PHP (CVSS 9.2) memungkinkan penyerang menjalankan kode di server tanpa login. Ini penjelasan cara kerjanya, versi yang terdampak, dan langkah pembaruan untuk VPS, cPanel, dan shared hosting.

By Tim Gocelerus

PHP2Shell: Celah Kritis PHP CVE-2026-109618 & CVE-2026-109619, dan Cara Mengamankannya

Pada 21 Oktober 2026, tim PHP merilis pembaruan keamanan darurat untuk dua celah yang kini dikenal dengan nama PHP2Shell: CVE-2026-109618 dan CVE-2026-109619. Keduanya diberi skor CVSS v4.0 9.2 (Critical) dan memungkinkan penyerang menjalankan kode di server dari jarak jauh tanpa perlu login.

Kalau website kamu berjalan di atas PHP, dan itu mencakup WordPress, WooCommerce, Laravel, Magento, serta sebagian besar CMS lain, artikel ini menjelaskan apa yang sebenarnya terjadi, siapa yang terdampak, dan langkah apa yang perlu diambil sekarang.

Ringkasan singkat

  • Apa: dua celah di inti PHP yang bisa berujung pada remote code execution (RCE) tanpa autentikasi.
  • Tingkat bahaya: CVSS v4.0 9.2, kategori Critical.
  • Versi yang sudah diperbaiki: PHP 8.5.12, 8.4.27, 8.3.36, dan 8.2.35.
  • Yang perlu dilakukan: perbarui PHP ke versi di atas (atau paket distribusi yang sudah di-backport), lalu restart PHP-FPM atau web server.
  • Sudah diserang? Beberapa vendor keamanan melaporkan lalu lintas serangan, tapi status eksploitasi yang terkonfirmasi masih diperdebatkan. Jangan menunggu kepastian untuk memperbarui.

Celah pertama: CVE-2026-109618 (RCE lewat kerusakan memori saat kehabisan memori)

Setiap request PHP punya batas memori, diatur oleh memory_limit. Saat sebuah request melewati batas itu, PHP menghentikannya dengan fatal error.

Masalahnya ada pada cara PHP berhenti. Penghentian itu bisa terjadi di tengah kode internal PHP, sebelum kode tersebut sempat merapikan memori yang sedang dipakainya. Akibatnya, ada memori yang sudah dibebaskan tapi masih dirujuk. Request berikutnya, atau proses worker yang dipakai ulang untuk melayani request lain, lalu memperlakukan memori yang sudah dibebaskan itu seolah-olah masih berisi data yang sah. Dalam dunia keamanan, pola ini disebut use-after-free, dan merupakan salah satu jalur klasik menuju eksekusi kode.

Ubuntu merangkumnya sebagai: penanganan kondisi kehabisan memori bisa menghentikan PHP saat data request internal baru terisi sebagian.

Celah kedua: CVE-2026-109619 (RCE lewat status global yang tertinggal)

PHP modern biasanya tidak membuat proses baru untuk setiap request. PHP-FPM, misalnya, memakai sekumpulan worker yang melayani request satu demi satu, dan setiap worker seharusnya "bersih" lagi sebelum request berikutnya masuk.

Pada CVE-2026-109619, ada sisa status dari request sebelumnya yang ternyata menunjuk ke memori yang sudah dibebaskan. Ketika worker yang sama memproses request berikutnya, sisa status itu ikut dipakai. Penyerang bisa memanfaatkannya untuk menjalankan kode. Advisory PHP juga menyebut kebocoran isi memori (memory disclosure) sebagai dampak yang terkonfirmasi untuk celah ini, yang artinya data dari request lain berpotensi ikut terbaca.

Kenapa ini serius

Tiga hal membuat PHP2Shell berbeda dari celah PHP pada umumnya:

  1. Tidak butuh login. Penyerang cukup mengirim request yang dirancang khusus ke website.
  2. Login aplikasi tidak menolong. Peneliti di Datadog Security Labs, yang mereproduksi celah ini secara independen, mencatat bahwa PHP sudah memproses request berbahaya sebelum kode aplikasi berjalan. Jadi halaman login, plugin keamanan, atau pembatasan akses di level aplikasi tidak bisa menahannya.
  3. Cakupannya luas. Celah ada di inti PHP, bukan di satu CMS atau plugin tertentu. Peneliti melaporkan berhasil membuktikan RCE tanpa autentikasi pada Magento 2.4.9 dan sejumlah aplikasi PHP lain.

Menurut pemberitahuan vendor panel hosting yang beredar, mode yang terdampak mencakup PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, dan LiteSpeed, dengan risiko tertinggi pada mod_php.

Versi PHP mana yang terdampak?

Cabang PHP Status
8.5 Diperbaiki di 8.5.12
8.4 Diperbaiki di 8.4.27
8.3 Diperbaiki di 8.3.36
8.2 Diperbaiki di 8.2.35
7.4 – 8.1 Tidak ada rilis resmi baru. Tim keamanan PHP hanya menerbitkan backport minimal dalam bentuk kode sumber; perbaikan biasanya datang dari distribusi Linux atau vendor panel.
5.4 – 7.3 Sudah end-of-life, tidak ada perbaikan dari proyek PHP.

Kalau website kamu masih memakai PHP 8.1 atau lebih lama, ini saat yang tepat untuk pindah ke 8.3 atau 8.4. Versi lama yang sudah tidak didukung akan terus tertinggal setiap kali ada celah baru.

Status serangan di lapangan

Sumber-sumber yang ada belum satu suara:

  • Cloudflare, watchTowr, dan Hadrian melaporkan adanya lalu lintas serangan.
  • Honeypot Amazon (MadPot) dilaporkan mencatat percobaan eksploitasi pada 17 Oktober 2026, empat hari sebelum celah ini diumumkan. Amazon sendiri menyatakan belum jelas apakah percobaan itu akan berhasil pada sistem sungguhan.
  • CISA, dalam peringatannya tanggal 21 Oktober, belum mengamati eksploitasi, dan celah ini belum masuk katalog Known Exploited Vulnerabilities (KEV) saat laporan-laporan tersebut ditulis.

Kesimpulannya sederhana: anggap celah ini sudah dicari aktif oleh penyerang, dan perbarui sekarang.

Cara mengecek versi PHP yang dipakai website kamu

Lewat terminal (VPS atau server sendiri):

php -v
php -r 'echo PHP_VERSION, PHP_EOL;'

Perlu diingat: versi PHP untuk command line (php -v) bisa berbeda dengan versi yang dipakai website. Untuk memastikan versi yang dipakai website, buat file sementara cek.php berisi:

<?php echo PHP_VERSION;

Buka file itu di browser, catat versinya, lalu hapus filenya setelah selesai.

Lewat cPanel: buka menu MultiPHP Manager atau Select PHP Version. Versi yang dipakai setiap domain tercantum di sana.

Catatan penting untuk Ubuntu dan Debian

Ubuntu dan Debian memasang perbaikan keamanan tanpa menaikkan nomor versi PHP. Di Ubuntu 24.04, misalnya, PHP yang sudah diperbaiki tetap menampilkan 8.3.6. Jadi jangan menilai dari php -v. Periksa versi paketnya: untuk Ubuntu 24.04, perbaikan ada di paket 8.3.6-0ubuntu0.24.04.13 (USN-8948-1). Untuk Ubuntu 14.04 sampai 20.04, perbaikannya ada di USN-8948-2. Kamu juga bisa memastikan perbaikan sudah terpasang lewat changelog paket:

zgrep -E 'CVE-2026-10961[89]' /usr/share/doc/php8.3-fpm/changelog.Debian.gz

Kalau perintah itu menampilkan baris yang menyebut kedua CVE, paketnya sudah berisi perbaikan.

Cara memperbarui

Ubuntu / Debian:

sudo apt update
sudo apt install --only-upgrade 'php8.3*'
sudo systemctl restart php8.3-fpm

Sesuaikan 8.3 dengan versi PHP yang kamu pakai, dan restart juga web server kalau memakai mod_php (misalnya sudo systemctl restart apache2).

cPanel / WHM (EasyApache 4): cPanel merilis EasyApache 4 versi 25.91 pada 21 Oktober 2026, yang membawa perbaikan untuk paket ea-php74 sampai ea-php85. Paket ea-php83, misalnya, naik dari 8.3.35 ke 8.3.36. Pembaruan bisa dilakukan lewat WHM → Software → EasyApache 4, atau dari terminal:

yum clean all
yum update "ea-php*"

Lalu restart PHP-FPM dan web server. Sumber-sumber belum sepakat apakah ea-php81 ikut mendapat perbaikan, jadi periksa changelog paketnya langsung di server:

rpm -q ea-php83-php-cli --changelog | grep -E 'CVE-2026-(109618|109619)'

Ganti ea-php83 dengan paket yang terpasang.

CloudLinux (alt-php / PHP Selector): perbaikan untuk paket alt-php datang lewat repositori CloudLinux, terpisah dari paket cPanel. Pantau halaman status CloudLinux dan jalankan yum update "alt-php*" begitu paketnya tersedia.

Jangan lupa restart

Ini langkah yang paling sering terlewat. Memperbarui paket tidak otomatis mengganti PHP yang sedang berjalan. Selama PHP-FPM, LiteSpeed, atau Apache belum di-restart, worker lama yang masih rentan tetap melayani request. Setelah restart, cek ulang versinya.

Bagaimana dengan WAF dan Imunify360?

Imunify360 dari CloudLinux merilis ruleset 8.83 yang berisi aturan untuk pola eksploit yang beredar publik. Menurut CloudLinux, aturan ini memblokir pola tersebut di Apache, tetapi di LiteSpeed hanya mencatat (log) tanpa memblokir.

WAF berguna sebagai lapisan tambahan selama menunggu pembaruan, tapi bukan pengganti patch. Aturan WAF mengenali pola serangan yang sudah diketahui, sementara celahnya sendiri tetap ada di PHP sampai PHP diperbarui.

Kalau website kamu di shared hosting

Di shared hosting, PHP dikelola oleh penyedia hosting, bukan oleh pemilik website. Yang bisa kamu lakukan:

  1. Cek versi PHP website kamu dengan cara di atas.
  2. Kalau masih memakai PHP 8.1 atau lebih lama, pindah ke 8.3 atau 8.4 lewat Select PHP Version atau MultiPHP Manager di cPanel. Uji website setelahnya.
  3. Tanyakan ke penyedia hosting apakah server mereka sudah memasang paket PHP yang diperbaiki.

Pelanggan Gocelerus bisa menghubungi tim kami lewat halaman kontak untuk menanyakan status pembaruan PHP di server tempat website mereka berada.

Daftar periksa

  • Cek versi PHP yang dipakai website (bukan hanya php -v).
  • Perbarui ke 8.5.12, 8.4.27, 8.3.36, 8.2.35, atau paket distribusi yang sudah di-backport.
  • Restart PHP-FPM, LiteSpeed, atau Apache.
  • Pastikan perbaikan terpasang lewat changelog paket.
  • Pindahkan website yang masih memakai PHP 8.1 atau lebih lama.
  • Anggap WAF sebagai lapisan tambahan, bukan pengganti patch.

Sumber

Related