1. Tindakan pertama setelah tahu ada kerentanan kritis
Yang pertama saya lakukan adalah memeriksa apakah sistem saya terdampak, bukan langsung panik mengubah konfigurasi. Caranya dengan menjalankan "php-v" dan mengecek paket di server. Hal ini penting karena menjalankan "aptupgrade"tidak otomatis memperbaiki kerentanannya, dan distribusi Linux kadang memasang perbaikan (backport) tanpa mengubah nomor versi PHP menjadi versi rilis resmi yang sudah ditambal. Jadi, selain melihat nomor versi, saya juga mengecek advisory dari distribusi atau hosting yang dipakai. Jika server dikelola pihak lain, misalnya shared hosting, langkah yang disarankan adalah meminta penyedia hosting segera memasang pembaruan.
2. Prioritas: update PHP, pengujian keamanan, atau konfigurasi server?
Untuk kasus PHP2Shell, saya memprioritaskan update PHP. Alasannya, PHP menyatakan bahwa patch adalah satu-satunya perbaikan yang lengkap dan tidak ada perubahan konfigurasi yang sepenuhnya menutup celah ini; setiap mitigasi sementara hanya mengurangi satu jalur serangan. Selain itu, pengujian keamanan pada kode aplikasi tidak akan menemukan masalah ini karena sumbernya bukan kode kita. Seperti kata seorang peneliti, masalah ini tidak selesai hanya dengan memperbarui WordPress atau plugin karena kerentanannya ada di PHP.
Meski begitu, ketiganya tetap saling melengkapi. Setelah update, pengujian memastikan aplikasi masih berjalan normal. Konfigurasi server yang ketat, misalnya hak akses minimum dan user PHP yang tidak punya akses root, membatasi kerusakan jika suatu saat ada celah lain yang berhasil ditembus.
Satu hal yang sering terlewat: server baru memakai versi yang sudah ditambal setelah process manager PHP di-restart. Jadi update tanpa me-restart PHP-FPM atau Apache sama saja belum ditambal.
3. Jika update berisiko mengganggu aplikasi yang sedang berjalan
Pendekatan saya:
- Uji dulu di staging. Buat salinan lingkungan produksi dengan versi PHP yang baru, lalu jalankan pengujian fungsional pada fitur utama. Karena update ini masih dalam satu branch (misalnya 8.3.35 ke 8.3.36), risiko kodenya rusak biasanya kecil.
- Siapkan rollback. Ambil backup database dan snapshot server sebelum update supaya bisa kembali dengan cepat jika ada masalah.
- Pasang mitigasi sementara selama menunggu. Mitigasi konfigurasi utama dari advisory adalah menetapkan "memory_limit=-1" secara administratif lalu me-restart semua worker PHP, sambil memastikan tidak ada pool, direktori, atau aplikasi yang mengembalikan batas memori terbatas. Tapi ini ada konsekuensinya: tanpa batas memori, satu request bisa memakan seluruh memori server, jadi batas memori sebaiknya diatur lewat container atau cgroup.
- Masalah terbesar ada di versi lama. PHP 8.1 ke bawah tidak mendapat perbaikan resmi. Jika aplikasi masih memakai PHP 7.x atau 8.1, migrasi ke versi yang masih didukung harus segera dijadwalkan, bukan ditunda terus.
Jika server sudah sempat terekspos dalam kondisi belum ditambal, saya juga akan mengganti kredensial, token, dan key yang mungkin tersimpan di memori worker PHP. Salah satu tanda serangan yang bisa dipantau adalah proses anak yang tidak wajar yang muncul langsung dari proses PHP.
4. Pengalaman di proyek kuliah
Saat magang, saya pernah terlibat dalam proses hosting aplikasi berbasis PHP. Salah satu langkah pengamanan yang saya terapkan adalah memastikan file .env tidak diletakkan di folder publik (document root) server. File .env berisi informasi sensitif seperti kredensial database, API key, dan konfigurasi aplikasi lainnya. Jika file ini berada di folder publik, siapa pun bisa membukanya hanya dengan menambahkan /.env di belakang alamat situs, misalnya namadomain.com/.env. Dengan menempatkannya di luar folder publik, file tersebut tetap bisa dibaca oleh aplikasi, tetapi tidak bisa diakses langsung melalui browser.
Pelajaran yang saya dapat:
- Kesalahan kecil saat deployment bisa berakibat besar. Aplikasi bisa berjalan normal di lokal, tetapi struktur folder yang salah saat hosting dapat membocorkan seluruh kredensial tanpa perlu peretasan yang rumit.
- Keamanan perlu dicek setelah aplikasi online. Setelah hosting, ada baiknya mencoba sendiri mengakses URL seperti /.env untuk memastikan file tersebut memang tidak bisa dibuka publik.
- Satu lapis pengamanan tidak cukup. Kasus PHP2Shell menunjukkan hal ini dengan jelas. Menyembunyikan .env dari akses URL memang melindungi dari kebocoran sederhana, tetapi jika penyerang berhasil mengeksekusi kode di server melalui celah seperti PHP2Shell, file tersebut tetap bisa dibaca dari dalam server. Karena itu, langkah seperti ini perlu didukung dengan pembaruan PHP secara rutin, pembatasan hak akses, dan penggantian kredensial jika server diduga pernah terekspos.
Kesimpulan
Dari kasus PHP2Shell, saya belajar bahwa keamanan tidak cukup hanya menulis kode yang aman. Kita juga perlu tahu versi PHP yang dipakai, rutin memantau advisory resmi, dan punya prosedur update yang teruji. Kasus ini juga menunjukkan bahwa jarak waktu antara pengumuman CVE dan eksploitasi aktif sekarang sangat singkat, jadi kesiapan sebelum ada insiden sama pentingnya dengan respons setelahnya. i