web-dev-qa-db-ja.com

IISホストヘッダー攻撃

IISおよびASPはApacheおよびNginxで見られたのと同じホストヘッダー攻撃に対して脆弱ですか?特にHTTPホストヘッダーを使用してパスワードをリセットする攻撃これらの特定の攻撃は、SERVER変数とHost変数を使用します。

どんな洞察や助けも大歓迎です。

3
Brian

「ホスト」ヘッダーはhttpプロトコルの一部であり、脆弱なアプリケーションはこのヘッダーの値を適切な検証なしにアプリケーションコードに挿入するため脆弱です。これは、Apache/Nginxでホストされているアプリケーションだけが脆弱であるとは限らないことを意味します。つまり、答えは「はい」です。使用する言語やサーバーの種類に関係なく、アプリケーションは脆弱になる可能性があります。クライアント側からの操作は簡単なので、このヘッダーから情報を引き出さないでください。

2
Kotzu

私はコッツに同意します、コメントしたと思いますが、スクリーンショットを投稿できるようにするために、私はこれを回答として投稿しています。

短い答え:
はい、IISおよびASP.NETスタックでホストヘッダー攻撃が可能です。

パスワードリセットポイズニング:
これは、コードが適切に記述されていない場合に発生します。ユーザーがパスワードをリセットするためのリンクを要求したときに、Webサイトはそのユーザーのメールアドレスにシークレットトークン付きのリンクを送信します。

そのリンクがhttp(s):// [genuinesite] /resetpassword.aspx?someguidであるとします。そしてguidは、誰がパスワードをリセットするかを知っているデータベースのレコードへのキーになります。

ただし、そのリンクを作成するためのコードが適切に記述されていない場合、プロトコル+ホストヘッダー+ "/resetpassword.aspx?"が使用されます。 + GUID、
その後、攻撃者はHostヘッダーを自分のWebサイトに簡単に渡すことができるため、本物のサイトはhttp(s):// [jenuinesite] /resetpassword.aspx?someguidのようなリンクを含む電子メールを生成して送信します
攻撃者はそこにそのサイトを持ち、クエリ文字列パラメーターを取得し、ユーザーに代わってパスワードをリセットすることができます実際にメールからリンクをクリックします。そして、通常、電子メールは本物のサイトから送信されるため、通常は行われます。

多くの一般的なソフトウェアコンポーネントにこの脆弱性があります。

キャッシュポイズニング:
キャッシュはHTTPレスポンススプリニングによっても害を受ける可能性がありますが、これも今日では一般的ではありませんが、ここではホストヘッダーについて話しています。キャッシュは現在ホスト対応であるため、ホストヘッダーを使用すると、誰かがキャッシュを汚染しようとした場合、本物のサイトのキャッシュとは別に保持されます。

基本的に、htmlを生成(レンダリング)しているときに、コードのどこかにホストに基づいてhtml/javascriptを生成する貧弱なコードがあると、脆弱になる可能性があります。レンダリングされたhtmlのある種のサーバー側またはプロキシキャッシュがある場合。

コードが Home のようにhtmlを生成しているとすると、Hostヘッダーを操作することで、Homeのようにすることができます。

そして、そのページはサーバー側でキャッシュされ、攻撃者はそのキャッシュされたページが提供されるすべてのユーザーのCookieを盗むことができます。

明らかに、攻撃者はPragma:no-cacheを使用して、最初にキャッシュされたページを削除してから、Hostヘッダー操作バージョンでキャッシュを配置します。

しかし、私が言ったように、ASP.NETとIISの世界では、ホストヘッダーによるキャッシュポイズニングはあまり見たことがありませんが、人々が常に貧弱なコードを書いているとは知りません。

これを防ぐ方法:
IISでホストしているWebサイトが1つだけの場合でも、IISで適切なバインディング設定を行うのが最も簡単な方法(およびベストプラクティスの1つ)だと思います。

1つのWebサイトに複数の許可されたホスト名を持つこともできます。

IIS Website Binding

このように、誰かがホストヘッダーを変更した場合、IISのWebサイトに到達することすらありません。

2
Vishalgiri