Hatena::ブログ(Diary)

交差点でコーヒーを

2006-11-07 リファラーを 偽装するのよ Flashで

[]FlashでHTTPリクエストヘッダ操作 FlashでHTTPリクエストヘッダ操作を含むブックマーク 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)で知られるようになってきた現象ですかね。あまりこの手の話はみかけないけど。ちなみに、動くバージョンとかは↑の記事を参照してください

今ここらへんで話題になってます。

まあ、ちょっと微妙だったので書かなかったのですが、話題に上がったので書いてみます。

結論からいくと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リクエストヘッダが操作できる仕様もどうかなぁ、な気はしますが・・・。

*1:動作環境書いてなかったので書いた

*2:ちなみに、Refererはそもそもついてくれないっぽい感じがする

*3:ここ(http://archives.neohapsis.com/archives/bugtraq/2006-07/0425.html)を参考にしたらできた。ちょっと汎用的なFlashでやってたからできなかっただけだった。Cookieの場合はなんか挙動が違ったのでちょっと調査中

*4:全部のヘッダはためしてないです

*5:ここら辺のどこが問題かの切り分けがいまいち分からなかった

yamagata21yamagata21 2006/11/07 20:01 req.addRequestHeader(”Dummy”, ”dummy¥x0d¥x0aCookie:¥x20aaa=bbb”); みたいなの出来たら面白いんですけどねー。

harupuharupu 2006/11/08 00:15 Cookieだけはなんかうまくいかずです。他ののはいくんですけどねー。

金床金床 2007/01/14 15:09 >Flash Basic8では、swfのバイナリが人の目で見て読めない形なのであれですが

この部分、パブリッシュ時の圧縮の設定が関係あるのでしょうか?