FlawOpen

flawopen.com/XSS/Content-type sniffing

XSS durch MIME-Sniffing: Wie MIME-Verwechslungen den Browser erreichen

Referenzseite
Kurzantwort

Der Browser verwendet den Content-Type einer Antwort, um deren Bytes einzuordnen. Stellt eine Anwendung nutzergesteuerte Dateien mit fehlenden oder falschen Typen bereit, kann MIME-Sniffing das Verhalten bestimmter Antworten verändern. Sende den richtigen Typ und X-Content-Type-Options: nosniff und trenne Uploads vom Ursprung der Anwendung. Der Header reduziert ein Risiko der Browserinterpretation; er bereinigt keine Dateien und ersetzt keine Upload-Kontrollen.

Wie ein Upload die Dokumentgrenze überschreiten kann

Eine Anwendung nimmt Uploads an und stellt sie später vom eigenen authentifizierten Ursprung mit fehlendem oder falschem Content-Type bereit. Interpretiert der Browser die Antwort als HTML-Dokument, kann Markup in der Datei im Ursprung der Website aktiv werden. Beim Öffnen entsteht so das Risiko von gespeichertem XSS oder einer Inhaltsverwechslung. Dateiendung und vom Uploader angegebener Medientyp beweisen nicht das Format der Bytes.

Typ gezielt setzen und Downloads isolieren

RISKANT — Upload inline mit mehrdeutigen Headern ausgeliefert
HTTP/1.1 200 OK
Content-Type: application/octet-stream
// kein X-Content-Type-Options
// derselbe Ursprung wie die authentifizierte Anwendung
SICHERER — korrekter Typ, nosniff und isolierter Download
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Content-Disposition: attachment; filename="download.txt"

Verwende einen vom Server festgelegten Content-Type, der zu den Bytes passt; übernimm nicht die Angabe des Uploaders. X-Content-Type-Options: nosniff deaktiviert MIME-Sniffing für Dokumentantworten und blockiert Script- oder Stylesheet-Anfragen mit falschem MIME-Typ. Das ist keine universelle XSS-Korrektur: Stelle Uploads von einem anderen Ursprung bereit, bevorzuge Content-Disposition: attachment für Downloads und erzwinge Größen-, Berechtigungs- und Dateiprüfungen. Für Bilder und andere Inline-Medien liefere den verifizierten Typ aus und teste den tatsächlichen Browserpfad.

Häufige Fragen

Macht nosniff die Bereitstellung beliebiger Uploads sicher?

Nein. Der Header steuert die MIME-Interpretation im Browser sowie Script-/Stylesheet-Prüfungen, validiert oder bereinigt aber keine Datei, korrigiert keinen falschen Content-Type und isoliert keinen Upload desselben Ursprungs. Nutze für nicht vertrauenswürdige Dateien einen anderen Ursprung und Attachment-Downloads.

Quellen

Siehe auch Cross-Site-Scripting (XSS, CWE-79): Funktionsweise und Schutz in jeder Sprache — flawopen.com CSP und Output-Escaping: Brauchst du beides? Ist dangerouslySetInnerHTML in React sicher? Reicht DOMPurify für sicheres innerHTML? Ist Markdown-Rendering vor XSS sicher? Schützt Svelte standardmäßig vor XSS? Ist ein SVG-Upload ein XSS-Risiko?