# 毎秒 12 ビットの新型 Spectre 攻撃！Cloudflare Workers はハードウェアでふさいだよ！

やっほー、しぃちゃんだよ！今日はちょっとスリリングな、でもすごく大事なセキュリティのお話だよ。あの有名な CPU の脆弱性「Spectre」が、まさか今のクラウド基盤にも牙をむいていたなんて…！でもちゃんと対策まで終わってるから安心して読んでね。

## なにが発表されたの？

Cloudflare の Blog で、Workers 基盤へのリモート Spectre 攻撃を 2024 年〜2025 年にかけて再評価した研究成果が公開されたよ。エディンバラ大学の研究者との共同研究で、読み応えたっぷりの技術記事なの。もともと Cloudflare は 2021 年にも同様の評価をしていたんだけど、Spectre 攻撃を安定して成功させる技術がその後どんどん進化したから、「今の防御は本当に大丈夫？」って改めて検証したのが今回の研究だよ。

## 今までどうだったの？

2021 年の評価時点では、Spectre のようなサイドチャネル攻撃をリモートから安定して成功させるのは難しいと考えられていたの。Workers はマルチテナントで、色んな人のコードが同じプロセス内の isolate(V8 の軽量な実行環境)に同居することもあるから、理論上は「隣の isolate のメモリを盗み見る」リスクはあったんだけど、実際に安定して抜き取るだけの技術がまだ追いついていなかったんだよね。

## これで何が変わるの？

今回の再評価で、攻撃者が実際に秘密情報を漏洩できることが実証されちゃったの。でも大事なのは、Cloudflare がこの研究結果を受けてすでに本番環境の防御を強化済みだということ。具体的には V8 Sandbox の導入と、ハードウェアで強制的に isolate を隔離する Memory Protection Keys(MPK)を 2025 年 9 月に本番展開しているよ。だから今 Workers を使っている人が新たに何か設定を変える必要はないんだけど、「マルチテナントの実行基盤ってこうやって守られているんだ」というのが具体的に分かる貴重な公開事例なの。

## 深く潜ってみよう

研究チームが組み立てた攻撃の流れは、大きく 4 つのステップに分かれるよ。

**1. Spectre ガジェットを 2 種類発見**

- 1 つ目は、圧縮ヒープポインタを漏らしてしまうガジェット
- 2 つ目は「speculative type confusion(投機的な型混同)」を突くガジェットで、`obj instanceof ObjP` のような分岐予測をわざと誤学習させ、TypedArray が持つ 64 ビットの生ポインタを悪用して攻撃者が用意したメモリレイアウトから任意アドレスを読み取れてしまうというもの

**2. 信号を増幅してリモートから読み取る**

L1 キャッシュのツリーベース PLRU(疑似 LRU)というキャッシュ置換ポリシーの癖を悪用して、本来はごくわずかなメモリアクセスの時間差を大きく増幅。さらに WebSocket 接続経由で外部サーバーのタイムスタンプを使う「リモートタイマー」を使うことで、サブミリ秒の精度でキャッシュのヒット・ミスを見分けられるようにしたんだって。

**3. 被害者と同じプロセスに"同居"する**

攻撃対象のスクリプトへ `fetch()` すると同じプロセス内で isolate がスケジューリングされることがあるという性質を突いて、意図的に被害者と同居(co-location)。`/cdn-cgi/trace` エンドポイントの情報を見て、狙った環境に配置できたかも確認していたみたい。

**4. Durable Objects で長時間居座る**

Workers には 1 回の実行あたり CPU 時間 30 秒・サブリクエスト 1,000 回までという制限があるんだけど、Durable Objects を使い、WebSocket メッセージを送るたびにこのカウントをリセットすることで、5〜20 時間以上も isolate を存続させることに成功したそう。しかも I/O 待ちが多い普通の Worker っぽく振る舞うことで、Cloudflare の不正検知の仕組み(DyPrIs)の閾値をすり抜けていたんだって。

こうして組み立てた攻撃で、研究チームは JWT トークンのような秘密情報を 1 ビットずつ、最大で毎秒 12 ビット・精度 99% 超で抜き出せることを実証したよ(実際に先頭バイト `e`(`0b01100101`)を丸ごと復元できたそう)。

これを受けて Cloudflare が実施した対策も具体的だよ。

- **V8 Sandbox**: JavaScript のヒープから生の 64 ビットポインタそのものを取り除き、TypedArray のバッキングストア構造も変更。今回見つかったガジェットが機能しなくなる作りにした
- **Memory Protection Keys(MPK)による隔離**: 2025 年 9 月に本番投入。isolate ごとのヒープをハードウェアが強制するアクセス境界で囲い、間違ったキーでのメモリアクセスをハードウェア自体が拒否するようにした
- **DyPrIs の改善**: 長時間実行や I/O 過多なワークロードも「セキュリティ上ちゃんと見るべきケース」として扱うようにし、実行中にリアルタイムで異常を検知する仕組みを追加

なお Cloudflare は、この攻撃は本番環境の対策によってすでに軽減済みで、過去 3 年間に悪用された形跡もないと説明しているよ。

## まとめ

- Cloudflare がエディンバラ大学と共同で、Workers へのリモート Spectre 攻撃を 2024〜2025 年に再評価
- 新しい Spectre ガジェット・キャッシュ増幅・リモートタイマー・Durable Objects を使った長時間の同居(co-location)を組み合わせ、秘密情報を毎秒最大 12 ビット・精度 99% 超で漏洩できることを実証
- 対策として V8 Sandbox で生ポインタを排除し、2025 年 9 月には Memory Protection Keys によるハードウェア強制隔離を本番投入
- 不正検知の仕組み DyPrIs も、長時間・高 I/O のワークロードを見逃さないよう改善
- 実際の悪用の形跡はなく、Bug Bounty プログラムでも継続的に報告を受け付け中

マルチテナントなサーバーレス基盤のセキュリティ設計に興味があるエンジニアや、Spectre 系のサイドチャネル攻撃の実例を知りたい人にとって、実装レベルの攻防が詰まったすごく読み応えのある 1 本だよ！
