Pada 21 Oktober 2026, empat proyek yang tidak saling terkait meminta penggunanya update di hari yang sama. PHP merilis perbaikan untuk dua celah remote code execution tanpa autentikasi. Node.js menerbitkan security release berisi sepuluh CVE. Celah auth bypass di TokenGuard Laravel mendapat CVE-nya. Dan litellm 1.107.0 naik ke PyPI membawa pencuri kredensial. Kalau Anda memegang stack web, hampir pasti Anda menyentuh minimal dua dari empat lapisan itu.

Pertanyaan yang layak diajukan bukan "siapa yang sial". Pertanyaannya: kenapa kabar seperti ini datang bergerombol, dan apa yang harus berubah di tim Anda. Jawaban singkat kami: hari persisnya tidak bisa ditebak, tetapi bahwa hari seperti itu akan datang bisa dipastikan. Jadi patch harus jadi pekerjaan terjadwal yang ada pemiliknya, bukan reaksi terhadap berita.

Yang benar-benar rilis pada 21 Oktober

Linimasa empat pengungkapan antara 19 dan 21 Oktober 2026

PHP2Shell (CVE-2026-109618 dan CVE-2026-109619). Keduanya bernilai CVSS v4 9,2 (Recorded Future). Laporan BleepingComputer menyebut akar masalahnya: PHP meninggalkan memori dalam keadaan rusak ketika sebuah request berakhir tidak normal. Celah pertama berujung pada kerusakan memori karena kehabisan memori dan RCE sebagai akun web worker. Celah kedua berupa stale global state yang membuka heap use-after-free tanpa autentikasi, kebocoran memori, dan RCE. Tim PHP sudah mendemonstrasikan eksploitasi pada mod_php, di mana satu request tanpa autentikasi bisa memicu celah itu sebelum kode aplikasi sempat berjalan (BleepingComputer).

Versi yang sudah diperbaiki: PHP 8.5.12, 8.4.27, 8.3.36, dan 8.2.35. PHP 7.4, 8.0, dan 8.1 tidak punya rilis resmi, hanya backport source minimal, dan 8.1 ke bawah memang sudah tidak menerima update. Kalau hosting Anda masih memakai salah satunya, tanyakan langsung apakah build mereka membawa backport.

Node.js. Security release resminya memperbaiki sepuluh CVE di versi 26.12.1, 24.22.1, dan 22.23.4. Empat di antaranya berstatus High. Yang paling relevan untuk kode server adalah CVE-2026-111497, out-of-bounds write di dekoder Brotli bawaan yang bisa dipicu lewat input cacat ke node:zlib, dengan akibat crash, kebocoran memori, atau RCE. Dua temuan High lainnya soal pengecekan hostname TLS yang membaca alamat IP berbeda dari resolver OS (angka fullwidth dan nol di depan yang dibaca sebagai oktal). Versi yang sudah end-of-life selalu ikut terdampak dan tidak mendapat perbaikan.

Laravel. Advisory GHSA-f9x3-7vq9-cph6 terbit 19 Oktober, dan catatan CVE-nya (CVE-2026-114509) terbit 21 Oktober. Pada TokenGuard bawaan dengan MySQL atau MariaDB, kredensial non-string yang dirancang khusus bisa cocok dengan data pengguna yang salah, sehingga penyerang bisa bertindak sebagai pengguna lain tanpa token milik mereka. Versi yang sudah ditambal adalah 12.68.0 dan 13.29.0. Advisory tidak menyebut workaround. Halaman Mend mencantumkan perbaikan 11.x (11.56.1) yang tidak muncul di advisory, jadi cocokkan branch Anda dengan advisory sebelum mengandalkannya.

litellm. Menurut catatan insiden litellm sendiri, versi 1.107.0 aktif di PyPI dari 11:39:51 sampai 13:23 UTC, dan tag Docker yang terdampak dicabut atau diarahkan ulang paling lambat 14:20 UTC. Rilis itu keluar lewat pipeline yang asli setelah penyerang memakai kredensial developer yang dicuri untuk mengubah workflow rilis, dan tag sumber di GitHub tidak memuat berkas berbahaya. Detail terakhir itu yang paling tidak enak: membaca repo tidak akan memperingatkan Anda.

Kenapa datangnya barengan?

Empat celah di empat lapisan dan siapa pemegangnya

