ひさびさの更新です。
CSRFTesterというツールを試した
Category:OWASP CSRFTester Project - OWASP
頑張ってCSRF脆弱性の検査をしてくれるツールだと思って期待して試したのですが、残念ながら違いました。
このツールの動作は以下のようなものです。
使ってみると、日本語のパラメータがおかしくなったりします。まあそれはそれとして、この程度の機能なら通常のProxyツールを使った検査で十分な気がします。
私が期待していたのは、最初に書いたように、CSRF脆弱性が存在する箇所を特定する(しようと試みる)ツールです。
そのためには、
- CSRF対策が必要なリクエストを識別
例えば単なる検索フォームからのリクエストならCSRF対策は不要だが、会員制サイトでユーザ情報を更新するような処理ならば必要。 - CSRF対策用のトークンを評価
トークンがユーザとのヒモ付けがされているか(他のユーザのトークンを使い回しできないか)、推測困難か。 - 更新系の処理が実際に行なわれたか判定
例えばトークンを消してリクエストを飛ばした時などに、そのリクエストによって更新系の処理がされたのかを(レスポンスなどから)推測する必要がある。
のような、とても機械的にやるのは難しい問題が出てくるはずです。
私がCSRFTesterを試したのは、全てではないにしろ、また完全な方法ではないにしろ、CSRFTesterが上記のような問題の解決を試みたものだと(勝手に)思って、その方法に興味があったからだったのですが、そのもくろみは外れてしまいました。
最近たまに見るCSRF対策の失敗事例
ツールのはなしのついでに、最近たまに見るCSRF対策の失敗例を少し。
いくつかのパターンがありますが、CSRF対策用のトークンを消したりいじくったりしてリクエストを発行したときに、画面上には「不正な処理です」「画面遷移異常です」のようなもっともらしい画面が出るけれども、裏ではしっかり更新系の処理が実行されているWebアプリをたまに見ます(騙されそうで非常に怖い)。
CSRF対策を目的としたトークンではなく、二重送信防止用のトークンなのかな? とも思ったのですが、考えてみると二重送信防止の効果もありません。DBのデータ更新等のあとの画面表示処理の段階で、トークンの妥当性検証をしているのかなと思いますが、何とも不思議です。