45 Stimmen

IE8 XSS-Filter: Was bewirkt er wirklich?

Internet Explorer 8 hat eine neue Sicherheitsfunktion, eine XSS-Filter das versucht, Cross-Site-Scripting-Versuche abzufangen. Es wird folgendermaßen beschrieben:

Der XSS-Filter, eine neue Funktion in Internet Explorer 8, erkennt JavaScript in URL- und HTTP-POST-Anforderungen. Wenn JavaScript erkannt wird, sucht der XSS-Filter nach Hinweisen auf Reflektion, d. h. nach Informationen, die an die angreifende Website zurückgegeben würden, wenn die angreifende Anforderung unverändert übermittelt würde. Wird eine Reflexion erkannt, bereinigt der XSS-Filter die ursprüngliche Anforderung, so dass das zusätzliche JavaScript nicht ausgeführt werden kann.

Ich stelle fest, dass der XSS-Filter auch dann anspringt, wenn es keine "Anzeichen für eine Reflexion" gibt, und ich beginne zu glauben, dass der Filter einfach bemerkt, wenn eine Anfrage an eine andere Website gestellt wird und die Antwort JavaScript enthält.

Aber selbst das ist schwer zu überprüfen, weil die Wirkung zu kommen und zu gehen scheint. Der IE hat verschiedene Zonen, und gerade wenn ich denke, dass ich das Problem reproduziert habe, setzt der Filter nicht mehr ein, und ich weiß nicht, warum.

Hat jemand einen Tipp, wie man dagegen vorgehen kann? Wonach sucht der Filter wirklich? Gibt es eine Möglichkeit für einen guten Kerl, Daten an eine Website eines Drittanbieters zu POSTen, die HTML zurückgeben kann, um in einem iframe angezeigt zu werden und den Filter nicht auszulösen?

Hintergrund: Ich lade eine JavaScript-Bibliothek von einer Website eines Drittanbieters. Das JavaScript sammelt einige Daten aus der aktuellen HTML-Seite und sendet sie an die Website eines Drittanbieters, die mit etwas HTML antwortet, um in einem Iframe angezeigt zu werden. Um dies in Aktion zu sehen, besuchen Sie eine AOL Lebensmittel Seite und klicken Sie auf das Symbol "Drucken" direkt über dem Artikel.

59voto

bobince Punkte 512550

Was macht es wirklich? Sie ermöglicht es Dritten, auf eine fehlerhafte Version Ihrer Website zu verlinken.

Es wird aktiv, wenn [einige Bedingungen erfüllt sind und] es eine Zeichenkette in der Abfrageübermittlung sieht, die auch wortwörtlich auf der Seite vorhanden ist und von der es glaubt, dass sie gefährlich sein könnte.

Sie geht davon aus, dass, wenn <script>something()</script> sowohl in der Abfragezeichenfolge als auch im Seitencode vorkommt, dann muss es daran liegen, dass Ihr serverseitiges Skript unsicher ist und die Zeichenfolge direkt als Markup ohne Escaping wieder ausgibt.

Abgesehen von der Tatsache, dass es sich um eine absolut gültige Abfrage handelt, die jemand zufällig eingegeben hat, ist es natürlich auch möglich, dass sie übereinstimmen, weil jemand die Seite angeschaut und absichtlich einen Teil davon kopiert hat. Zum Beispiel:

http://www.bing.com/search?q=%3Cscript+type%3D%22text%2Fjavascript%22%3E

Wenn Sie das im IE8 befolgen, habe ich Ihre Bing-Seite erfolgreich sabotiert, so dass sie Skriptfehler ausgibt und die Pop-out-Ergebnisse nicht funktionieren. Im Wesentlichen gibt es einem Angreifer, dessen Link verfolgt wird, die Lizenz, Teile der Seite, die ihm nicht gefallen, herauszusuchen und zu deaktivieren - und das könnte sogar andere sicherheitsrelevante Maßnahmen wie Framebuster-Skripte umfassen.

Was betrachtet der IE8 als "potenziell gefährlich"? Viel mehr und viel seltsamere Dinge als nur dieses Skript-Tag. z.B. . Darüber hinaus scheint er eine Reihe "gefährlicher" Vorlagen mit einem Textmustersystem (vermutlich Regex) abzugleichen, anstatt irgendeine Art von HTML-Parser zu verwenden, wie den, der schließlich die Seite selbst analysiert. Ja, wenn Sie IE8 verwenden, parst Ihr Browser HTML mit Regex.

XSS-Schutz' durch Betrachtung der Zeichenfolgen in der Abfrage ist völlig schwachsinnig . Sie kann nicht "repariert" werden; das Konzept selbst ist von Natur aus fehlerhaft. Abgesehen von dem Problem, dass es sich einmischt, wenn es nicht erwünscht ist, kann es Sie nur vor den einfachsten Angriffen schützen - und die Angreifer werden solche Blöcke sicher umgehen, wenn der IE8 weiter verbreitet ist. Wenn Sie vergessen haben, Ihre HTML-Ausgabe korrekt zu entschlüsseln, sind Sie immer noch angreifbar; alles, was Ihnen der XSS-"Schutz" zu bieten hat, ist ein falsches Gefühl von Sicherheit. Leider scheint Microsoft dieses falsche Gefühl der Sicherheit zu mögen; es gibt einen ähnlichen XSS-"Schutz" auch in ASP.NET, auf der Serverseite.

Wenn Sie also eine Ahnung von Webapp-Authoring haben und die Ausgabe in HTML wie ein guter Junge ordnungsgemäß escapen, ist es definitiv eine gute Idee, diesen unerwünschten, unpraktikablen und falschen Eingriff zu deaktivieren, indem Sie den Header ausgeben:

