ページ内ジャンプ:

アレゲなニュースと雑談サイト

mhattaによる 2007年04月04日 7時30分の掲載
マッシュアップのような穴部門より。

vn 曰く

ITmediaの記事 Fortify、Ajaxのセキュリティ問題に警鐘 によれば、Fortify Software社が12種類(13バージョン)のAjaxフレームワークを調査したところ、「JavaScript乗っ取り」という特定の脆弱性について対抗策を講じていたものは一つしかなかったという。この脆弱性が悪用されると、ウェブサイトのユーザの機密情報が第三者に盗まれる危険がある。Fortify社のアドバイザリ(PDF)によれば、調査対象フレームワークは以下の通り: Dojo, DWR 1.1.4, DWR 2.0, GWT, jQuery, Microsoft Atlas, MochiKit, Moo.fx, Prototype, Rico, Script.aculo.us, xajax, Yahoo! UI。このうち対抗策があると言えるのはDWR 2.0のみ。またRicoとxajaxはJSON未対応のため、他より少しだけ安全であるとしている。この種の脆弱性は、過去にGoogleのGmailで発見修正されたことがあるなど、決して稀なリスクではない。安全策の早期普及が望まれる。

本家/.でも話題に。JavaScript Hijackingは「an entirely new kind of web-based attack」とのこと。
この議論は賞味期限が過ぎたので、保存されている。 新たにコメントを書くことはできない。
表示オプション しきい値:
  • だから… (スコア:1, 参考になる)

    Artane. (1042) : 2007年04月04日 8時25分 (#1136985) ホームページ 日記
    一昔前に流行ったシンクライアント構想よろしく、WEBブラウザで何でもやれるようにしましょう。っていうポリシー自体が現状のWEBブラウザなどのアプリケーションの品質管理技術のレベルでは危険過ぎるのは、何度もJavaScriptやらActiveXやらの脆弱性やそれらのシステムとの密着度の高さとの相関関係で指摘されていたし、
    最近はいつのまにかSpywareやtrojanを突っ込まれたりとか「よくあること」になってしまっているのに、よくAjaxのように(よほどブラウザの弱点を熟知した上で上手に作らないと)リスキーな側面を孕んでいる技術を使うもんが無闇に使われてるよな…とか思っていましたが…(;´Д`)
    一年…とまではいかないまでも半年はアドバイザリ出すのが遅かったような気がするんですが(;´Д`)
    --
    --暮らしの中に修行あり。
    blogはじめました。 [hatena.ne.jp]
    • Re:だから… (スコア:4, 参考になる)

      s02222 (20350) : 2007年04月04日 11時34分 (#1137096)
      >本来は注意深く実装する必要がある物を、手抜きしちゃって居る物があるってだけの話だと思いますが。

      どう注意すれば良いのかがすごく気になるのでタレコミからリンクされていたpdfを読んでみたんですが、 なんかものすごい泥縄のような・・・。

      結局、
      >The Web browser will send up the appropriate session cookie with the request.
      ってことなんですね。cookieまで渡しちゃうとは思ってませんでした。
      • HTTPXMLRequestを使ったクロスサイトAjaxは危険だから禁止された
      • だけど<script>タグは例外的にクロスサイトも許可された
      • 一方で、データをJavascriptのソースコードとしてやりとりする、JSONという規格が出来た
      • 使いやすかったり、例外なのが便利だったりして、みんな使うようになった(?)
      • JSONを不正なHTMLがクロスサイトから叩こうとしても、
          {"重要な", "秘密の", "データ"};
          みたいなコードが実行されるだけなので(その配列はどこにも代入されない)、不正なHTML中から、その「重要な秘密のデータ」にアクセスする手段が無くて安全そう
      • と思いきや、JavaScriptは、Objectのコンストラクタの一部を再定義することでフックできるので、上記のような配列が作られた瞬間にデータを奪うことが可能
      ってことでしょうか。

      で、対策は、(1)CookieだけじゃなくRefererも見る(いまいち安全ではない)、もしくは、 (2)正しいアクセスなら得られたJSON形式のソースコードを加工してから実行できるけど、 クロスサイトの側はただ実行することしかできないのを利用する(冒頭に"while(1);"を付けて、正しいアクセスの時はそれを削除する。不正アクセスは削除する機会が無く実行するのでハマる)。
      • Re:だから… (スコア:5, 参考になる)

        s02222 (20350) : 2007年04月04日 14時57分 (#1137210)
        読みながら書いたらいまいち正確じゃなく見通しの悪い文章になっていたので自己訂正補足。

        • XMLHttpRequestはクロスサイト禁止
        • それ以外(scriptタグやimgタグのsrcなど)はクロスサイトでもGETリクエストなどでデータ取得が可能(ブラウザはそのデータを取ってくるかも知れないけど、危険HTMLページ内の危険スクリプトなどからそのデータを読みに行く方法が無いので安全)
        • (a)HTML内に<script src="http://hogehoge">と書いて、hogehogeが"X={"foo","bar",baz};"という文字列を返すようにしておくと、scriptタグが解釈された時点でこの文字列がスクリプトとして実行され、データ"foo","bar","baz"の配列が、オブジェクト"X"に代入され、スクリプトからデータとして利用可能になる(実際は完了通知が必要なのでコールバック関数などを使ってやりとりする。これはクロスサイト規制外なので、クロスサイトAjaxでデータを取ってくる唯一の方法(?))
        • (b)サーバは"{"foo","bar",baz};"だけを返すようにしておき、これをXMLHttpRequestで取ってきてevalで解釈する方法もある(この方法はクロスサイトではXMLHttpRequestオブジェクトがリクエストを許可しない)
        • bの方法だから安心。正規ユーザが悪い人が書いたデータ強奪コードが仕込まれたサイトをブラウザで開いてしまっても、 XMLHttpRequestはクロスサイトなリクエストは遮断してくれるし、scriptタグを使って不正にクロスサイトアクセスしようとしても、「オブジェクトが生成されてどこにも代入されず消えるスクリプトが実行される」だけなので大丈夫、と思っている諸君、大丈夫じゃないよ。その実行前にフックを仕込む方法があるよ。
        ですね。

        # だいたい、HTTPXMLRequestって何だよorz
        # 新たな技が出てくる度、話がややこしくなってきて付いていくのがやっと・・・。
      • 1個のコメント が現在のしきい値以下です。
    • 5個のコメント が現在のしきい値以下です。
  • Anonymous Coward : 2007年04月04日 23時12分 (#1137421)

    前提

    • JSONでデータをやりとりしている。
    • データ中に秘密情報が含まれる。

    影響

    • 秘密情報が盗まれる。
    攻撃シナリオ
    1. JSONを使用しているサイトによって、ユーザが認証される。
    2. 認証状態にあるユーザが悪意あるサイトを訪れる。
    3. 悪意あるサイトに設置されたJavaScriptにより、JSONデータが盗まれる。
    回避策
    • (サーバサイド)HTTP REFERERをチェックし、期待したドメインでないときはデータを送出しない。
    • (サーバサイド+クライアントサイド)JSONデータに細工を施し、<script src="JSONのURL">で読み込んだときに正しく動作しないようにする。
    • JSONをやめてXMLにする。
    ユーザとしての回避策
    • 信頼できるサイトでのみJavaScriptを使用するようにブラウザを設定する。


    # この程度にJavaScript Hijackingと名付けるのは羊頭狗肉に思える。
    # せいぜいCross-site JSON Robberyくらいでいいじゃないだろうか。

  • 3個のコメント が現在のしきい値以下です。