matsukawar’s blog

個人的な技術ブログです。SAPネタを充実したい。Twitter : https://twitter.com/matsukawar

ASPXのサイトのValidation機能からみるサイト攻撃ルート

脆弱性"&'<<>\ Advent Calendar 2014 (18日目)

久しぶりに日記を書きます。
今日は、ASP系のアドベントカレンダーに書きたかった内容なんですが、セキュリティに絡んだ内容ですので脆弱性アドベントカレンダーに初投稿です。よろしくお願いします。簡単に自己紹介→「.Net系開発者です。TFSとTestManager好きです。」

    • -

まず、ASPXのサイトを見つけて、フォームの入力値(検索フォーム)とかに「&#」(いずれも小文字)と入力してみたことはあるでしょうか?
結構多くののサイトでサーバーエラーが発生します。初期設定で、クライアントはこの「&#」(以降、”呪文”と呼びます)をサーバーにPOSTすることが許可されていないためです。

以下、私がサクッと試して発見したサイト
呪文を入力して「検索」と押すと、サーバーエラーになりますよね。

ハンビットステーション
※FAQ検索画面
http://www.hanbitstation.jp/supportNet/FaqView.aspx?cdFaq=601&Code=112&Category=1

SDガンダムオンライン
※ログインメールアドレスが呪文、パスは適当
http://www.sdgundamcfo.jp/netcafe/tenpo_map.aspx?weeeple=1

つまり、サーバーエラーが発生するサイトはこの呪文のチェックをASPの初期設定で行っていると考えられ、この呪文の入力テストを行っていない可能性があるといえます

さすがに、ログイン画面で落ちるのはどうかと思いますが…

システム全体で見ても、この呪文のような特殊文字の入力を想定してない可能性がありますので、攻撃者の1つのツールとして目をつけられることは必至でしょう。

aspxでこの呪文を制御できていない場合の問題点としては、どのようなケースが考えられるのでしょうか?
たとえば、攻撃者がフォームの一部に、この呪文を仕込んだとしましょう。

<input type="text" value="&#" style="display:none;" />

の様にです。これでは、フォームに入力した内容を誰もポストバックできなくなってしまいます。
一番厄介なのは、マスター系のデータをこの呪文に変えられたときだと思います。

落ちないようにするためには、
ASPの設定(Web.configの設定など)で、この標準のValidation機能をOFFにする必要があります。

Validation機能をOFFにする必要があります。

えっ・・・

つまり、呪文を入力しても落ちなかったサイトは
標準のValidation機能をOFFにして、自分たちで独自実装してる可能性があるのです。
なので、抜けがもしかしたらあるかもしれない、ということです。

ユーザーに見えているフォーム内の各種フィールドは、ちゃんと値チェックなど入っているかもしれませんが、ユーザーに隠ぺいされている各種Hiddenフィールドなどが、攻撃ルートとしては狙いやすいのではないかと思います。

そのHiddenフィールドにSQLインジェクションなどを入力されたときにちゃんとはじけるかどうか、というテストが十分になされていない可能性があるためです。

IEでは、F12キーを押して、display:none となっている各種フィールドをdisplay:blockに書き換えるだけで、簡単に表示されますので、いろんなサイトで実験はできそうです。

こういうHiddenの値をDBに直接値を入れてたりしたら、最悪ですね。

自他ともに気を付けていきたいものです。

★おすすめ記事
@jsakamotoさん「ASP.NET MVC3 で要求検証を無効にする」
http://devadjust.exblog.jp/16628546