はじめに
―― 消えた技術が今も教える CSRF 設計の落とし穴 ――
Adobe Flash Player は、かつて Web に革命をもたらしました。
動画、アニメーション、業務システム、銀行サイト――
一時代を築いたその技術は、同時に深刻なセキュリティ問題も抱えていました。
その代表例が Flash-based CSRF です。
Flash は 2020 年に公式サポートを終了しましたが、
Flash-based CSRF は 現代 Web にも通じる重要な教訓を残しています。
本記事では、
- Flash-based CSRF の概要
- なぜ成立したのか
- 具体的な攻撃例
- 通常の CSRF との違い
- 現代への教訓
を体系的に解説します。
Flash-based CSRF とは
Flash-based CSRF とは、
Adobe Flash Player の通信機能やセキュリティ設計の欠陥を悪用して成立する CSRF 攻撃です。
通常の CSRF は HTML の仕組みを使います。
<form><img><iframe>
一方、Flash-based CSRF は次の点が決定的に異なります。
悪意ある
.swfファイルが、ブラウザの制御外で HTTP リクエストを送信する
これにより、ブラウザが用意した CSRF 防御が無力化されました。
なぜ Flash で CSRF が成立したのか
1. Flash は独自の通信エンジンを持っていた
Flash(ActionScript)は以下を直接扱えました。
- HTTP リクエスト送信
- Cookie の自動付与
- POST / PUT / DELETE
- JSON / XML データ送信
つまり Flash は、
- Same-Origin Policy
- Referer / Origin チェック
- SameSite Cookie
といった ブラウザ側 CSRF 防御の外側 で動作していたのです。
2. crossdomain.xml による甘いアクセス制御
Flash では、サーバに配置された
crossdomain.xml によって通信許可を制御していました。
危険な設定例:
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
この設定があると、
- 任意のドメインの SWF が
- 認証付きで
- API を自由に呼び出せる
という 致命的な状態 になります。
攻撃フロー全体像
- 攻撃者が悪意ある
.swfファイルを作成 - 攻撃者サイトに埋め込む
- 被害者がログイン済みのままページを閲覧
- Flash が自動的に HTTP リクエスト送信
- Cookie が付与され認証が成立
- 被害サイトで状態変更が実行される
ユーザー操作は不要です。
例:銀行サイトでの送金 CSRF(Flash 版)
想定システム
- 銀行サイト:
https://bank.example.com - Flash で作られた古いダッシュボード
- CSRF トークンなし(「Same-Origin があるから安全」と思い込んでいる)
本来の送金 API
POST /api/transfer HTTP/1.1
Host: bank.example.com
Cookie: AUTH=xyz
Content-Type: application/json
{
"to": "attacker-account",
"amount": 100000
}
Flash-based CSRF の恐怖ポイント
HTML の <form> CSRF では難しい:
- JSON ボディ
- 任意の API エンドポイント
- 複雑なリクエスト
Flash なら全部可能。
攻撃結果
- ユーザーは何もしていない
- 画面遷移もない
- でも口座から送金完了
サーバログだけが真実
通常の CSRF より危険だった理由
| 観点 | 通常 CSRF | Flash-based CSRF |
|---|---|---|
| リクエスト形式 | form / GET | JSON / XML |
| ヘッダ制御 | 制限あり | 自由度高 |
| ブラウザ防御 | 有効 | 無効 |
| API 直叩き | 困難 | 容易 |
👉 API 時代を先取りした最悪の CSRF とも言えます。
Flash の終焉
-
2020年12月31日
Adobe Flash Player 公式サポート終了 - 現代ブラウザでは原則実行不可
- Flash-based CSRF は新規脅威ではない
現代技術との対応関係
| Flash 時代 | 現代 |
|---|---|
| Flash API | WebAssembly |
| crossdomain.xml | CORS |
| Flash 通信 | Service Worker |
| Flash-based CSRF | OAuth CSRF / SameSite 回避 |
技術は変わっても、事故の構造は同じです。
まとめ
- Flash-based CSRF は Flash の設計が生んだ CSRF
- 現代ではほぼ再現不可
- しかし CSRF 設計を考える上で今も重要
- 「便利すぎる技術は、だいたい危ない」
Flash は消えました。
でも Flash 的な失敗は、今も別の姿で現れます。