クロスサイトリクエストフォージェリ(CWE-352)

このブログではウェブサイトやその上で動作しているウェブアプリケーションの脆弱性について紹介すると共に注意喚起をする目的でまとめられています。

今回は代表的なWebアプリケーション脆弱性であるクロスサイトリクエストフォージェリについて解説をしています。

概要

Webは、サイトからサイトに遷移することが通常の動作であるため、悪意のあるサイトからの遷移に対して、利用者の意図に反する要求をアプリケーションが受け付けてしまう場合があります。その結果、利用者が知らないうちに掲示板等への投稿、物品購入、パスワードやメールアドレスの変更等重大な結果を招く場合があります。これがクロスサイトリクエストフォージェリ(CSRF、以下CSRF)です。

多くのWebアプリケーションでは認証状態をクッキーに保持しますが、外部サイトから遷移したリクエストであっても、認証クッキーは送信されてしまいます。このため、利用者のログイン状態にて意図しないリクエストを送信させられてしまうことが特に問題です。

誤認逮捕で話題になったパソコン遠隔操作事件においても、掲示板上の罠を閲覧してしまった東京都在住の男性のパソコンから、横浜市のホームページに犯行予告を送信させる目的でCSRFが悪用され、東京都在住の男性が逮捕されるという事態に至りました。

攻撃のイメージと影響

架空の市の「市民の声」という意見募集サイト(ドメイン名はexample.jp)を題材して、CSRFを説明します。このサイトでは、以下の入力フォームが設置されています(要点のみ)。

<form action=”/post.cgi” method=”post”>
氏名 <input name=”name”>
投稿内容 <textarea name=”body”></textarea>
<input type=”submit”>
</form>

これに対して、攻撃者は以下のような罠を用意して、被害者がこの罠を閲覧するようにメールや掲示板の投稿などで誘導します。

<body onload=”document.forms[0].submit()”>
<form action=”http://example.jp/post.cgi” method=”post”>
<input type=”hidden” name=”name” value=”殺銃蔵”>
<input type=”hidden” name=”body” value=”○月○日に○○小学校を襲撃する”>
</form>
</body>

被害者が上記のページを閲覧すると、1行目に置かれたJavaScriptにより犯行予告の内容が自動的に「市民の声」に投稿されます。投稿元のIPアドレスは被害者のパソコンのものであるので、被害者からの投稿と疑われることになります。

脆弱性による影響

この脆弱性による影響の例として下記がありますが、これらに限りません。CSRF脆弱性の影響は、脆弱性のあるページの提供する機能の悪用に限られます。

  • 被害者へのなりすましによる掲示板等への投稿
  • パスワードの変更(この場合はパスワードの悪用により被害が拡大する)
  • 被害者アカウントでの物品購入
  • 被害者の属性(メールアドレス、住所等)の変更

脆弱性の有無の確認方法

CSRFの検出は自動ツールでは難しいとされており、手動での検査が有効となります。この場合、独立行政法人情報処理推進機構(IPA)が公開している「安全なウェブサイトの作り方」別冊の「ウェブ健康診断仕様」に診断の方法が説明されており、参考になります。

対策

CSRF脆弱性は、リクエストの遷移元の確認をしていないことが原因です。標準的なCSRF対策としては、リクエスト中にトークンと呼ばれる乱数を送信するタグを挿入しておき、リクエストを受け付けた際にトークンの正当性を確認する方法があります。

なお、デジサートの「クラウド型WAF」では、CSRF脆弱性に対してウェブサイトが攻撃を受けるのを防ぐことができる有償オプションを用意しています。

参考文献

安全なウェブサイトの作り方、ウェブ健康診断仕様(独立行政法人情報処理推進機構)
https://www.ipa.go.jp/security/vuln/websecurity.html

修正の上再掲しました。

Posted in WAF