Kami hati-hati di sini. Sumber-sumbernya tidak mengatakan keempat kejadian ini saling berhubungan, dan kami juga tidak mengklaim begitu. Yang tercatat adalah tiga mekanisme yang membuat gerombolan seperti ini wajar terjadi:

  1. Tanggal rilis yang dikoordinasikan. PHP mengumumkan rilis out-of-band pada 20 Oktober dan sudah punya jadwal. Wiz melaporkan celahnya secara privat pada 24 Agustus, jadi pengelola punya berminggu-minggu untuk menyiapkan tanggal. Proyek lain juga memilih tanggal, dan pekan yang padat memperbesar peluang bertabrakan.
  2. Kebocoran memperpendek jendela. Arsip berisi detail teknis pertama kali masuk VirusTotal pukul 02:29 UTC pada 21 Oktober, sebelum patch. Patchstack melaporkan insiden eksploitasi aktif dari mitra hosting pukul 07:34 UTC, dan CTO Cloudflare menyebut sudah melihat serangan awal serta memasang aturan WAF sementara. Patch baru turun pukul 13:52 UTC. Jarak antara "detail sudah beredar" dan "perbaikan tersedia" sekitar sebelas jam, dan laporan eksploitasi aktif masuk di rentang itu.
  3. Lapisan berbeda, tenggat sama. Lihat peta di atas. Satu aplikasi produksi bisa bergantung pada server PHP milik hosting, framework milik tim aplikasi, runtime Node.js milik DevOps, dan paket pip milik siapa pun yang menulis requirements.txt. Empat pemilik, satu hari. Kalau tidak ada yang memegang seluruh daftarnya, pemilik paling lambat yang menentukan paparan Anda.
Angka bersumber dari pengungkapan 21 Oktober

Soal skala: VirusTotal menghitung sekitar 5,1 juta alamat IP yang menjalankan PHP per 21 Oktober, dan sekitar 1,1 juta di antaranya menampilkan versinya. Recorded Future mencatat bahwa laporan publik belum menetapkan berapa banyak kompromi yang benar-benar berhasil. Anggap angka itu ukuran audiensnya, bukan ukuran kerusakannya.

Yang dikerjakan, berurutan

Empat langkah cek dan patch setelah pengungkapan seperti ini
  1. Inventaris dulu. Jalankan `php -v`, `node -v`, `composer show laravel/framework`, dan `pip show litellm` di setiap environment, termasuk staging dan image container yang Anda bangun kuartal lalu. Periksa proses yang sedang berjalan, bukan hanya berkas di disk.
  2. Naik ke versi yang sudah diperbaiki. Pakai versi di atas. Untuk PHP ada langkah sementara seperti `session.upload_progress.enabled=0` dan `post_max_size` yang rendah, tetapi panduan PHP sendiri menyebut tidak ada mitigasi yang sepenuhnya menahan serangan, dan patch adalah satu-satunya perbaikan permanen.
  3. Restart dan verifikasi ulang. Binary yang sudah ditambal tidak berguna kalau PHP-FPM atau worker Node Anda masih menjalankan yang lama.
  4. Kalau litellm 1.107.0 pernah terpasang, jangan jalankan pip dulu. Menurut panduan litellm, setiap Python yang menyala akan menjalankan ulang hook berbahaya itu. Hapus `cook.pth`, `cook.py`, dan `sitecustomize.py`, matikan daemon yang memegang `/tmp/remote_code_loader.lock`, pin ke versi sebelumnya seperti 1.106.2, lalu bangun ulang environment dari nol. Anggap semua yang bisa dijangkau host itu sudah terpapar dan rotasi: role cloud, API key provider, password database, secret di environment. Menemukan berkas itu memastikan Anda terpapar, tetapi tidak menemukannya belum membuktikan Anda bersih.

Pilih vendor yang mau bercerita

Ini bagian yang paling kami pedulikan. Dari empat kejadian, catatan publik yang paling berguna justru milik litellm, padahal itu catatan insiden yang tidak diinginkan vendornya. Isinya waktu sampai hitungan detik, nama tag yang terdampak, daftar indikator, apa yang harus dirotasi, dan pengakuan terbuka bahwa versi awal tulisannya memuat asumsi yang kemudian terbukti kurang tepat, lengkap dengan rujukan ke catatan yang baku. PHP memberi peringatan sehari sebelumnya. Node.js mencantumkan setiap CVE beserta tingkat keparahannya dan perbaikan sebelumnya yang ternyata belum tuntas.

Itu ukuran yang layak dipakai saat memilih vendor, agency, atau penyedia hosting. Tanyakan: bagaimana Anda tahu ada celah di dependency, siapa yang wajib menambal, seberapa cepat pelanggan diberi tahu, dan bisakah saya melihat catatan insiden yang lalu? Vendor yang tidak bisa menjawabnya dalam satu paragraf tidak akan menjawab dengan baik pukul dua pagi.

Kalau Anda ingin ada yang ikut memeriksa stack Anda, chat kami lewat WhatsApp di +62 823 1499 5005 atau tulis ke bisnis@xetup.id. Kirim keluaran empat perintah versi tadi, dan kami sampaikan apa yang kami lihat.