Sebuah regex menjatuhkan Cloudflare. 27 menit.
2 Juli 2019, 13:42 UTC: satu aturan baru untuk Web Application Firewall Cloudflare tayang di 180+ kota dalam waktu sekitar dua detik.
2 Juli 2019, 13:42 UTC: satu aturan baru untuk Web Application Firewall Cloudflare tayang di 180+ kota dalam waktu sekitar dua detik. Ini adalah aturan XSS dalam mode simulasi, jadi tidak ada yang diblokir, tetapi masih berjalan di setiap permintaan, dan berakhir di .*(?:.*=.*). PCRE melacak kembali, setiap inti CPU yang melayani HTTP mencapai 100%, dan setiap situs yang di-proxy Cloudflare mengembalikan 502 selama 27 menit; lalu lintas turun 82%. Sakelar pemutus berada di belakang Cloudflare Access, yang berada di belakang Cloudflare. Postmortem, dari tulisan Cloudflare sendiri: pelindung CPU yang dilepas beberapa minggu sebelumnya dalam refaktor yang dimaksudkan untuk menghemat CPU, prosedur yang memungkinkan aturan apa pun melewati staging, mesin tanpa jaminan kompleksitas, 11 penyebab, dan 7 perbaikan. Putusan perbaikan: SHIP IT.
Baca edisi tertulis (Inggris) ↗
Isi video ini
- 13:31–13:42 UTC: PR digabungkan, CI hijau (tanpa pengujian CPU), Quicksilver mendorong aturan ke 180+ kota; aturan WAF melewati tahap DOG → PIG → Canary
- 13:45–14:07: halaman pertama; CPU 100% di seluruh dunia, lalu lintas −82%, 502 di mana-mana; panel kontrol internal berada di belakang Cloudflare Access, yang tidak berfungsi; beberapa kredensial telah kedaluwarsa; bypass yang jarang dilatih
- 14:07–14:09: WAF global dihentikan; lalu lintas dan CPU normal setelah 27 menit; 14:52 WAF kembali tanpa aturan tersebut
- 2 Juli (15:50 UTC) dan 12 Juli: Cloudflare menerbitkan catatan hari yang sama dan postmortem lengkap; pelindung CPU ditambahkan kembali, 3.868 aturan dibaca ulang, peluncuran bertahap, beralih ke mesin regex waktu-linear
Transkrip terjemahan
Diterjemahkan dari narasi asli bahasa Inggris. Audio dan teks tersedia yang dikontrol oleh YouTube.
0:00 Satu ekspresi reguler tayang di setiap server Cloudflare sekaligus, dan selama dua puluh tujuh menit berikutnya, situs-situs di belakangnya adalah halaman 502, yang, untuk sebuah firewall, adalah pengaturan seketat mungkin. 2 Juli 2019, 13:42 UTC. Cloudflare memposting dalam dua jam: bukan serangan, penerapan yang buruk, lalu lintas turun 82 persen. Sepuluh hari kemudian CTO John Graham-Cumming menerbitkan postmortem lengkap, termasuk regex, dan Hacker News memberinya 698 poin,
0:26 yang untuk suatu gangguan adalah tepuk tangan meriah. Bagaimana itu terjadi, mengapa itu mungkin, dan siapa sebenarnya yang disalahkan. Ini adalah The Daily Diff, postmortem. 13:31. Sebuah permintaan pull digabungkan: satu aturan firewall baru terhadap lintas-situs scripting, dalam mode simulasi, jadi tidak memblokir apa pun. 13:37, tes lolos; tidak ada yang mengukur CPU. 13:42, aturan dikirim ke 180 kota dalam dua detik, karena aturan WAF melewati tahap anjing, babi, dan kenari yang didapatkan rilis lain.
0:54 13:45, halaman pertama. 13:49, Hacker News memiliki utas di halaman status, yang masih mengatakan semua sistem beroperasi. Aturan berakhir di dot-star, dot-star, equals, dot-star: apa pun, lalu apa pun, lalu tanda sama dengan. PCRE menebak dengan rakus, gagal, dan melacak kembali melalui setiap pemisahan lainnya. x sama dengan x membutuhkan 23 langkah. Dua puluh x setelah sama dengan: 555.
1:15 Dua puluh x, tidak ada tanda sama dengan: 4.067 langkah untuk menemukan apa pun. Jalankan itu di setiap permintaan dan setiap inti akan seratus persen, tidak melakukan apa-apa, secara menyeluruh. Dua penjaga seharusnya menangkapnya. Batas CPU pada aturan telah dihapus secara tidak sengaja beberapa minggu sebelumnya, dalam refactor yang dimaksudkan untuk membuat WAF menggunakan lebih sedikit CPU. Dan prosedurnya memungkinkan aturan apa pun melewati staging, karena aturan ada untuk menghentikan serangan langsung; yang ini bukan keadaan darurat, dan tetap mendunia.
1:37 14:00, WAF teridentifikasi; tidak ada serangan. 14:02, seseorang mengusulkan penghentian global: satu komponen, mati, di seluruh dunia. Sakelar ada di belakang Cloudflare Access. Cloudflare Access ada di belakang Cloudflare. Beberapa kredensial telah kedaluwarsa karena tidak digunakan, jadi jaringan tercepat di internet menghabiskan lima menit untuk bypass yang tidak pernah dilatih siapa pun. 14:07, matikan. 14:09, lalu lintas normal. git blame: peluncuran dengan satu kecepatan, global; pelindung CPU di-refactor secara tidak sengaja;
2:04 mesin regex tanpa batas atas. Bukan insinyur yang menulis aturan: postmortem mencantumkan sebelas penyebab dan tidak menyebutkan nama siapa pun. Radius ledakan: 27 menit, 82 persen lalu lintas, 100 persen CPU pada setiap inti, di setiap kota. Dasbor dan API berada di balik edge yang sama, sehingga pelanggan bahkan tidak dapat mematikannya. Hacker News, di bawah postmortem: mereka punya satu masalah, menggunakan ekspresi reguler, sekarang mereka punya dua. Lelucon lama. Masih berlaku.
2:28 Putusan, postmortem: SHIP IT. Pelindung CPU kembali, semua 3.868 aturan dibaca secara manual, aturan melewati staging, dan mesin beralih ke yang dengan jaminan waktu-linear, diterbitkan oleh Ken Thompson pada tahun 1968. Senin: tidak ada dot-star dot-star dalam apa pun yang berjalan per permintaan, dan jaga sakelar pemutus agar tidak mengaktifkan hal yang dimatikannya. Kirimkan insiden yang masih belum boleh Anda bicarakan kepada saya, di komentar, atau di daily diff dot dev.
2:53 Dan itulah perbedaannya untuk hari ini. Saya Niko dari Axrisi. Gabungkan secara bertanggung jawab.
Sumber
- John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
- Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
- Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
- Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
- Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
- Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
- Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
- TechCrunch, Jul 2, 2019techcrunch.com



