+− THE DAILY DIFFdev & AI news
SHIP IT

正規表現がCloudflareをダウンさせた。27分間。

2019年7月2日13時42分(UTC):CloudflareのWebアプリケーションファイアウォール(WAF)に新しいルールが180以上の都市で約2秒で適用されました。

2019年7月2日13時42分(UTC):CloudflareのWebアプリケーションファイアウォール(WAF)に新しいルールが180以上の都市で約2秒で適用されました。これはシミュレートモードのXSSルールであり、何もブロックしませんが、すべてのリクエストで実行され、末尾は.*(?:.*=.*)となっています。PCREはバックトラックし、HTTPを処理するすべてのCPUコアが100%に達し、Cloudflareを介したすべてのサイトが27分間502を返し、トラフィックは82%減少しました。キルスイッチはCloudflare Accessの背後にあり、Cloudflare AccessはCloudflareの背後にあります。Cloudflare自身の報告書からの事後分析:数週間前にCPUを節約するためのリファクタリングで削除されたCPUガード、どのルールもステージングをスキップできるようにする手順、複雑性の保証がないエンジン、11の原因と7つの修正。修正に関する評決:SHIP IT。

書面版を読む(英語) ↗

この動画の要点

  • 13:31–13:42 UTC:PRがマージされ、CIはグリーン(CPUテストなし)、Quicksilverがルールを180以上の都市にプッシュ。WAFルールはDOG → PIG → Canaryのステージをスキップ。
  • 13:45–14:07:最初のページ、CPUは世界中で100%、トラフィックは82%減、至る所で502。内部コントロールパネルはCloudflare Accessの背後にあり、ダウンしている。一部の認証情報が期限切れ。めったに訓練されないバイパス。
  • 14:07–14:09:グローバルWAF終了。27分後にトラフィックとCPUが正常化。14:52にWAFがルールなしで復旧。
  • 7月2日(15:50 UTC)と7月12日:Cloudflareが同日のメモと完全な事後分析を公開。CPUガードを再追加、3,868のルールを再確認、段階的な展開、線形時間正規表現エンジンへの移行。

翻訳されたトランスクリプト

オリジナルの英語ナレーションから翻訳されています。利用可能なオーディオとキャプションはYouTubeによって管理されています。

0:00 1つの正規表現がすべてのCloudflareサーバーに一斉に適用され、 その後の27分間、その背後にあるサイトは502ページとなり、 これはファイアウォールにとって可能な限り最も厳しい設定です。 2019年7月2日、13時42分UTC。 Cloudflareは2時間以内に投稿:攻撃ではなく、誤ったデプロイメントです。 トラフィックは82パーセント減少。 10日後、CTOのジョン・グラハム・カミングは完全な事後分析を公開し、 正規表現も含まれ、Hacker Newsは698ポイントを与えました。

0:26 これは停止としてはスタンディングオベーションです。 どのように発生したのか、なぜ可能だったのか、そして実際に誰が非難されるべきか。 The Daily Diff、事後分析です。 13時31分。プルリクエストがマージされました。クロスサイトスクリプティングに対する新しいファイアウォールルールが1つ、 シミュレートモードなので何もブロックしません。 13時37分、テストはパスしました。CPUを測定するテストはありませんでした。 13時42分、ルールは2秒で180都市に適用されました。 WAFルールは、他のリリースが行う犬、豚、カナリアのステージをスキップするためです。

0:54 13時45分、最初のページが表示されました。 13時49分、Hacker Newsでステータスページに関するスレッドが立ち上がりました。 これはまだすべてのシステムが稼働中と表示されていました。 ルールは「ドットスター、ドットスター、イコール、ドットスター」で終わります。つまり、何でもあり、 次に何でもあり、その次に等号です。 PCREは貪欲に推測し、失敗し、他のすべての分割をバックトラックします。 「xイコールx」は23ステップかかります。 イコールの後に20個のx:555。

1:15 20個のx、イコール記号なし:何も見つけずに4,067ステップ。 それをすべてのリクエストで実行すると、すべてのコアが100パーセントになり、 何もせずに、徹底的に。 2つのガードがそれを捉えるべきでした。 ルールに対するCPU制限は数週間前、誤って削除されていました。 WAFのCPU使用率を減らすためのリファクタリングで。 そして、その手順はどのルールもステージングをスキップすることを許します。なぜなら、ルールはライブ攻撃を阻止するために存在するためです。 これは緊急事態ではなかったのに、それでもグローバルに展開されました。

