
2025/12/06 0:35
Cloudflare outage on December 5, 2025
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## Summary Cloudflare の 2025 年 12 月 5 日の障害は約 25 分間続きました。 08:47 UTC にネットワークセグメントが故障を開始し、08:50 UTC に完全な影響に達し、09:12 UTC に問題が解決しました。 全 HTTP トラフィックの約 28 %(古い FL1 プロキシと Managed Rulesets を使用している顧客)がエラーを経験しましたが、中国ネットワークトラフィックは影響を受けませんでした。 障害は、CVE‑2025‑55182(React Server Components の脆弱性)を修正するために意図された二つの急速なコード変更によって引き起こされました。 まず、WAF バッファサイズが 128 KB から 1 MB に増加し、段階的に展開されました。 次に、グローバル設定更新で内部 WAF テストツールが無効化され、FL1 のルールモジュールで Lua エラー(`attempt to index field 'execute' (a nil value)`)を引き起こし、HTTP 500 応答を生成しました。 このバグは何年も存在していましたが、「execute」ルールのキースイッチが execute フィールドが欠落した際に処理するコードを回避したために露呈しました。 同様で大規模なインシデントが 2025 年 11 月 18 日にも発生しました。 Cloudflare はロールアウト手順の強化、バージョン管理制御の追加、ブレイクグラスアクセスの簡素化、およびフェイルオープンエラーハンドリングの実装に取り組んでいます。詳細なレジリエンシー計画は来週公開される予定であり、新しい緩和策が稼働するまでネットワーク変更は停止されたままです。 この出来事は、大規模 CDN 運用における厳格な変更管理の必要性を強調し、迅速展開保護策に関する業界全体での見直しを促す可能性があります。
本文
2025‑12‑05 – 5分読了
2025年12月5日08:47(UTC)に、Cloudflareのネットワーク内で大規模な障害が発生しました。本件は09:12に解決し、全サービスが完全復旧しました(総影響時間約25 分)。
被害を受けた顧客は、Cloudflare が提供する HTTP トラフィックの約28 %であり、個別の顧客が影響を受けるには複数要因が重なっていました。
今回の障害はサイバー攻撃や悪意ある活動によるものではありません。React Server Components で先週公開された業界全体の脆弱性に対処するため、ボディパースロジックを変更した際に発生しました。
システム停止は容認できません。11月18日の障害以降、再びインターネットを失望させてしまいました。来週には、このような事象が起きないよう取り組む内容を公開します。
何が起こったのか
以下のグラフは、障害発生期間中にネットワークから返された HTTP 500 エラー(下部赤線)と、影響を受けなかった全体トラフィック(上部緑線)の比較です。
Cloudflare の Web Application Firewall (WAF) は、HTTP リクエストボディをメモリにバッファリングし解析することで顧客を悪意あるペイロードから保護します。今日までの設定ではバッファサイズは 128 KB に固定されていました。
React を利用する顧客を CVE‑2025‑55182 の重大脆弱性から守るため、バッファサイズを 1 MB(Next.js アプリが許容するデフォルト上限)に増加させる変更を段階的展開し始めました。この最初の変更は、段階的デプロイメントシステムで適用されていました。
展開中、内部 WAF テストツールが拡張されたバッファサイズに対応していないことが判明しました。テストツールは当時必要なく顧客トラフィックには影響しなかったため、2 つ目の変更としてオフにしました。この変更はグローバル設定システムを介して数秒で全サーバーに伝播されました。
FL1 バージョンのプロキシでは、特定条件下で WAF テストツールを無効化するとエラー状態が発生し、ネットワークから 500 エラーが返されるようになりました。変更がネットワーク全体に反映された結果、FL1 プロキシのコード実行中にルールモジュールで次の Lua 異常が発生しました。
[lua] Failed to run module rulesets callback late_routing: /usr/local/nginx-fl/lua/modules/init.lua:314: attempt to index field 'execute' (a nil value)
これにより HTTP 500 エラーが大量に返されました。変更適用直後に問題を特定し、09:12 にロールバックして全トラフィックが正常に復旧しました。
影響を受けたのは、古い FL1 プロキシで Cloudflare Managed Ruleset がデプロイされたウェブ資産です。この状態のサイトへのリクエストはすべて HTTP 500 エラーとなり、一部
/cdn-cgi/trace のようなテストエンドポイントだけが例外でした。設定を適用していない顧客や、中国ネットワークから配信されたトラフィックには影響しませんでした。
実行時エラーの詳細
Cloudflare のルールセットシステムは、各リクエストごとに評価される一連のルールで構成されています。ルールは「フィルタ」(対象トラフィックを選択)と「アクション」(例:ブロック、ログ、スキップ)を持ちます。「execute」アクションは別のルールセットの評価を呼び出します。
内部ログシステムでは、この機能を利用して新規ルールを公開前に検証しています。トップレベルのルールセットがテストルールを含む別のルールセットを実行し、これらは今回無効化しようとしていたテストです。
「キルスイッチ」サブシステムは、異常なルールを迅速に無効化できます。グローバル設定システムから情報を受け取り、過去には SOP に沿って使用してきましたが、「execute」アクションのあるルールには決して適用したことがありませんでした。キルスイッチが作動すると、コードは実行アクションの評価を正しくスキップします。しかし、その後全体結果を処理する際に次のようなエラーが発生しました。
if rule_result.action == "execute" then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end
action="execute" の場合、rule_result.execute オブジェクトが存在することを想定しています。ルールがスキップされたためオブジェクトは作成されず、Lua は nil 参照でエラーになります。
これは長年検出されていなかった単純なコードミスです。新しい FL2 プロキシ(Rust 実装)ではこのエラーは発生しません。
11月18日以降に行った変更について
先週の11月18日の障害とは別に、同様に長時間にわたる可用性低下を引き起こす変更を実施しました。どちらの場合も、顧客へのセキュリティ対策を目的としたデプロイが全ネットワークへ拡散し、ほぼ全顧客でエラーが発生しました。
当該障害後、数百社の顧客に直接連絡し、単一更新が広範囲への影響を防ぐための変更計画を共有しました。今回の障害ではこれらの変更が有効だったはずですが、未だ完全には導入されていません。
組織全体で最優先事項です。以下に示すプロジェクトが、同様の変更による影響を抑制するための鍵となります。
- 拡張されたロールアウトとバージョニング – ソフトウェアは厳格なヘルス検証付きでデプロイされます。脅威対応や一般設定に使用されるデータも同様の安全性(ヘルス検証、クイックロールバック等)を備えます。
- ストリームライン化されたブレイク・グラス機能 – 追加の障害種別が発生しても重要操作が継続できるようにします。内部サービスと顧客が使用するすべての標準インターフェースに適用されます。
- フェイルオープンエラーハンドリング – クリティカルデータプレーンコンポーネントで誤ったハードファイルロジックを置き換えます。設定ファイルが破損または範囲外の場合、ログに残し既知の良好状態へフォールバックするか、スコアリングせずトラフィックを通過させます。一部サービスでは特定シナリオでフェイルオープン/クローズを選択できるようになります。継続的なドリフト防止機能も含みます。
来週末までに、上記を含む全リジリエンスプロジェクトの詳細を公開予定です。その間はネットワーク変更をロックダウンし、対策とロールバック体制を整備します。
この種の連続した障害は私たちのネットワークとして許容できません。Cloudflare チーム一同、再び顧客やインターネット全体にご迷惑と痛みをお掛けしたことを深くお詫び申し上げます。
タイムライン
| 時刻(UTC) | 状態 | 内容 |
|---|---|---|
| 08:47 | 障害開始 | 設定変更がデプロイされネットワークへ拡散 |
| 08:48 | 完全影響 | 変更が完全に伝播 |
| 08:50 | 障害宣言 | 自動アラート発火 |
| 09:11 | 変更ロールバック | 設定変更を戻し、再度拡散開始 |
| 09:12 | 障害終了 | ロールバックが完全に伝播、全トラフィック復旧 |
関連投稿
- 2025年11月18日 – Cloudflare の障害(Bot Management 機能ファイル生成ロジックのバグ)
- 2025年10月28日 – Q3 2025 インターネット中断概要
- 2025年9月30日 – アフガニスタン全国インターネット停止が局所的影響を拡大