GMO DevelopersDay
GMO DevelopersDay
2024.11.29Fri - 11.30Sat YouTube Live
イベント開催まであと8

DOM based XSSの検出方法を理解する

こんにちは。
GMOインターネット セキュリティエンジニアの関です。

今回はクロスサイトスクリプティングの手法の一つ、DOM based XSSの検査の手法について、PortSwiggerが公開しているWeb Security Academyのテストページを使って解説していきます。
※Web Security Academyはアカウント登録をすれば誰でも無料で使えます。

1. 注意事項

  • 検査により、意図せずにシステムの停止や不具合を引き起こしてしまう可能性があるため、紹介する手順を試してみたい場合は本番に影響を及ぼさない検証環境か、それ専用に作られたテストサイトでの作業をお勧めします。
  • 自組織が管理しないWebアプリケーションへの検査は、場合によっては不正アクセスとして違法となる可能性があります。

2. クロスサイトスクリプティングとは

クロスサイトスクリプティングとは、リクエストヘッダやパラメータに含まれる情報を画面に出力する処理にエスケープ不備があり、第三者(攻撃者)が用意した悪意あるスクリプトが埋め込まれた結果、意図しない処理を実行されてしまう脆弱性です。 想定される被害として、偽ページの表示や認証情報の奪取があります。

クロスサイトスクリプティングには以下3つの分類があります。

  • 反射型XSS
  • 蓄積型XSS
  • DOM based XSS

上記のうち、DOM based XSSはJavaScriptから動的にHTMLを操作するアプリケーションにおいて動作します。
正規のスクリプトの動きを悪用し、不正なスクリプトを実行させることが特徴です。

自動の脆弱性診断などでよくあるパターンでは、対象のWebサーバに対して検査コードを含むリクエストを発行し、そのレスポンスの内容によって脆弱性が存在するかを調べますが、DOM-based XSSではクライアント上でJavaScriptが動作するまではXSSが発生しません。
そのため、ツールによっては検知が難しく、手動で検証が必要な脆弱性となります。

3. 検出パターン / 例

今回は「BurpSuite」というローカルプロキシツールを使って検査していきます。
セットアップや基本的な使い方について解説している記事などは検索すれば多数ヒットしますので、ここでは解説の対象外とします。
※BurpSuite自体は無料でダウンロードできます。

まず、検査の際には以下文字列がレスポンス内にあることをトリガーとします。
(ツールによっては下記の文字列がヒットすればDOM based XSSの可能性ありとして検出されるものもあります。)

  • innerHTML
  • document.write
  • javascript
  • location.href
  • eval
  • setTimeout
  • setInterval
  • Function
  • jQuery 他

検査文字列は以下の通りです。

  • javascript:alert(1)
  • “><svg onload=alert(1)>
  • <script>alert(1)</script> 他

※なお、トリガーとなる文字列や検査文字列は一例となります。

4. 検査手順詳細

① 検査したい目的の画面まで遷移します。

② 今回は検索処理なので、適当な文字列を挿入し検索を実行します。
  (SOCtestと検索してみました。)

→左側の検索結果画面には、「0 search results for ‘SOCtest’」と表示されています。

③ Burp上で実際のレスポンスrawデータを確認してみます。

→対象のレスポンス内で「SOCtest」と検索してみると、0 matchesとなっています。

④ レスポンスrawデータの中で、検索結果表示に該当する箇所を探してみます。
  今回は下記のように定義されていました。

⑤ 呼び出されているsearchMessageをもう一段掘り下げて確認してみると、scriptでこのように記載されています。

→innerHTMLとあるため、DOM-based XSSが発生する可能性があります。(トリガーパターン参照)

⑥ XSSの検査コードを挿入してみます。「”><svg onload=alert(1)>」(検査文字列パターン参照)

→javascriptのポップアップが表示されたことが分かります。

⑦ ここで改めて、レスポンスrawデータを確認してみますが、
  ”><svg onload=alert(1)>は出力されていないため、ツールによっては自動検知が困難となります。

5. おわりに

今回は、DOM based XSSの検出方法について紹介してきました。
攻撃の特性上、ツールでは検出しにくいという点は説明した通りですが、そのほかにもWAFやブラウザのXSSフィルタでもブロックしにくい厄介な脆弱性です。

まずはこういった攻撃手法があることを認識することが第一歩だと思います。

具体的な対策手法や、もっと深堀して検査したい!という方は、調べてみるとチートシートやより詳細に解説している記事がありますので是非ご参照ください。

ブログの著者欄

関 芙美恵

GMOインターネットグループ株式会社

2018年6月にGMOインターネットグループ株式会社に入社。 SOCチームの新規立ち上げから担当し、Webアプリケーションの脆弱性診断を内製化。現在は、AIを活用したデータマイニングや新規サービスのセキュリティ設計などを担当。芋焼酎と猫が好き

採用情報

関連記事

KEYWORD

採用情報

SNS FOLLOW

GMOインターネットグループのSNSをフォローして最新情報をチェック