EnableHeaderChecking=true は Http ヘッダー インジェクション攻撃を防ぐのに十分ですか?

StackOverflow https://stackoverflow.com/questions/869361

  •  22-08-2019
  •  | 
  •  

質問

[ があれば十分ですか?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 コードを見ると、次のことがわかりました。

  1. カスタム HTTP ヘッダーを HTTP 応答に追加する方法は 1 つだけあり、それは HttpResponse.AppendHeader 方法
  2. HttpResponse.AppendHeader どちらか
    • のインスタンスを作成します HttpResponseHeader (内部)
    • または電話 HttpResponseHeader.MaybeEncodeHeader (のために IIS7WorkerRequests)
    • または、それぞれのプロパティを割り当てます (次のような既知のヘッダーの場合) リダイレクト場所 または コンテンツタイプ)
  3. HttpResponseHeader インスタンスは、次のような既知のヘッダーの前に作成されます。 リダイレクト場所 または コンテンツタイプ 送られた (HttpResponse.GenerateResponseHeaders)
  4. HttpResponseHeader コンストラクターがチェックする ヘッダーチェックを有効にする 設定と通話 HttpResponseHeader.MaybeEncodeHeader に設定すると true
  5. 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リダイレクトで終わる攻撃者からのすべてのデータは、新しいヘッダを書き込むことができます。

一般的に、それは周りに座ってエクスプロイトをうまくしようとするよりも、あなたのデータを検証するために、あなたの時間をより良い使用です。チャンスは、ハッカーがあなたや私があるよりも、この面で優れてしようとしているされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top