CSRFのはなし

ひさびさの更新です。

CSRFTesterというツールを試した

Category:OWASP CSRFTester Project - OWASP

頑張ってCSRF脆弱性の検査をしてくれるツールだと思って期待して試したのですが、残念ながら違いました。

このツールの動作は以下のようなものです。

  • Proxyツールとして動作して、リクエストを記録する。
  • 記録したリクエストパラメータをユーザがGUI上で変更できる。
  • 変更したリクエストパラメータを送信するようなフォームHTMLを作成する。

使ってみると、日本語のパラメータがおかしくなったりします。まあそれはそれとして、この程度の機能なら通常のProxyツールを使った検査で十分な気がします。

私が期待していたのは、最初に書いたように、CSRF脆弱性が存在する箇所を特定する(しようと試みる)ツールです。

そのためには、

  • CSRF対策が必要なリクエストを識別
    例えば単なる検索フォームからのリクエストならCSRF対策は不要だが、会員制サイトでユーザ情報を更新するような処理ならば必要。
  • CSRF対策用のトークンを評価
    トークンがユーザとのヒモ付けがされているか(他のユーザのトークンを使い回しできないか)、推測困難か。
  • 更新系の処理が実際に行なわれたか判定
    例えばトークンを消してリクエストを飛ばした時などに、そのリクエストによって更新系の処理がされたのかを(レスポンスなどから)推測する必要がある。

のような、とても機械的にやるのは難しい問題が出てくるはずです。

私がCSRFTesterを試したのは、全てではないにしろ、また完全な方法ではないにしろ、CSRFTesterが上記のような問題の解決を試みたものだと(勝手に)思って、その方法に興味があったからだったのですが、そのもくろみは外れてしまいました。

最近たまに見るCSRF対策の失敗事例

ツールのはなしのついでに、最近たまに見るCSRF対策の失敗例を少し。

いくつかのパターンがありますが、CSRF対策用のトークンを消したりいじくったりしてリクエストを発行したときに、画面上には「不正な処理です」「画面遷移異常です」のようなもっともらしい画面が出るけれども、裏ではしっかり更新系の処理が実行されているWebアプリをたまに見ます(騙されそうで非常に怖い)。

CSRF対策を目的としたトークンではなく、二重送信防止用のトークンなのかな? とも思ったのですが、考えてみると二重送信防止の効果もありません。DBのデータ更新等のあとの画面表示処理の段階で、トークンの妥当性検証をしているのかなと思いますが、何とも不思議です。