EnableHeaderChecking=true は Http ヘッダー インジェクション攻撃を防ぐのに十分ですか?
質問
[ があれば十分ですか?System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking
](http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx) に設定 true
(デフォルト) 応答分割などの Http ヘッダー インジェクション攻撃を完全に防ぐには?
ホワイトボックスペネトレーションテストツール(fortify)が、悪用可能なhttpヘッダーインジェクションの問題を報告しているため、質問しています。 HttpResponse.Redirect
と Cookie を使用しましたが、攻撃を成功させる方法は見つかりませんでした。(編集:.EnableHeaderChecking がオンになっています..)
解決
私はしばらくこれを観察してきましたが、この設定は ヘッダーチェックを有効にする に true
実際、http ヘッダー インジェクション攻撃を防ぐのに十分です。
「反映された」ASP.NET コードを見ると、次のことがわかりました。
- カスタム HTTP ヘッダーを HTTP 応答に追加する方法は 1 つだけあり、それは HttpResponse.AppendHeader 方法
- HttpResponse.AppendHeader どちらか
HttpResponseHeader
インスタンスは、次のような既知のヘッダーの前に作成されます。 リダイレクト場所 または コンテンツタイプ 送られた (HttpResponse.GenerateResponseHeaders
)- の
HttpResponseHeader
コンストラクターがチェックする ヘッダーチェックを有効にする 設定と通話HttpResponseHeader.MaybeEncodeHeader
に設定するとtrue
HttpResponseHeader.MaybeEncodeHeader
改行文字を正しくエンコードすることで、HTTP ヘッダー インジェクション攻撃を不可能にします
以下は、私がテストした方法を大まかに示すスニペットです。
// simple http response splitting attack
Response.AddHeader("foo", "bar\n" +
// injected http response, bad if user provided
"HTTP/1.1 200 OK\n" +
"Content-Length: 19\n" +
"Content-Type: text/html\n\n" +
"<html>danger</html>"
);
上記は明示的に有効にした場合にのみ機能します ヘッダーチェックを有効にする オフ:
<httpRuntime enableHeaderChecking="false"/>
Fortify は単純に構成を考慮しません (設定 ヘッダーチェックを有効にする 明示的には効果がありませんでした)、したがって いつも この種の問題を報告します。
他のヒント
私の知る限り、これで十分であり、デフォルトでオンになっているはずです。
Fortify はデプロイメントなどで構成を変更するかのように多層防御を考えているだけだと思います。
おそらく、Fortify がそれを理解するほど賢明ではないので、構成で厳密に設定していないのではないかと思います。
確認する最良の方法はそれを悪用することです:)
- フィドラーのコピーを入手してください
- リクエストを傍受する
- 新しい行を挿入してみてください
- 挿入した新しい行が HTTP 応答に含まれているかどうかを確認します。
のEnableHeaderCheckingは信頼できないデータです。あなたがリダイレクトにクッキーから直接データを渡している場合は、多分結果のヘッダは信頼できるとみなされ、\ rを\ n個の値がエスケープされません。
ヨーゼフ、HttpResponse.AppendHeader()信頼できないデータはHTTP応答ヘッダーを入力することができる唯一の場所ではありません。
データは、キャリッジリターン(またはキャリッジ・リターンとして解釈されるもの)が含まれている場合、クッキーまたはHTTPリダイレクトで終わる攻撃者からのすべてのデータは、新しいヘッダを書き込むことができます。
一般的に、それは周りに座ってエクスプロイトをうまくしようとするよりも、あなたのデータを検証するために、あなたの時間をより良い使用です。チャンスは、ハッカーがあなたや私があるよりも、この面で優れてしようとしているされます。