web-dev-qa-db-ja.com

Request.getHeader( "Host")は脆弱ですか?

以下がコードスニペットである場合、あなたの提案は何ですか?

<script type="text/javascript" src="<%=request.getHeader("Host")%>/XXX/xxx.js"></script>    

これはXSSの明確な例ですか?はいの場合、攻撃者が使用できる攻撃シナリオは何ですか?

7
p_upadhyay

これはXSSの脆弱性ですが、悪用するのは非常に困難です。たとえば、次のURLを見てください。

http://anything."><script>xss</script>.example.com/aa/bb

このURLに移動すると、HostパラメーターにXSSペイロードが含まれますが、次のようになります。

  1. DNSはこの奇妙なドメインを脆弱なアプリケーションのあるIPに解決する必要があります(DNSが非常に寛容でない限り、攻撃者はDNSポイズニングを必要とします)
  2. ブラウザはホスト名のエンコードをスキップする必要があります。通常、ホスト名はブラウザによってエンコードされたパーセントです(つまり、<script>%3Cscript%3Eになります)。もちろん、ブラウザ外でリクエストを偽造することもできます。
  3. ターゲットサーバーは、脆弱なWebサイトのコンテキストで要求を処理する必要がありますが、これはそれほど単純ではありません。たとえば、このアプリケーションがApacheにVirtualHostとしてインストールされている場合、このHostヘッダーはどのVirtualHostとも一致せず、フォールバックまたは最初のVirtualHost

このXSSが格納され、反映されていない場合は、(1)DNSおよび(2)エンコード要件をスキップできるため、はるかに危険です。ブラウザの外に手動のHTTPリクエストを送信することで、ペイロードを植えることができます。このペイロードは、脆弱なサイトの「標準」のブラウザベースの訪問者に表示されます。

結論として、これはXSSの脆弱性ですが、悪用される可能性は低いです。それでも、アプリケーションは表示されているHostヘッダーをエスケープして修正する必要があります。

8