FlashでHTTPリクエストヘッダ操作
---------------------------------
11/15追記:Flash Playerのヘッダインジェクションの脆弱性が直ったようです。
Update available for HTTP Header Injection Vulnerabilities in Adobe Flash Player
これで、とりあえず、Referer操作はできないみたいです。そして、何故か、「Expect」ヘッダも同様に操作できなくなってるみたいです。そういう直し方微妙です。
他のヘッダは?問題が出るWebアプリケーション結構あるのですが・・・。
そして、気になるのが、Flash Playerの新しいのが出たからといって、更新する人がいるかってとこですね。自動更新されないすよね。を、一応あるのか。設定しないといけないっぽいけど。→ここ?
Flashで作られてるって事は、勝手に自動更新オフにするFlashを作れたりするのかな??
12/09追記:ちなみに、9.0.28.0とかでも別の方法でRefererとかHostとか操作できるっぽいです。
---------------------------------
(11/7 24:00付近に色々追記しました。Flash Player 8とFlash Player 9ののでちょっと違ったので。ちょこちょこ誤解生まないような感じに修正。検証しようとして混乱させちゃったたならごめんさいですm(_ _)m)
できます。これはApacheのExpectヘッダでのXSS(参考:secuina)で知られるようになってきた現象ですかね。あまりこの手の話はみかけないけど。ちなみに、動くバージョンとかは↑の記事を参照してください
今ここらへんで話題になってます。
- 駄目な技術文書の見分け方 その1(高木浩光@自宅の日記)
- Flashを使えばRefererが偽装できる?(うさぎ文学日記)
まあ、ちょっと微妙だったので書かなかったのですが、話題に上がったので書いてみます。
結論からいくとFlash Player 8(8,0,24,0)*1では
- 「Cookie」、「Host」等、致命的っぽいの以外は普通に"上書き"できそうです*2。
- そして、「Host」等の場合は小細工をすることで、"上書き"されます。Cookieはダサい方法でやってるので、変な形で"追加"、Webアプリによっては処理したりしなかったり。*3。(修正忘れてたので17:21に修正しました。Cookieはなんかうまく上書きできない)
Flash Player 9(win 9.0.16.0)では、
- 「User-Agent」、「Host」、「Referer」、「Cookie」以外は普通に"上書き"できる*4
- 「User-Agent」、「Host」、「Referer」はFlash Player 8 よりも小細工すれば"上書き"される
Flash Basic8では、普通にやると、一部の偽装ができませんでした。これは、恐らく、Flash Basic8でのパブリッシュ時にフィルターしてるんじゃないかと。
小細工すると、Flash Basic8でも偽装できたっぽいです。ここらへんのチェックは、基本、Flash Player側でやってほしいとこです*5。
Flashってなんであんなに高いのでしょう??
商品名 製品情報 FAQ OS 定価(税込) 特別価格(税込)
Macromedia Flash Basic 8 日本語版 情報 - 26,250円 24,360円
Macromedia Flash Professional 8 日本語版 情報 - 88,200円 79,380円
88,000円ってなんでしょう?一般ユーザにはちょっとねぇ。そして、Flash Basicのほうでやりたいことが一通りできてる気がするけど、3倍以上になるほどの追加機能ってなんだろう。
で、そこらへんのフリーのFlash作成ソフトで作るとあら不思議。偽装できた。
実際にはこんなリクエストが飛びます。
GET /?0.151521106250584 HTTP/1.0 Accept: ahahan Accept-Language: ahahan Content-Type: ahahan Cookie : ahahan User-Agent: ahahan Referer: ahahan Harupu: ahahan Proxy-Connection: ahahan Host: ahahan
Flash Basic8では、swfのバイナリが人の目で見て読めない形なのであれですが、フリーで作ったののは、そのままバイナリを編集して、ActionScriptを部分的に変更できる感じ。そんで、他のちゃんと動いてるヘッダのとこを、「Cookie」に置き換えてもやっぱり動かないので、Flash Player側でここは対応しているか、もしくは、ブラウザが上書きをしているかのどちらかかなぁと思ってます。←できてた。←やっぱりCookieだけはなんかちょっと違った。
Action Scriptのサンプルコードはちょっとあれなので書かないでおきます。あと、どのFlash作成ツール利用したのかも。
ちなみに、手元で動いているというだけなので、気になる方は検証してみてください。私が嘘をついてるとあれなので。
結局のところ、Flash Playerのバグです。で、終了かなぁ?他のドメインのリクエストに対してHTTPリクエストヘッダが操作できる仕様もどうかなぁ、な気はしますが・・・。