親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。育児のイロハという育児サイト(https://ikujip.jp)の開発も行っているため、その開発で使用されている技術についても掲載しています。

XSSってどうやって仕込まれる?

XSSについて

このページを閲覧している方ならご存知とは思いますが、まずはXSSについて超簡単に説明します。

この事象は入力フォームがある画面が狙われるものですが、Javascriptのタグを攻撃者によって画面上に埋め込まれ、ユーザ情報やcookieのセッションが盗まれたり(セッションハイジャック)するセキュリティの脅威です。
inputのtextやtextareaに対策を施さないと発生してしまいます。

以下のページが参考になりますね。

情報処理推進機構:情報セキュリティ:脆弱性関連情報の取扱い:知っていますか?脆弱性 (ぜいじゃくせい)/2. クロスサイト・スクリプティング

どうやってタグを入れられる?

XSSは不正なタグを混入されることで発生する脅威ですが、そもそもどのように混入されるのでしょうか?

サーバ情報を盗まれてソースを書き換えられて起きるのでしょうか?
もしソースを書き換えられるくらいであれば、DBにもアクセスできるでしょうし、わざわざこんな回りくどいやり方はしませんよね。

方法としては、GETパラメータにスクリプトを入れる方法やスクリプトをPOSTさせる方法があります。

GETパラメータにスクリプトを入れる方法

Webアプリケーションの設計にもよる部分なのですが、例えばフリーワード検索ができる検索画面を考えてみましょう。
以下のURLの検索画面がそうなのですが、この画面は「freeWord=%5B"居場所"%5D」の箇所に検索したフリーワードが入る仕様になっています。

https://ikujip.jp/father/list/1?type=thread&order=2&freeWord=%5B"居場所"%5D

今回は居場所というワードで検索しているのですが、ここに

freeWord=%5B"<script>alert('テスト')</script>"%5D

のようにスクリプトが混入されたらどうでしょうか?
上記のページでは対策をしているので何も起きませんが、何も対策を施していないサイトであれば、普通に「テスト」と表示されるアラートが出てきてしまいます。

でも攻撃者が自分でそんなスクリプトを入力しても、有用な情報は得られないんじゃない?と思われるかもしれませんが、実際にこのスクリプトが入力された状態でアクセスするのは、攻撃者ではなくサイトのユーザになるのです。
しかもこんな簡単がスクリプトを埋め込むわけではありません。

具体的な例としては、攻撃者がフリーワード欄にスクリプトが入っているリンクを用意し、適当なサイトに貼っておくのです。
何も知らないユーザがそれをクリックすると、スクリプトが埋め込まれた状態で遷移することになり、悪意のあるスクリプトが実行されてしまいます。

もしユーザが遷移先のサイトにログインしたままの状態で、cookieを取得するようなスクリプトが埋め込まれていたらどうでしょう?
cookieにはセッション情報が格納されている場合があるので、セッションが抜き取られてしまいます。(いわゆるセッションハイジャック

また、個人情報を入力するようなページで、他のページに入力値をPOSTするようなスクリプトを埋め込まれてしまったらどうでしょう?
個人情報があっさり取られてしまいますね。

POSTでスクリプトを埋め込まれる方法

次にPOSTでの埋め込み方法ですが、掲示板サイトを想像してみてください。
一般的な掲示板サイトでは、入力した文章は即掲示板に表示されますよね。

例えば以下のようなスクリプトをコメントとして入力した場合も、即スクリプトが表示されます。

<script>alert('テスト')</script>

何も対策がされていないサイトだと、そのスクリプトが実行されてしまうため、今後その掲示板にユーザが訪れる度に悪意のあるスクリプトが実行されてしまうのです。
今回の場合だと、開くたびに「テスト」というスクリプトが表示されますね。

これも上記のようにセッションハイジャックや個人情報の取得などに繋がる可能性があるので要注意です。

まとめ

GETの場合とPOSTの場合のそれぞれでXSSの説明はしましたが、あくまで一例にしか過ぎません。
とにかくユーザがinputやtextareaで何かを入力できるサイトは要注意です。

サーバサイドでもフロントエンドでも、最近のフレームワークを使えば基本的な対策は既にしっかりされているものが多いので、対策を入れるのを忘れてしまいがちになってしまいますが、本来のフレームワークの使い方と外れるような実装を一部使用する場合、未だに脅威は残ります。
例えばSPAサイトなのに一部サーバサイドレンダリングするような使い方とか...

対策方法については、また別で書こうと思いますが(ググればいっぱい出てきますw)、自分が運営しているサイトでこのような被害があると大事になりかねません。
サイト制作時には必ず対策が必要な脅威です。

セキュリティのためのログ分析入門 サイバー攻撃の痕跡を見つける技術

セキュリティのためのログ分析入門 サイバー攻撃の痕跡を見つける技術

イラスト図解式 この一冊で全部わかるセキュリティの基本

イラスト図解式 この一冊で全部わかるセキュリティの基本