OWASP ZAP 10031 User Controllable HTML Element Attribute (Potential XSS)について

Web開発

この記事について

OWASP ZAPでWebアプリケーションをスキャンしているときに、たまに見かけるけどよくわからないアラートってありますよね。気にはなるんだけど重要度が低くて、調べても情報が少なく、気にはなるけど、時間がないからスルーしがちなアラートたち。

今回は「User Controllable HTML Element Attribute (Potential XSS)」というアラートを調査してみました。

ここではOWASP ZAPの利用方法等は解説しませんので、他の記事を参照してください。

このアラートの公式の説明

英文

This check looks at user-supplied input in query string parameters and POST data to identify where certain HTML attribute values might be controlled. This provides hot-spot detection for XSS (cross-site scripting) that will require further review by a security analyst to determine exploitability.

https://www.zaproxy.org/docs/alerts/10031/

日本語訳(Google 翻訳)

このチェックでは、クエリ文字列パラメーターおよび POST データ内のユーザー指定の入力を調べて、特定の HTML 属性値が制御されている可能性がある場所を特定します。これにより、XSS (クロスサイト スクリプティング) のホットスポット検出が提供されます。悪用可能性を判断するには、セキュリティ アナリストによるさらなるレビューが必要になります。

結論:このアラートは何を示しているか

このアラートが出る時、スキャン対象のページを表示する際に、Getリクエスト時はクエリパラメータ内に、Postリクエスト時はリクエストBody内に何か情報を送信しているはずです。

このとき、送信する情報はGetであれ、Postであれ、key=valueの形でデータを送信するのが一般的です。

ここで指定されたvalueの値が、スキャン対象ページのHTMLの要素の属性の値内の最初に出現した場合、このアラートが表示されます。

valueの値は、Webアプリケーションにアクセスしている利用者は簡単に書き換えができるため、ここにXSSを実現するコード(例:「”><script>alert(“xss”)</script><“」等)を挿入されると任意のJavaScriptが実行されてしまいます。

このアラートが出た場合、すべての状況においてXSSが成立するわけではありませんが、なぜこのアラートが出ているかを念の為調べておく必要があります。

このアラートはスルーしても大丈夫?

できるだけしっかり検証しておいた方がいいでしょう

アラートのリスクレベルはInformationalでスルーしがちですが、原因をきっちりと調べないまま、スルーをしてしまうと危険です。場合によっては場合によっては顧客のアカウントが乗っ取られたり、勝手に買い物されたりする可能性があります。

アラートを出す方法

このアラートはほとんどのページで出現する可能性があります。

最も簡単なアラート再現手順を示します。例えばこのブログのトップページに以下のようにパラメータを改竄してアクセスしてみてください。

https://spekiyoblog.com/?key=home

きっとこのアラートが発生するはずです。

これは、このブログのbodyタグのclass属性の値が「home」から始まっているからです。

任意のページであっても、class属性やvalue属性、id属性などで使用している値をクエリパラメータのvalue部分に指定してアクセスするとこのアラートが発生します。

どうしたらいいの?

まず問題点を探し出すために、アラートを表示しているOWASP ZAPの画面を開きましょう。

アラートを開く

左下のアラートが表示されているペインから、出力されているアラートを開き、URLを選択します。クリックすることで、そのアラートが発生したリクエストが右上のペインに表示されるようにます。

レスポンスを表示

右上のペインから「レスポンス」タブを開き、アクセス時のレスポンス内容を開きます。

レスポンスのHTMLが表示されているペインを右クリック

レスポンス内容が表示されているペインを右クリックし、表示されるメニューから検索を選択し、アクセスする際に利用しているパラメータの値で検索を行います。

見つかった箇所を検証する

見つかった箇所が以下のような場合問題ないでしょう。

  • 固定のテキストであり、パラメータを直接表示していない場合
  • パラメータの値を出力しているが、XSS対策をしっかりしている場合
  • パラメータの値を出力しているが、値がDBに登録されているかどうかの検証を済みで、無効なデータが送信されてきた場合はそもそもページを表示しない場合

以上の3点以外にも問題がない場合があると思います。ただ、送信されてきた値をそのまま表示してしまっている場合は、非常に危険なので注意しましょう。条件が整えばセッションハイジャックも可能になります。

情報元

OWASP ZAPはソースコードが公開されているので、コードを解析しました。

まとめ

このアラートは原因によっては非常に危険です。

できるだけスルーせず、検証しましょう。ただ、条件はシンプルなので、理解してしまえば検証は簡単だと思います。

以上です。何かのお役に立てれば幸いです。

タイトルとURLをコピーしました