X-XSS-Protection: 0

in Ihren HTTP-Antworten. (Und mit ValidateRequest="false" in Ihren Seiten, wenn Sie ASP.NET verwenden).

Für alle anderen, die immer noch Strings in PHP aneinanderreihen, ohne darauf zu achten, richtig zu kodieren... nun, man kann es auch gleich anlassen. Erwarten Sie nicht, dass es Ihre Benutzer wirklich schützt, aber Ihre Website ist bereits kaputt, wen kümmert es also, wenn sie noch ein bisschen mehr kaputt geht, oder?

Um es in Aktion zu sehen, besuchen Sie eine AOL Food-Seite und klicken Sie auf das Symbol "Drucken" direkt über dem Artikel.

Ah ja, ich sehe, dass dies im IE8 nicht funktioniert. Es ist nicht sofort ersichtlich, wo der IE den Hack zum Inhalt gemacht hat, der die Ausführung gestoppt hat, obwohl... die einzige domänenübergreifende Anfrage, die ich sehen kann, die ein Kandidat für den XSS-Filter ist, ist diese an http://h30405.www3.hp.com/print/start :

POST /print/start HTTP/1.1
Host: h30405.www3.hp.com
Referer: http://recipe.aol.com/recipe/oatmeal-butter-cookies/142275?

csrfmiddlewaretoken=undefined&characterset=utf-8&location=http%253A%2F%2Frecipe.aol.com%2Frecipe%2Foatmeal-butter-cookies%2F142275&template=recipe&blocks=Dd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%28%2B.%2F%2C%28%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk%7Cpspm%3Db3%3Fd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%7D%2F%27%2B%2C.%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk...

dass blocks Der Parameter setzt sich seitenweise mit weiterem Kauderwelsch fort. Vermutlich gibt es etwas Dort spiegelt sich das (zufällig?) im zurückgegebenen HTML wider und löst eine der verkorksten Vorstellungen des IE8 aus, wie ein XSS-Exploit aussieht.

Um dieses Problem zu beheben, muss HP dafür sorgen, dass der Server unter h30405.www3.hp.com die X-XSS-Protection: 0 Kopfzeile.

25voto

EricLaw Punkte 55641

Sie sollten mir (ericlaw@microsoft) eine Netzwerkaufzeichnung (www.fiddlercap.com) des Szenarios schicken, das Sie für fehlerhaft halten.

Der XSS-Filter funktioniert wie folgt:

  1. Ist XSSFILTER für diesen Prozess aktiviert?
    Wenn ja - weiter zur nächsten Prüfung Wenn nein - den XSS-Filter umgehen und mit dem Laden fortfahren
  2. Handelt es sich um ein "Dokument" (wie ein Frame, nicht um einen Subdownload)? Wenn ja - weiter zur nächsten Prüfung Wenn nein - den XSS-Filter umgehen und mit dem Laden fortfahren
  3. Handelt es sich um eine HTTP/HTTPS-Anfrage? Wenn ja - weiter zur nächsten Prüfung Wenn nein - den XSS-Filter umgehen und mit dem Laden fortfahren
  4. Enthält RESPONSE einen x-xss-protection-Header? Ja: Wert = 1: XSS-Filter aktiviert (keine Urlaktionsprüfung) Wert = 0: XSS-Filter deaktiviert (keine Urlaktionsprüfung) Nein: weiter zur nächsten Prüfung
  5. Lädt die Website in einer Zone, in der URLAction die XSS-Filterung ermöglicht? (Standardmäßig: Internet, Vertrauenswürdig, Eingeschränkt) Wenn ja - fahren Sie mit der nächsten Prüfung fort Falls nein - XSS-Filter umgehen und mit dem Laden fortfahren
  6. Ist ein Cross-Site-Request? (Referrer-Header: Stimmt der endgültige (post-redirect) vollqualifizierte Domänenname im Referrer-Header der HTTP-Anfrage mit dem vollqualifizierten Domänennamen der abgerufenen URL überein?) Wenn ja - den XSS-Filter umgehen und mit dem Laden fortfahren Wenn nein - dann sollte die URL in der Anfrage kastriert werden.
  7. Zeigt die Heuristik an, dass die RESPONSE-Daten von unsicheren REQUEST DATA stammen? Wenn ja - ändern Sie die Antwort.

Die genauen Einzelheiten von Nr. 7 sind ziemlich kompliziert, aber im Grunde können Sie sich vorstellen, dass der IE einen Abgleich der Anfragedaten (URL/Post Body) mit den Antwortdaten (Skriptkörper) vornimmt, und wenn sie übereinstimmen, dann werden die Antwortdaten geändert.

Im Fall Ihrer Website sollten Sie sich den Text der POST ansehen, um http://h30405.www3.hp.com/print/start und die entsprechende Antwort.

8voto

Roland Bouman Punkte 29957

Eigentlich ist es schlimmer, als es scheint. Der XSS-Filter kann sichere Websites unsicher machen. Lesen Sie hier: http://www.h-online.com/security/news/item/Security-feature-of-Internet-Explorer-8-unsafe-868837.html

Aus diesem Artikel:

Google deaktiviert jedoch den XSS-Filter des IE, indem es die X-XSS-Protection: 0 sendet, was ihn immun macht.

Ich weiß nicht genug über Ihre Website, um zu beurteilen, ob dies eine Lösung sein könnte, aber Sie können es wahrscheinlich versuchen. Eine ausführlichere technische Diskussion über den Filter und wie man ihn deaktiviert, finden Sie hier: http://michael-coates.blogspot.com/2009/11/ie8-xss-filter-bug.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X