Analisis pasca-insiden gangguan Cloudflare pada 18 November 2025
(blog.cloudflare.com)- Pada 18 November 2025 pukul 11:20 (UTC), fungsi inti pengiriman trafik di jaringan Cloudflare terhenti, sehingga pengguna di seluruh dunia melihat halaman error
- Penyebabnya adalah file
featurepada sistem Bot Management membesar secara tidak normal akibat perubahan izin database, dan tidak terkait dengan serangan siber - Kenaikan ukuran file ini membuat perangkat lunak routing trafik gagal setelah melampaui batasnya, sehingga error HTTP 5xx terjadi secara besar-besaran
- Sekitar pukul 14:30, distribusi file bermasalah dihentikan dan diganti dengan versi sebelumnya yang normal sehingga trafik inti pulih, lalu semua layanan kembali normal pada pukul 17:06
- Cloudflare menilai insiden ini sebagai gangguan terburuk sejak 2019, dan mendorong langkah pencegahan seperti penguatan validasi file konfigurasi serta penerapan kill switch global
Ringkasan gangguan
- Sekitar pukul 11:20, terjadi kegagalan pengiriman trafik inti di jaringan Cloudflare, dan pengguna melihat halaman error internal Cloudflare
- Bukan disebabkan oleh serangan siber atau tindakan jahat, melainkan langsung dipicu oleh perubahan izin pada sistem database
- Perubahan itu membuat ukuran
feature fileyang digunakan sistem Bot Management meningkat dua kali lipat, lalu didistribusikan ke seluruh jaringan - Saat perangkat lunak routing trafik membaca file tersebut, batas ukuran file terlampaui, sehingga terjadi error sistem
- Awalnya sempat disangka sebagai serangan DDoS berskala besar, tetapi setelah penyebabnya diketahui, pemulihan dilakukan dengan mengganti ke file normal sebelumnya
Perjalanan insiden dan dampaknya
- Sebelum 11:20, rasio error 5xx masih berada di level normal, tetapi setelah itu error melonjak akibat distribusi
feature fileyang salah - Pada sebagian node klaster database ClickHouse, hasil query yang salah dihasilkan tiap 5 menit, sehingga file normal dan file abnormal didistribusikan secara bergantian, membuat sistem berulang kali pulih lalu gagal lagi
- Mulai 14:30, pembuatan file bermasalah dihentikan dan file normal disisipkan secara manual, lalu pemulihan dilakukan dengan me-restart core proxy
- Pada 17:06, semua layanan kembali normal
| Layanan | Dampak |
|---|---|
| Core CDN dan layanan keamanan | Terjadi error HTTP 5xx |
| Turnstile | Gagal dimuat, tidak bisa login |
| Workers KV | Error 5xx melonjak akibat kegagalan gateway |
| Dashboard | Tidak bisa login karena gangguan Turnstile |
| Email Security | Akurasi deteksi spam sementara menurun, sebagian pemindahan otomatis gagal |
| Access | Banyak kegagalan autentikasi, tetapi sesi yang sudah ada tetap dipertahankan |
- Selama periode gangguan, latensi respons CDN meningkat, yang disebabkan oleh lonjakan penggunaan CPU pada sistem debugging
Penyebab gangguan: sistem Bot Management
- Modul Bot Management milik Cloudflare menggunakan model machine learning untuk menghasilkan skor bot per permintaan
- File konfigurasi
featureyang dipakai sebagai input model didistribusikan ke seluruh jaringan setiap beberapa menit untuk merespons ancaman terbaru - Akibat perubahan perilaku query ClickHouse, banyak baris
featureduplikat ikut masuk, sehingga ukuran file membesar - Hal ini memicu error pada modul Bot Management dan menyebabkan respons HTTP 5xx dikembalikan, serta berdampak pada Workers KV dan Access
- Pada mesin proxy baru FL2, terjadi error 5xx; sedangkan pada versi lama FL, skor bot disetel ke 0 sehingga false positive meningkat
Perubahan perilaku query ClickHouse
- Pada 11:05, perubahan izin akses database di ClickHouse mulai didistribusikan
- Sebelumnya, hanya metadata dari database
defaultyang bisa diakses, tetapi setelah perubahan, metadata dari databaser0juga ikut terekspos - Query pembuat
feature filemilik Bot Management dijalankan tanpa filter nama database, sehingga pada akhirnya kolom duplikat ikut dikembalikan - Akibatnya, jumlah baris dalam
feature filemeningkat lebih dari dua kali lipat dan melampaui batas sistem
Pra-alokasi memori dan system panic
- Modul Bot Management melakukan pra-alokasi memori dengan batas maksimum 200 feature machine learning
- Saat file yang salah berisi lebih dari 200 feature, panic terjadi pada kode Rust, dengan keluaran error
thread fl2_worker_thread panicked: called Result::unwrap() on an Err value - Hal ini menyebabkan lonjakan besar error HTTP 5xx
Dampak lain dan proses pemulihan
- Workers KV dan Access bergantung pada core proxy, sehingga dampak gangguan meluas
- Pada 13:04, Workers KV dipatch agar dapat melewati proxy, sehingga rasio error menurun
- Dashboard tidak bisa login karena bergantung pada Turnstile dan Workers KV
- Terjadi penurunan ketersediaan dua kali, pada 11:30–13:10 dan 14:40–15:30
- Latensi meningkat akibat backlog dan permintaan retry, lalu pulih sekitar pukul 15:30
- Setelah 14:30, sebagian besar layanan kembali normal, dan pada 17:06 pemulihan selesai sepenuhnya
Langkah pencegahan agar tidak terulang
- Memperkuat validasi input untuk file konfigurasi yang dihasilkan Cloudflare
- Memperluas kill switch fitur global
- Mencegah kehabisan sumber daya sistem akibat pelaporan error
- Meninjau kondisi error di seluruh modul core proxy
Ringkasan timeline (UTC)
| Waktu | Status | Penjelasan |
|---|---|---|
| 11:05 | Normal | Perubahan kontrol akses database mulai didistribusikan |
| 11:28 | Dampak mulai terasa | Error pertama muncul pada trafik pelanggan |
| 11:32–13:05 | Investigasi berlangsung | Analisis penyebab error Workers KV, upaya mitigasi |
| 13:05 | Dampak berkurang | Bypass diterapkan untuk Workers KV dan Access |
| 13:37 | Fokus pada pemulihan | Persiapan rollback file konfigurasi Bot Management |
| 14:24 | Distribusi file bermasalah dihentikan | Pengujian file normal selesai |
| 14:30 | Dampak utama teratasi | File normal didistribusikan secara global, pemulihan layanan dimulai |
| 17:06 | Pulih sepenuhnya | Semua layanan kembali normal |
Kesimpulan
- Gangguan ini terjadi akibat interaksi antara logika pembuatan file konfigurasi Bot Management dan perubahan izin database
- Cloudflare menilai ini sebagai gangguan jaringan paling serius sejak 2019
- Ke depan, perusahaan akan mendorong perbaikan struktural untuk memperkuat ketahanan sistem dan memperkuat mekanisme pertahanan otomatis
8 komentar
Gangguan yang terkait dengan file konfigurasi memang bisa terjadi di mana saja.
Saat Cloudflare tidak berfungsi dan berbagai layanan ikut terhenti, rasanya seperti neraka..
Dokumen analisis penyebabnya ternyata dirilis cukup cepat ya, wow
Ngomong-ngomong, ternyata penulis artikel ini adalah CEO.
Opini Hacker News
Ini adalah kisah kecelakaan .unwrap() bernilai ratusan juta dolar
Memanggil
.unwrap()di jalur infrastruktur inti internet pada dasarnya sama dengan menyatakan, “ini tidak akan pernah gagal; kalau gagal, langsung matikan thread-nya”Kompiler Rust memaksa kemungkinan kegagalan dinyatakan secara eksplisit, tetapi mereka memilih panic alih-alih menanganinya dengan anggun
Menurut saya ini contoh antipola klasik “parse, don’t validate”
.unwrap(). Mungkin karena terlalu sering muncul di kode contohDalam kode produksi nyata,
.unwrap()atau.expect()seharusnya ditinjau seperti panicJika memakai
.unwrap()di kode produksi, seharusnya wajib ada komentar “INFALLIBILITY”, dan ini bisa dipaksa denganclippy::unwrap_usedBukan sekadar karena
.unwrap(), tetapi juga karena kueri tidak membedakan database sehingga payload membesar, dan ClickHouse mengekspos lebih banyak DBDaripada menyimpulkan “ini gara-gara unwrap”, saya rasa yang lebih penting adalah perbaikan desain seperti global kill switch atau pencegahan agar sumber daya sistem tidak kewalahan
Di layer FL2, panic dari tiap komponen memang harus ditangkap, tetapi fail-open tidak selalu lebih baik
Perlu ditambahkan logika agar keputusan apakah panic akan ditangkap dan ditangani dibuat secara eksplisit di level FL2
Kalau ini sistem yang di-shard, saya juga penasaran kenapa tidak ada rollout bertahap dan monitoring
!dan unwrap eksplisit?Saya hampir tidak pernah memakai unwrap implisit. Bahkan untuk nilai yang dijamin ada pun saya selalu menanganinya secara eksplisit
Misalnya saya mendefinisikan
@IBOutlet weak var someView?alih-alih@IBOutlet weak var someView!Ini semacam pendekatan belt & suspenders
Sangat mengesankan mereka merilis post mortem kurang dari 24 jam setelah insiden
Di sebagian besar perusahaan besar, publikasi kode seperti ini nyaris mustahil karena harus melewati peninjauan berbagai stakeholder
Saat membaca penjelasan Cloudflare tentang gangguan ini, saya bertanya-tanya, “kenapa pemulihannya butuh waktu selama itu?”
Saya paham penyebab gangguannya, tetapi kalau sebagian besar jaringan down, bukankah membalikkan perubahan konfigurasi terbaru seharusnya jadi prioritas pertama?
Tentu setelah kejadian semuanya terlihat jelas, tetapi memulai investigasi hanya dalam 7 menit tetap mengesankan
Kejadian ini terasa mirip dengan insiden CrowdStrike
File konfigurasi yang dihasilkan otomatis merusak perangkat lunak, lalu menyebar ke seluruh jaringan
Saya paham perlunya deployment cepat, tetapi kejadian ini menunjukkan tidak adanya rollout bertahap dan strategi rollback
Jika melihat rencana perbaikan yang diumumkan Cloudflare, ada
dan lain-lain
Namun canary deployment atau deployment konfigurasi bertahap justru tidak disebut
Global switch bisa berbahaya, dan satu bug saja bisa menghentikan seluruh sistem
Saya juga mempertanyakan kenapa ClickHouse dipakai sebagai feature flag store. Bahkan di dokumentasi deduplication ClickHouse pun ada faktor risikonya
Kalau ada pemetaan dependensi antar layanan, pelacakan akar masalah akan jauh lebih mudah
Deployment kode dilakukan dengan hati-hati, tetapi deployment konfigurasi tidak. Perlu ada kesadaran bahwa konfigurasi juga adalah kode
Bagian bahwa halaman status ikut down sehingga sempat disangka serangan itu menarik
Katanya infrastruktur itu sepenuhnya terpisah dari Cloudflare, tetapi tidak ada penjelasan kenapa ikut mati
Saya mengintegrasikan Turnstile dengan strategi fail-open, dan itu membantu dalam gangguan ini
Jika JS tidak termuat, pengiriman tetap diizinkan dengan token dummy, dan bahkan jika verifikasi backend gagal, saya juga menanganinya secara fail-open
Sebagian pengguna memang tetap terblokir, tetapi dampak keseluruhan berkurang
Ini pendekatan yang dimungkinkan karena ada sarana mitigasi bot lain
Namun ini tampaknya hanya akan berhasil kalau bukan serangan yang ditargetkan
Saya heran kenapa
.unwrap()diizinkan di kode CloudflarePaling tidak mereka seharusnya memakai
expect("ini tidak akan pernah terjadi")Filosofi memperlakukan error sebagai nilai justru dibuat untuk mencegah masalah seperti ini, dan itu akan membuat diagnosis jauh lebih mudah
Di kode yang melibatkan network call, ada terlalu banyak kemungkinan gagal
Saat pengembangan saya memakai
.unwrap(), tetapi di produksi saya kadang tetap menyisakan expect(). Karena kadang memang tidak ada lagi cara untuk melanjutkanPelajaran sebenarnya adalah terlalu banyak fungsi bergantung pada segelintir pemain
Struktur winner-takes-all makin menguat dan resiliensi sistem menurun
Tentu posisi itu mereka raih karena kemampuan mereka, tetapi rasanya berlebihan jika berharap internet akan selalu “berfungsi normal”
Pernyataan “kalau pakai Rust pasti aman” itu berlebihan
Bahasa apa pun, kalau dipakai dengan salah, sama saja seperti mengarahkan moncong senjata ke kaki sendiri
Bahkan di perusahaan sekelas Cloudflare pun mereka pakai
.unwrap()ya, duh. Gimana bisa kode itu diterapkan ke production?Sepertinya masalahnya bukan pada unwrap
Masalah mendasarnya adalah kueri yang salah.
Tapi saya juga pikir melewatkan verifikasi masalah dengan
unwrapitu juga masalah.Kalau penanganan error dilakukan meskipun masalah terjadi secara internal, trafik mungkin tidak akan sampai down.