PHP2Shell: Dua CVE Kritis yang Mengancam Server Web, Ini Cara Mengamankannya
Keamanan server web bukan hanya bergantung pada kualitas kode aplikasi, konfigurasi firewall, atau kekuatan autentikasi administrator. Komponen dasar yang menjalankan aplikasi juga harus diperbarui secara berkala. Salah satu contohnya adalah PHP, bahasa pemrograman sisi server yang banyak digunakan untuk menjalankan WordPress, Joomla, Drupal, dan berbagai aplikasi web lainnya.
Pada 21 Oktober 2026, tim keamanan PHP merilis pembaruan untuk dua kerentanan kritis yang dikenal sebagai PHP2Shell, yaitu CVE-2026-109618 dan CVE-2026-109619. Keduanya berkaitan dengan pengelolaan memori internal PHP dan berpotensi memungkinkan penyerang yang tidak terautentikasi menjalankan kode secara jarak jauh pada sistem yang rentan. Kedua kerentanan tersebut memiliki skor CVSS v4.0 sebesar 9,2.
Ancaman ini perlu mendapat perhatian administrator Linux, sysadmin, DevOps engineer, pengelola hosting, administrator WordPress, dan tim keamanan informasi.
Hal yang membuat PHP2Shell penting adalah potensi serangan pada lapisan runtime. Artinya, aplikasi yang kode sumbernya relatif aman belum tentu terlindungi jika runtime PHP yang menjalankannya masih memiliki kerentanan tersebut.
Bayangkan sebuah gedung yang memiliki pintu utama dengan sistem keamanan canggih. Namun, jika mekanisme pengunci otomatis pada seluruh pintu mengalami kerusakan, sistem keamanan tambahan di pintu depan saja tidak cukup untuk melindungi seluruh gedung.
Prinsip yang sama berlaku pada keamanan server: aplikasi, runtime, sistem operasi, konfigurasi, dan jaringan harus diamankan secara berlapis.
Artikel ini membahas cara kerja PHP2Shell secara konseptual, dampaknya terhadap server web, pemeriksaan versi PHP, langkah pembaruan, pemantauan indikasi kompromi, serta praktik terbaik untuk menjaga infrastruktur tetap aman.
Ilustrasi ancaman keamanan runtime PHP pada server web.
1. Apa Itu PHP2Shell?
PHP2Shell adalah sebutan untuk dua kerentanan keamanan pada runtime PHP yang dapat membuka peluang terjadinya Remote Code Execution (RCE).
RCE merupakan kondisi ketika penyerang mampu membuat sistem menjalankan kode pilihannya dari jarak jauh. Bergantung pada hak akses proses yang berhasil dieksploitasi, dampaknya dapat berupa pencurian data, pemasangan malware, modifikasi website, pembuatan mekanisme persistensi, hingga pengambilalihan sebagian atau seluruh layanan server.
PHP2Shell mencakup dua kerentanan:
- CVE-2026-109618: berkaitan dengan korupsi atau kondisi memori tidak valid saat PHP menangani kehabisan memori (out-of-memory).
- CVE-2026-109619: berkaitan dengan penggunaan kembali referensi atau status global internal yang sudah tidak valid setelah memori permintaan dibebaskan.
Kedua kerentanan melibatkan masalah pengelolaan memori, tetapi mekanisme internalnya berbeda. Pembaruan keamanan PHP telah diterbitkan untuk memperbaiki keduanya.
2. Mengenal CVE-2026-109618 dan CVE-2026-109619
CVE-2026-109618: RCE melalui Out-of-Memory Corruption
CVE-2026-109618 berkaitan dengan penanganan kondisi kehabisan memori pada PHP.
Saat memproses sebuah permintaan HTTP, PHP menggunakan memori untuk menyimpan data permintaan, informasi internal, variabel, dan berbagai struktur yang diperlukan selama eksekusi.
Masalah dapat muncul ketika proses PHP mengalami kondisi out-of-memory pada tahap tertentu. Penanganan kesalahan yang menghentikan eksekusi secara mendadak dapat meninggalkan sebagian struktur internal dalam keadaan belum terinisialisasi dengan benar.
Jika proses pembersihan permintaan kemudian memperlakukan data yang tidak valid tersebut sebagai data yang sah, kondisi ini dapat membuka peluang eksploitasi.
Secara sederhana, prosesnya dapat digambarkan sebagai berikut:
Permintaan HTTP masuk
PHP memproses data dan menggunakan memori
Terjadi kondisi out-of-memory
Status memori internal menjadi tidak valid
Potensi eksekusi kode tanpa izin
Perlu dipahami bahwa tidak setiap kondisi kehabisan memori otomatis menghasilkan RCE. Eksploitasi bergantung pada jalur eksekusi dan kondisi teknis tertentu. Namun, karena potensi dampaknya kritis, administrator tidak boleh menganggap kesalahan memori sebagai masalah performa biasa tanpa pemeriksaan lebih lanjut.
CVE-2026-109619: RCE melalui Stale Global State
Kerentanan kedua berkaitan dengan status global internal PHP yang masih merujuk ke memori permintaan sebelumnya meskipun memori tersebut sudah dibebaskan.
Istilah stale state berarti kondisi atau referensi lama yang seharusnya tidak lagi digunakan, tetapi masih tersisa atau dapat digunakan kembali sebelum diinisialisasi dengan benar.
Analogi sederhananya adalah sebuah aplikasi yang menyimpan alamat ruang penyimpanan sementara. Ruangan tersebut sudah dikosongkan dan dialihkan untuk keperluan lain, tetapi aplikasi masih menggunakan alamat lama seolah-olah isinya belum berubah.
Jika referensi tersebut digunakan kembali pada saat yang tidak tepat, PHP dapat mengakses memori yang tidak valid. Dalam kondisi tertentu, masalah ini dapat dimanfaatkan untuk menjalankan kode dari jarak jauh.
Salah satu jalur yang perlu diperhatikan adalah pemrosesan permintaan yang melibatkan fitur session upload progress. Namun, administrator tidak boleh berasumsi bahwa mematikan satu fitur saja akan menghilangkan seluruh risiko PHP2Shell.
Perbedaan kedua kerentanan
| Aspek | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| Fokus masalah | Penanganan out-of-memory | Status global dan referensi memori lama |
| Jenis kelemahan | Memori tidak valid atau belum terinisialisasi | Penggunaan referensi setelah memori dibebaskan |
| Potensi dampak | Remote Code Execution | Remote Code Execution |
| Skor CVSS v4.0 | 9,2 | 9,2 |
| Tindakan utama | Terapkan pembaruan PHP yang sesuai | Terapkan pembaruan PHP yang sesuai |
Kedua kerentanan memiliki tingkat keparahan kritis. Karena itu, prioritas penanganannya bukan memilih salah satu untuk diperbaiki, melainkan memastikan seluruh runtime PHP yang relevan telah mendapatkan perbaikan yang tepat.
3. Mengapa PHP2Shell Sangat Berbahaya?
Remote Code Execution tanpa autentikasi
Salah satu faktor utama yang meningkatkan risiko PHP2Shell adalah potensi eksploitasi tanpa autentikasi. Artinya, penyerang tidak selalu harus memiliki akun WordPress, kredensial administrator, atau akses SSH untuk mencoba mengeksploitasi runtime yang rentan.
Dampak akhirnya bergantung pada konfigurasi server, jalur pemrosesan permintaan, dan keberhasilan eksploitasi. Jika berhasil, kode berbahaya dapat dijalankan dengan hak akses proses PHP atau proses web server yang terdampak.
Dari sudut pandang administrator, kondisi tersebut menimbulkan beberapa risiko:
- Kerahasiaan data: penyerang berpotensi membaca informasi yang dapat diakses proses PHP, termasuk data aplikasi dan konfigurasi yang sensitif.
- Integritas sistem: file website, skrip, atau data aplikasi dapat dimodifikasi jika izin proses memungkinkan.
- Ketersediaan layanan: server dapat mengalami gangguan, proses dihentikan, atau sumber daya digunakan untuk aktivitas yang tidak sah.
- Persistensi: penyerang yang berhasil memperoleh akses dapat mencoba mempertahankan keberadaannya melalui file berbahaya, akun, atau tugas terjadwal.
Perlu dicatat bahwa RCE tidak otomatis berarti penyerang langsung memperoleh akses root. Hak akses yang diperoleh bergantung pada akun proses, konfigurasi sistem, serta kemungkinan eskalasi hak istimewa.
Skor CVSS 9,2: apa artinya?
CVSS merupakan standar untuk mengukur tingkat keparahan kerentanan keamanan. Skor 9,2 pada skala CVSS v4.0 termasuk kategori Critical.
Skor tinggi ini menunjukkan bahwa kerentanan memerlukan penanganan prioritas tinggi karena potensi dampaknya sangat besar. Skor CVSS bukan persentase kemungkinan server diserang dan bukan jaminan bahwa setiap instalasi dapat dieksploitasi dengan cara yang sama.
Administrator tetap perlu mempertimbangkan paparan jaringan, versi runtime, konfigurasi, dan bukti eksploitasi yang tersedia. Dalam kasus PHP2Shell, sifat kerentanan yang dapat mengarah pada RCE membuat sistem yang melayani permintaan dari internet perlu diprioritaskan.
Mengapa aplikasi yang aman tetap dapat terdampak?
Aplikasi web berjalan di atas runtime. Jika runtime memiliki kerentanan yang dapat dipicu sebelum kode aplikasi dijalankan, pemeriksaan input di dalam aplikasi belum tentu dapat mencegah serangan.
Misalnya, sebuah website WordPress telah menggunakan kata sandi administrator yang kuat, plugin terbaru, dan pembatasan login. Langkah tersebut tetap penting, tetapi tidak menggantikan pembaruan PHP.
Inilah alasan keamanan aplikasi harus menggunakan pendekatan berlapis (defense in depth), yang mencakup:
- Pembaruan runtime PHP dan sistem operasi.
- Pembaruan CMS, plugin, tema, serta dependensi.
- Pembatasan hak akses proses aplikasi.
- Firewall dan pembatasan paparan jaringan.
- Logging, monitoring, serta deteksi aktivitas mencurigakan.
- Backup teruji dan prosedur pemulihan insiden.
4. Versi PHP yang Terdampak dan Versi Perbaikan
Berdasarkan informasi keamanan yang diterbitkan pada 21 Oktober 2026, PHP menyediakan rilis perbaikan berikut untuk cabang yang disebutkan dalam advisori:
| Cabang PHP | Versi perbaikan |
|---|---|
| PHP 8.5.x | 8.5.12 |
| PHP 8.4.x | 8.4.27 |
| PHP 8.3.x | 8.3.36 |
| PHP 8.2.x | 8.2.35 |
Versi pada setiap cabang yang lebih lama daripada rilis perbaikannya perlu dievaluasi terhadap advisori vendor. PHP 8.1 dan versi yang lebih lama telah berstatus tidak didukung oleh proyek PHP utama, meskipun beberapa distribusi Linux atau vendor tertentu mungkin menyediakan backport perbaikan keamanan.
Penting: tabel di atas bukan berarti seluruh versi setelah angka tersebut selalu aman terhadap setiap kerentanan PHP. Administrator tetap harus mengikuti advisori keamanan terbaru dan menggunakan rilis yang didukung.
Pada sistem Linux, nomor versi paket yang ditampilkan oleh perintah php -v juga belum tentu menggambarkan seluruh status patch. Distribusi dapat menerapkan perbaikan keamanan melalui backport tanpa mengubah nomor versi upstream menjadi angka yang sama persis dengan rilis PHP resmi.
Karena itu, verifikasi perlu dilakukan menggunakan informasi paket dan advisori keamanan distribusi yang digunakan.
5. Cara Memeriksa Versi PHP di Linux Server
Langkah pertama adalah mengidentifikasi runtime PHP yang benar-benar menjalankan website, bukan sekadar memeriksa satu perintah PHP di terminal.
Langkah 1 — Periksa versi PHP CLI
Jalankan:
php -v
Contoh keluaran:
PHP 8.3.x (cli) ...
Perintah tersebut menunjukkan versi PHP CLI yang tersedia pada PATH pengguna saat ini.
Namun, versi CLI belum tentu sama dengan PHP yang digunakan Apache, PHP-FPM, container Docker, atau aplikasi lain.
Langkah 2 — Periksa lokasi binary PHP
Jalankan:
which php
readlink -f "$(which php)"
php --ini
Perintah tersebut membantu mengidentifikasi binary PHP yang digunakan, file konfigurasi utama, serta lokasi konfigurasi tambahan.
Jika server memiliki beberapa versi PHP, periksa masing-masing binary yang tersedia, misalnya:
command -v php8.2
command -v php8.3
command -v php8.4
command -v php8.5
Tidak semua distribusi atau instalasi memiliki seluruh binary tersebut. Perintah yang tidak menghasilkan lokasi biasanya berarti binary dengan nama itu tidak tersedia pada PATH.
Langkah 3 — Periksa layanan PHP-FPM
Pada Debian atau Ubuntu, jalankan:
systemctl list-units --type=service --all \
| grep -E 'php.*fpm'
Kemudian periksa layanan yang ditemukan. Contohnya:
systemctl status php8.3-fpm
Sesuaikan nama layanan dengan versi yang benar-benar terpasang.
Periksa pula proses yang berjalan:
ps -eo pid,user,comm,args \
| grep -E '[p]hp-fpm|[p]hp-cgi'
Informasi tersebut membantu mengidentifikasi proses PHP yang aktif dan akun sistem yang menjalankannya.
Langkah 4 — Periksa Apache dan modul PHP
Jika menggunakan Apache HTTP Server, periksa modul PHP:
apache2ctl -M 2>/dev/null | grep -i php
Untuk distribusi yang menggunakan nama executable berbeda, sesuaikan dengan perintah Apache yang tersedia.
Jika modul PHP terintegrasi langsung ke Apache, versi PHP yang digunakan untuk melayani permintaan web dapat berbeda dari PHP CLI. Pada konfigurasi ini, pembaruan PHP harus mengikuti paket modul yang aktif dan prosedur pembaruan distribusi.
Langkah 5 — Periksa konfigurasi website
Periksa virtual host dan konfigurasi web server untuk mengetahui apakah website menggunakan PHP-FPM, mod_php, FastCGI, container, atau runtime lain.
Contoh pemeriksaan awal untuk Nginx:
nginx -T 2>/dev/null | grep -E \
'fastcgi_pass|proxy_pass'
Perintah ini hanya membantu mengidentifikasi konfigurasi yang relevan. Hasilnya tidak selalu cukup untuk menentukan seluruh jalur eksekusi PHP, terutama jika terdapat reverse proxy, container, atau konfigurasi yang dikelola secara terpisah.
Jangan mengunggah hasil konfigurasi lengkap ke forum publik sebelum menyamarkan domain internal, alamat jaringan, kredensial, token, dan informasi sensitif lainnya.
6. Tutorial: Memperbarui PHP dengan Aman di Server Produksi
Pembaruan keamanan harus dilakukan dengan memperhatikan kompatibilitas aplikasi, ketergantungan paket, ketersediaan layanan, dan rencana pemulihan.
Langkah 1 — Identifikasi seluruh instalasi PHP
Buat inventaris yang mencakup:
- Versi PHP CLI.
- PHP-FPM dan versi pool yang aktif.
- Modul PHP Apache jika digunakan.
- Container yang menyertakan PHP.
- Aplikasi atau appliance yang membawa runtime sendiri.
- Versi PHP pada staging dan produksi.
Jangan berasumsi bahwa memperbarui PHP pada host otomatis memperbarui runtime di dalam container.
Langkah 2 — Buat backup dan rencana pemulihan
Sebelum pembaruan, pastikan tersedia:
- Backup database yang konsisten.
- Backup file website dan konfigurasi web server.
- Salinan konfigurasi PHP dan daftar ekstensi.
- Informasi versi paket sebelum pembaruan.
- Prosedur rollback yang telah dievaluasi.
Contoh untuk menyimpan informasi versi dan daftar paket PHP pada Debian/Ubuntu:
mkdir -p /root/php2shell-audit
php -v \
> /root/php2shell-audit/php-cli-version.txt 2>&1
dpkg-query -W \
'php*' \
> /root/php2shell-audit/php-packages.txt 2>&1
File tersebut menyimpan informasi pemeriksaan, bukan backup lengkap. Simpan salinannya di lokasi yang aman dan terpisah dari server produksi jika memungkinkan.
Langkah 3 — Periksa pembaruan yang tersedia
Pada Debian atau Ubuntu:
apt update
apt list --upgradable 2>/dev/null | grep -i php
Periksa juga kebijakan paket:
apt-cache policy php8.3 php8.3-fpm
Sesuaikan nama paket dengan versi yang digunakan.
Jika menggunakan paket bawaan distribusi, ikuti advisori keamanan resmi distribusi tersebut. Jika menggunakan repositori pihak ketiga, panel hosting, atau image container, ikuti sumber pembaruan yang menjadi tanggung jawab vendor terkait.
Jangan menambahkan repositori asing atau memaksakan upgrade lintas versi tanpa memeriksa kompatibilitas dan asal paket.
Langkah 4 — Terapkan pembaruan yang sesuai
Setelah memastikan paket perbaikan tersedia dan rencana pemulihan siap, perbarui paket yang relevan melalui mekanisme resmi distribusi atau vendor.
Contoh umum untuk memperbarui paket yang sudah dipilih pada Debian/Ubuntu:
apt install --only-upgrade \
php8.3-cli \
php8.3-fpm
Contoh tersebut hanya sesuai jika kedua paket itu memang digunakan dan tersedia sebagai paket pembaruan yang benar. Paket ekstensi PHP, modul Apache, dan dependensi terkait juga perlu dievaluasi.
Jangan menyalin perintah tersebut secara membabi buta ke server dengan versi, repositori, atau arsitektur yang berbeda.
Langkah 5 — Restart atau reload layanan yang diperlukan
Setelah pembaruan, ikuti prosedur vendor untuk memuat runtime yang telah diperbarui.
Contoh pada PHP-FPM:
systemctl restart php8.3-fpm
systemctl status php8.3-fpm --no-pager
Jika menggunakan Apache atau Nginx, verifikasi konfigurasi terlebih dahulu sebelum melakukan reload atau restart. Pada sistem dengan beberapa pool atau versi PHP, pastikan layanan yang dimuat ulang adalah layanan yang benar.
Perlu diingat bahwa restart layanan dapat menyebabkan gangguan sementara. Untuk sistem kritis, gunakan jadwal pemeliharaan atau prosedur deployment yang sesuai.
Langkah 6 — Verifikasi setelah pembaruan
Lakukan pemeriksaan berikut:
php -v
systemctl --failed
journalctl -u php8.3-fpm \
--since "15 minutes ago" \
--no-pager
Sesuaikan nama layanan dengan sistem yang digunakan.
Lanjutkan dengan pengujian aplikasi:
- Pastikan website dapat diakses.
- Uji autentikasi dan fungsi utama.
- Periksa koneksi database.
- Periksa antrean pekerjaan dan tugas terjadwal.
- Periksa error log PHP serta web server.
- Pastikan proses PHP yang aktif menggunakan paket yang telah diperbarui.
Terakhir, cocokkan versi dan status patch dengan advisori keamanan resmi. Versi CLI yang benar saja tidak cukup jika proses web masih menggunakan runtime yang lama.
7. Bagaimana Jika Server Belum Bisa Diperbarui?
Dalam lingkungan produksi, pembaruan kadang membutuhkan pengujian kompatibilitas atau persetujuan perubahan. Namun, menunda pembaruan tanpa mengurangi paparan risiko bukan strategi yang aman.
Jika patch belum dapat diterapkan, lakukan mitigasi sementara berikut:
- Prioritaskan isolasi atau pembatasan akses internet terhadap server yang rentan, terutama jika aplikasi tidak dapat diperbarui dalam waktu dekat.
- Evaluasi penonaktifan
session.upload_progressjika fitur tersebut tidak diperlukan, mengikuti advisori PHP dan pengujian aplikasi. - Evaluasi konfigurasi
memory_limit,post_max_size, serta pengaturan relevan lainnya berdasarkan panduan vendor. - Muat ulang proses PHP yang terdampak jika direkomendasikan oleh advisori dan prosedur operasional.
- Perketat pemantauan log dan aktivitas proses.
- Tetapkan batas waktu mitigasi dan rencana pembaruan yang jelas.
Langkah tersebut hanya mengurangi sebagian risiko. Mengubah batas memori, membatasi ukuran permintaan, atau menonaktifkan satu fitur tidak dapat dianggap sebagai pengganti patch.
8. Mendeteksi Indikasi Eksploitasi PHP2Shell
Pembaruan merupakan tindakan utama, tetapi administrator juga perlu mengevaluasi apakah sistem sudah disusupi sebelum perbaikan diterapkan.
Periksa log web server
Pada Debian/Ubuntu dengan Apache, lokasi log yang umum adalah:
/var/log/apache2/access.log
/var/log/apache2/error.log
Pada Nginx, lokasi yang umum adalah:
/var/log/nginx/access.log
/var/log/nginx/error.log
Lokasi tersebut dapat berbeda sesuai konfigurasi.
Untuk melihat aktivitas terbaru, gunakan:
tail -n 200 /var/log/nginx/error.log
Atau:
journalctl -u php8.3-fpm \
--since "24 hours ago" \
--no-pager
Sesuaikan nama layanan dan file log dengan sistem yang digunakan.
Cari pola permintaan yang tidak biasa, lonjakan kesalahan memori, proses PHP yang berhenti mendadak, serta aktivitas yang bertepatan dengan waktu kerentanan diketahui atau server terpapar.
Jangan hanya mencari satu kata tertentu. Tidak ada satu pola log yang dapat membuktikan atau menyingkirkan eksploitasi PHP2Shell secara menyeluruh.
Periksa proses anak yang tidak wajar
Proses web yang tiba-tiba menjalankan shell, interpreter, atau alat pengunduh dapat menjadi indikasi yang perlu diselidiki.
Pemeriksaan awal:
ps -eo pid,ppid,user,lstart,comm,args \
--sort=start_time
Untuk melihat pohon proses:
pstree -ap
Perhatikan proses yang tidak sesuai dengan fungsi aplikasi, tetapi jangan langsung menganggap semua proses shell sebagai serangan. Beberapa aplikasi sah menggunakan subprocess untuk menjalankan tugas administrasi atau pemrosesan data.
Periksa perubahan file dan mekanisme persistensi
Lakukan pemeriksaan terhadap:
- File PHP baru atau berubah di document root.
- Plugin atau tema CMS yang tidak dikenal.
- File konfigurasi yang berubah tanpa persetujuan.
- Cron job yang tidak dikenali.
- Akun baru atau perubahan hak akses.
- Koneksi keluar yang tidak sesuai dengan fungsi server.
- Perubahan konfigurasi PHP-FPM dan web server.
Contoh inventarisasi file PHP yang baru berubah dalam tujuh hari terakhir:
find /var/www -type f -name '*.php' \
-mtime -7 -printf '%TY-%Tm-%Td %TH:%TM %p\n'
Perintah ini membantu menemukan file yang berubah baru-baru ini, tetapi hasilnya juga akan mencakup pembaruan aplikasi yang sah. Sebaliknya, file berbahaya yang sudah lama berada di sistem mungkin tidak muncul.
Karena itu, bandingkan hasil pemeriksaan dengan baseline yang tepercaya, backup, atau sistem version control.
Jika ditemukan indikasi kompromi
Jangan hanya menghapus file mencurigakan lalu menganggap masalah selesai.
Lakukan langkah berikut:
- Isolasi server dari jaringan sesuai prosedur respons insiden.
- Pertahankan log dan bukti digital yang relevan.
- Catat waktu kejadian, proses, akun, dan file yang mencurigakan.
- Periksa kemungkinan akses tidak sah terhadap database, kredensial, dan sistem lain.
- Terapkan patch atau bangun ulang sistem dari sumber yang tepercaya.
- Rotasi kredensial dan token yang mungkin telah terpapar.
- Validasi sistem sebelum mengembalikannya ke produksi.
Patching tidak otomatis menghapus malware atau mekanisme persistensi yang mungkin sudah dipasang sebelumnya. Panduan respons insiden pemerintah juga menekankan pentingnya memeriksa tanda kompromi dan aktivitas tidak wajar.
9. Kesalahan yang Sering Dilakukan Administrator
Hanya memeriksa PHP CLI
Kesalahan ini membuat administrator menganggap server aman karena hasil php -v menunjukkan versi yang benar.
Dampaknya, PHP-FPM, modul Apache, atau runtime dalam container mungkin tetap menggunakan versi rentan.
Solusi: petakan semua runtime yang melayani permintaan web dan verifikasi paket masing-masing.
Menganggap firewall sudah cukup
Firewall dapat mengurangi paparan, tetapi tidak memperbaiki kelemahan internal PHP.
Solusi: gunakan firewall sebagai lapisan pertahanan tambahan, bukan pengganti pembaruan keamanan.
Menonaktifkan upload tanpa memahami aplikasinya
Fitur upload mungkin merupakan bagian penting dari sistem manajemen dokumen, e-learning, portal sekolah, atau aplikasi bisnis.
Solusi: evaluasi mitigasi berdasarkan kebutuhan aplikasi dan lakukan pengujian. Jangan mengubah konfigurasi produksi tanpa memahami dampaknya.
Menganggap backup sebagai pengganti patch
Backup membantu pemulihan setelah insiden, tetapi tidak mencegah eksploitasi pada sistem yang rentan.
Solusi: jalankan strategi backup dan patch management secara bersamaan, lalu uji pemulihan backup secara berkala.
Mengabaikan runtime di container
Memperbarui paket PHP pada host Docker tidak otomatis memperbarui PHP yang dikemas di dalam image aplikasi.
Solusi: inventarisasi image, perbarui base image dan dependensi, bangun ulang image, lakukan pengujian, kemudian deploy sesuai prosedur.
Tidak melakukan pemeriksaan pascapatch
Layanan yang berhasil direstart belum tentu berarti seluruh aplikasi berjalan normal atau seluruh runtime telah diperbaiki.
Solusi: lakukan validasi versi, status layanan, log, fungsi aplikasi, serta pemeriksaan keamanan setelah pembaruan.
10. Best Practice untuk Keamanan Server PHP
Administrator dapat menerapkan pendekatan berikut untuk meningkatkan ketahanan infrastruktur web.
Patch management terjadwal. Inventarisasi runtime dan dependensi, pantau advisori vendor, klasifikasikan risiko, serta tetapkan target waktu perbaikan berdasarkan tingkat keparahan dan paparan.
Least privilege. Jalankan PHP menggunakan akun layanan dengan hak minimum. Batasi izin tulis pada direktori yang benar-benar membutuhkannya dan hindari memberikan hak root kepada proses aplikasi.
Segmentasi jaringan. Pisahkan web server, database, sistem manajemen, dan layanan internal sesuai kebutuhan. Batasi koneksi antarsegmen menggunakan aturan yang jelas.
Manajemen rahasia. Hindari menyimpan kata sandi database, token API, dan kunci privat di direktori publik atau repository yang dapat diakses pengguna.
Monitoring terpusat. Gabungkan log web server, PHP-FPM, sistem operasi, dan firewall. Jika menggunakan Prometheus, Grafana, atau Loki, manfaatkan metrik serta log untuk mendeteksi anomali, bukan sekadar menampilkan status layanan.
Backup dan pengujian pemulihan. Simpan backup terpisah dari server produksi dan lakukan uji restore. Backup yang tidak pernah diuji belum tentu dapat dipulihkan saat insiden terjadi.
Pengujian staging. Uji kompatibilitas aplikasi dan ekstensi PHP di lingkungan staging sebelum deployment produksi, terutama jika pembaruan mengubah perilaku runtime atau dependensi.
Audit berkala. Evaluasi versi PHP, CMS, plugin, ekstensi, image container, konfigurasi layanan, dan hak akses. Audit harus menghasilkan daftar tindakan yang dapat ditindaklanjuti, bukan hanya laporan inventaris.
11. Studi Kasus: Server WordPress pada Ubuntu
Bayangkan sebuah organisasi mengelola website WordPress pada Ubuntu Server menggunakan Nginx, PHP-FPM, dan MariaDB.
Administrator menjalankan:
php -v
Hasilnya menunjukkan PHP CLI sudah menggunakan versi yang dianggap aman. Namun, setelah pemeriksaan lanjutan, ditemukan bahwa konfigurasi Nginx masih meneruskan permintaan ke socket PHP-FPM dari versi lama.
Dalam situasi seperti ini, website tetap berpotensi menggunakan runtime rentan meskipun CLI telah diperbarui.
Pendekatan yang tepat adalah memetakan konfigurasi fastcgi_pass, memeriksa layanan PHP-FPM aktif, memastikan paket perbaikan telah terpasang, lalu menguji aplikasi setelah proses yang relevan dimuat ulang.
Administrator juga memeriksa log akses, error log, perubahan file, serta proses yang berjalan untuk menentukan apakah terdapat indikasi kompromi.
Studi kasus ini menunjukkan bahwa keamanan bukan hanya tentang menjalankan satu perintah pembaruan. Keamanan bergantung pada ketepatan identifikasi komponen, penerapan patch, validasi hasil, dan pemeriksaan kemungkinan insiden.

