Ist EnableHeaderChecking = wahr genug, um Http Header Injection-Angriffe zu verhindern?

9

Reicht es aus, [ System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking ] ( Ссылка auf true (Standard) gesetzt, um Http Header Injection Attacken wie Response Splitting etc. zu verhindern?

Ich frage, weil ein White-Box-Penetrationstest-Tool (Fortify) auswertbare http-Header-Injection-Probleme mit HttpResponse.Redirect und Cookies meldet, aber ich habe keine Möglichkeit gefunden, einen Angriff erfolgreich durchzuführen. ( Bearbeiten : .. und EnableHeaderChecking ist aktiviert ..)

    
Josef Pfleger 15.05.2009, 15:30
quelle

4 Antworten

6

Ich habe mich schon seit einiger Zeit damit befasst und die Schlussfolgerung gezogen, dass EnableHeaderChecking bis true ist tatsächlich gut genug, um HTTP-Header-Injection-Angriffe zu verhindern.

Beim Betrachten des "reflektierten" ASP.NET-Codes habe ich folgendes gefunden:

  1. Es gibt nur eine Möglichkeit, einer HTTP-Antwort benutzerdefinierte HTTP-Header hinzuzufügen, nämlich den HttpResponse.AppendHeader Methode
  2. HttpResponse.AppendHeader entweder
    • erstellt Instanzen von HttpResponseHeader (intern)
    • oder Aufrufe HttpResponseHeader.MaybeEncodeHeader (für IIS7WorkerRequests )
    • oder weist die entsprechenden Eigenschaften zu (für bekannte Header wie RedirectLocation ) oder ContentType )
  3. HttpResponseHeader Instanzen werden vor bekannten Headern wie RedirectLocation oder ContentType werden gesendet ( HttpResponse.GenerateResponseHeaders )
  4. Der HttpResponseHeader -Konstruktor prüft die Enable headerChecking Einstellung und ruft HttpResponseHeader.MaybeEncodeHeader auf, wenn auf true gesetzt
  5. HttpResponseHeader.MaybeEncodeHeader kodiert korrekt Newline-Zeichen, die HTTP-Header-Injection-Angriffe unmöglich machen

Hier ist ein Ausschnitt, um grob zu demonstrieren, wie ich getestet habe:

%Vor%

Das obige funktioniert nur, wenn Sie explizit aktivieren EnableHeaderChecking aus:

%Vor%

Fortify berücksichtigt die Konfiguration einfach nicht (Einstellung EnableHeaderChecking hatte explizit keine Wirkung" und immer meldet diese Art von Problemen.

    
Josef Pfleger 22.05.2009, 15:30
quelle
1

AFAIK es ist genug und es sollte standardmäßig aktiviert sein.

Ich denke, Fortify denkt gerade über die Verteidigung in der Tiefe nach, als ob Sie die Konfiguration in der Bereitstellung ändern würden.

Ich nehme an, du hast es in deiner Konfiguration nicht genau festgelegt, wenn du es vielleicht getan hast, ist Fortify nicht so schlau, das zu verstehen.

Der beste Weg zur Bestätigung ist die Nutzung:

  • Hol dir einfach eine Kopie von fiddler
  • Abfangen der Anfrage
  • Versuchen Sie, eine neue Zeile zu injizieren
  • Sehen Sie, ob die neue Zeile, die Sie gerade injiziert haben, in der HTTP-Antwort enthalten ist oder nicht.
dr. evil 19.05.2009 09:45
quelle
0

EnableHeaderChecking ist nur für nicht vertrauenswürdige Daten. Wenn Sie Daten direkt von einem Cookie an eine Weiterleitung übergeben, werden die resultierenden Header möglicherweise als vertrauenswürdig angesehen, und die Werte werden nicht maskiert.

    
nessence 19.05.2009 09:38
quelle
0

Josef, HttpResponse.AppendHeader () ist nicht der einzige Ort, an dem nicht vertrauenswürdige Daten in die HTTP Response Headers eingegeben werden können.

Alle Daten des Angreifers, die in Cookies oder HTTP-Weiterleitungen landen, können neue Header schreiben, wenn die Daten einen Wagenrücklauf enthalten (oder alles, was als Wagenrücklauf interpretiert wird).

Im Allgemeinen ist es viel besser, Ihre Zeit für die Validierung Ihrer Daten zu nutzen, als herumzusitzen und Exploits auszuarbeiten. Wahrscheinlichkeiten sind, die Hacker werden darin besser sein als du oder ich.

    
Douglas Held 22.07.2010 23:06
quelle

Tags und Links