1:37 14時00分、WAFが特定されました。攻撃ではありません。 14時02分、誰かがグローバル終了を提案しました。1つのコンポーネントを、 世界中でオフにします。スイッチはCloudflare Accessの背後にあります。 Cloudflare AccessはCloudflareの背後にあります。 一部の認証情報は未使用のため期限切れになっていたため、インターネット上で最速のネットワークが、 誰も訓練していないバイパスに5分を費やしました。 14時07分、キル。14時09分、トラフィックは正常化。 git blame:展開は単一速度でグローバル。CPUガードは誤ってリファクタリングで削除。上限のない正規表現エンジン。

2:04 事故; 上限のない正規表現エンジン。 ルールを書いたエンジニアではありません。事後分析では11の原因が挙げられており、 誰も名前を挙げられていません。影響範囲:27分、トラフィックの82パーセント、 すべての都市のすべてのコアでCPUが100パーセント。 ダッシュボードとAPIは同じエッジの背後にあるため、顧客は切り替えることさえできません。 Hacker News、事後分析の下で:彼らには1つの問題がありました。 正規表現を使用し、今では2つの問題があります。 古いジョークです。まだコンパイルされます。

2:28 評決、事後分析:SHIP IT。 CPUガードが戻され、3,868個のルールすべてが手動で読み取られ、 ルールはステージングを通過し、エンジンは線形時間保証のあるものに移行します。 1968年にケン・トンプソンが発表したものです。 月曜日:リクエストごとに実行されるものにドットスター・ドットスターは使用しない。 そして、キルスイッチをそれが殺すものから離しておくこと。 まだ話すことを許されていないインシデントを教えてください。 コメント欄で、またはthedailydiff.devで。

2:53 そして、今日のdiffはこれで終わりです。 AxrisiのNikoです。 責任を持ってマージしてください。

情報源

  1. John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
  2. Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
  3. Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
  4. Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
  5. Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
  6. Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
  7. Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
  8. TechCrunch, Jul 2, 2019techcrunch.com

関連動画

postmortem · ja · 2026/09/19

Google Cloudが空白フィールドでクラッシュ。3時間。

空白のフィールドを含むポリシ行がヌルポインタにヒットし、Google Cloudはすべてのリージョンで一度にクラッシュしました。その後、Cloudflareもダウンしました。2025年6月12日、17:49 UTC: すべてのGoogle Cloud APIリクエストを承認するバイナリであるService Controlが、「意図しない空白フィールド」を含むクォータポリシの変更を読み込み、2週間前

2:57 ↗
postmortem · ja · 2026/09/16

Facebookがインターネットから消滅。6時間。

Facebookはインターネットから自社のアドレスを削除し、エンジニアがそれを元に戻しに到着しても、バッジリーダーもダウンしていました。なぜなら、それらはFacebook上で動作していたからです。2021年10月4日、15:40 UTC:日常的なバックボーンメンテナンスコマンドが、Facebookのデータセンター間のすべてのリンクをダウンさせました。それをブロックするために構築された監査ツールには

3:01 ↗
postmortem · ja · 2026/09/25

1ミリ秒のバグで英国の航空交通が6時間停止

9月8日火曜日の午前10時、NATSの国家空域システム(NAS)内で通常のスコークコード要求が、値の更新途中に優先度の高いメッセージによって中断された。露出ウィンドウは約1ミリ秒。要求は誤ったまま再開され、フライトデータが破損し、午後7時30分までに2,000便以上の英国発着便が遅延、欠航、または目的地変更となった。

3:06 ↗
postmortem · ja · 2026/09/22

再起動でテルストラは2006年に逆戻り。900万台の電話が影響。

メルボルンのエンジニアが午前2時50分にタイミングシャーシの電源を入れ直したところ、朝食の時間までにはオーストラリア最大のモバイルネットワークが「今は2006年11月である」と認識する事態に。2026年7月8日、テルストラのNTPシャーシ内のGPSカードが電源修理中に再起動し、ファームウェアにはGPS週数ロールオーバーのアップデートが一度も適用されていなかったため、古いエポックを選択し、1,024

3:15 ↗