Kesimpulan
PHP2Shell merupakan peringatan penting bahwa keamanan aplikasi web tidak dapat dipisahkan dari keamanan runtime yang menjalankannya.
CVE-2026-109618 berkaitan dengan penanganan kondisi out-of-memory, sedangkan CVE-2026-109619 berkaitan dengan status internal yang dapat merujuk ke memori yang sudah dibebaskan. Keduanya berpotensi mengakibatkan Remote Code Execution dan memiliki skor CVSS v4.0 sebesar 9,2.
Langkah prioritas bagi administrator adalah menginventarisasi semua runtime PHP, memeriksa advisori resmi, menerapkan pembaruan yang sesuai, memvalidasi layanan setelah patch, dan mengevaluasi kemungkinan kompromi pada sistem yang sebelumnya rentan.
Jangan mengandalkan firewall, backup, atau perubahan satu parameter konfigurasi sebagai pengganti pembaruan keamanan. Gunakan kombinasi patch management, pembatasan hak akses, monitoring, segmentasi jaringan, dan prosedur respons insiden.
Server yang aman bukan sekadar server yang masih dapat diakses. Server yang aman adalah server yang komponennya terpelihara, risikonya dipantau, dan proses pemulihannya telah dipersiapkan.
FAQ — Frequently Asked Questions
1. Apa itu PHP2Shell?
PHP2Shell adalah sebutan untuk dua kerentanan kritis pada runtime PHP, yaitu CVE-2026-109618 dan CVE-2026-109619, yang berpotensi memungkinkan eksekusi kode jarak jauh.
2. Apa perbedaan CVE-2026-109618 dan CVE-2026-109619?
CVE-2026-109618 berkaitan dengan korupsi memori saat penanganan kondisi out-of-memory. CVE-2026-109619 berkaitan dengan status internal yang masih merujuk pada memori yang sudah dibebaskan.
3. Berapa skor CVSS PHP2Shell?
Kedua kerentanan memiliki skor CVSS v4.0 sebesar 9,2 dari 10 dan dikategorikan kritis.
4. Versi PHP apa yang perlu diperbarui?
Rilis perbaikan yang diumumkan adalah PHP 8.5.12, 8.4.27, 8.3.36, dan 8.2.35. Untuk paket distribusi Linux atau runtime yang dikelola vendor, periksa advisori resmi karena perbaikan dapat diberikan melalui mekanisme backport.
5. Apakah WordPress juga berisiko?
WordPress yang berjalan menggunakan runtime PHP terdampak perlu dievaluasi. Memperbarui WordPress saja tidak otomatis memperbaiki kerentanan pada runtime PHP.
6. Apakah firewall dapat mencegah PHP2Shell?
Firewall dapat membatasi paparan jaringan, tetapi tidak memperbaiki kerentanan internal PHP. Pembaruan runtime tetap menjadi tindakan utama.
7. Bagaimana cara memeriksa versi PHP pada Ubuntu Server?
Jalankan php -v untuk memeriksa PHP CLI. Selanjutnya, periksa PHP-FPM, modul Apache, paket yang terpasang, dan runtime di dalam container jika digunakan.
8. Apakah menonaktifkan session upload progress sudah cukup?
Tidak. Penonaktifan fitur tersebut dapat menjadi salah satu mitigasi sesuai advisori, tetapi bukan pengganti patch keamanan yang memperbaiki akar masalah.
9. Apa yang harus dilakukan jika server diduga telah dieksploitasi?
Isolasi sistem sesuai prosedur respons insiden, pertahankan log dan bukti digital, periksa proses serta perubahan file, terapkan perbaikan, dan pulihkan sistem dari sumber tepercaya jika diperlukan. Rotasi kredensial yang berpotensi terpapar.
10. Apakah memperbarui PHP otomatis menghilangkan malware?
Tidak. Pembaruan menutup kerentanan yang diperbaiki, tetapi tidak otomatis menghapus file berbahaya, akun tidak sah, atau mekanisme persistensi yang mungkin sudah terpasang.
Prompt Thumbnail AI 16:9
Format: 16:9 · Resolusi rekomendasi: 1920 × 1080 · Penggunaan: Blog, YouTube, Facebook, LinkedIn
🚨 PHP2Shell: Ancaman Kritis yang Tidak Boleh Diabaikan Administrator Server!
Dua kerentanan PHP, CVE-2026-109618 dan CVE-2026-109619, dapat membuka peluang Remote Code Execution dengan tingkat keparahan CVSS v4.0 sebesar 9,2.
Jangan hanya mengandalkan firewall atau keamanan aplikasi. Pastikan runtime PHP diperbarui, seluruh layanan diperiksa, dan aktivitas server dipantau secara berkala.
🔍 Sudah memeriksa versi PHP pada server produksi Anda?
💬 Tulis pengalaman atau langkah mitigasi yang sudah diterapkan di kolom komentar.
📢 Bagikan artikel ini kepada sysadmin, developer, administrator WordPress, dan tim IT agar semakin banyak pengelola server memahami ancaman PHP2Shell.
📚 Kunjungi artikel teknologi lainnya untuk mempelajari Linux Server, WordPress Security, DevOps, Cloud Computing, Networking, dan Cybersecurity.
Ikuti perkembangan konten terbaru seputar administrasi server dan keamanan infrastruktur IT.
Dukung kami dengan Subscribe & Join Membership channel YouTube | Walid Umar
Akses video pembelajaran eksklusif, materi persiapan UKK (Uji Kompetensi Siswa) dan Penyelesaian Soal LKS ITNSA