DOM XSS
Englisch: DOM-based Cross-Site Scripting (DOM XSS, Type 0 XSS)
DOM XSS ist eine Schwachstellenklasse clientseitiger Webanwendungen, bei der Schadcode nicht durch den Server, sondern im Browser des Nutzers zur Laufzeit in das Document Object Model (DOM) injiziert wird. MITRE klassifiziert DOM XSS als Subtyp von CWE-79 (Improper Neutralization of Input During Web Page Generation) und unterscheidet ihn von Reflected XSS (Typ 1) und Stored XSS (Typ 2) dadurch, dass der Angriffspfad vollständig clientseitig verläuft.
Normative Grundlage: MITRE CWE-79 (Improper Neutralization of Input During Web Page Generation), DOM-based XSS als Subtyp; ISO/IEC 27001:2022 Annex A 8.28 (Secure Coding)
Hintergrund und normative Einordnung
Der Begriff DOM XSS wurde in der Sicherheitsforschung bereits 2005 durch Amit Klein formalisiert, bevor MITRE ihn als Subtyp in CWE-79 aufnahm. Die CWE-Klassifikation beschreibt alle XSS-Varianten als Manifestationen desselben Grundproblems: unzureichende Neutralisierung von Nutzereingaben vor ihrer Verwendung in webseiten-generierenden Ausgabepfaden. Was DOM XSS von seinen serverseitigen Varianten trennt, ist der Ausführungskontext: Die Injektion geschieht im Browser, nachdem die Seite den Server bereits verlassen hat. Typische Source-Vektoren sind URL-Fragmente (location.hash, location.search), postMessage-Events, document.referrer oder localStorage-Einträge. Typische Sink-Vektoren sind JavaScript-Funktionen, die unkontrollierte Strings direkt in den DOM schreiben, allen voran innerHTML, outerHTML, document.write und eval().
In der deutschen Compliance-Landschaft ist DOM XSS primär über zwei Regelwerke adressiert. ISO/IEC 27001:2022 Annex A 8.28 fordert Organisationen auf, Prinzipien sicherer Softwareentwicklung anzuwenden, einschließlich Input-Validierung, Output-Encoding und sicherer Verwendung von APIs, alle drei Prinzipien schließen DOM-XSS-Vektoren direkt ein. Der BSI IT-Grundschutz Baustein APP.3.1 (Webanwendungen und Webservices, Edition 2023) verlangt in der Standardanforderung APP.3.1.A3 explizit die Absicherung von Webanwendungen gegen Injection-Angriffe einschließlich Cross-Site-Scripting durch kontextabhängiges Encoding. Der BSI-Baustein CON.10 (Entwicklung von Webanwendungen) ergänzt diese Betreiberperspektive um Entwicklungsrichtlinien zur Verhinderung clientseitiger Injektionen. Mit dem EU Cyber Resilience Act (Verordnung (EU) 2024/2847) rückt DOM XSS auch für Produkthersteller in den Pflichtrahmen: Annex I Part I verlangt, dass Produkte mit digitalen Elementen ohne bekannte ausnutzbare Schwachstellen ausgeliefert werden; Part II verpflichtet Hersteller zu einem dokumentierten Schwachstellen-Handling-Prozess. Für Unternehmen, die hier Unterstützung benötigen, bietet SECURAM CRA-Beratung (Cyber Resilience Act) einen strukturierten Einstieg in die CRA-Konformität.
Normative Bezüge:
Vorgehen in der Praxis
Die systematische Adressierung von DOM XSS folgt in der Praxis einem vierstufigen Ablauf, der sich aus den Anforderungen von ISO/IEC 27001:2022 Annex A 8.28, BSI IT-Grundschutz APP.3.1 und den Vulnerability-Handling-Vorgaben des CRA Annex I Part II ableiten lässt. Der Ablauf deckt Erkennung, Prüfung, Behebung und Nachweise für Auditoren ab.
Die effektivste Einzelmaßnahme gegen DOM XSS ist die konsequente Trennung von Daten und Code im DOM: Wer statt innerHTML ausschließlich textContent oder createElement für dynamische Inhalte verwendet, eliminiert den primären Sink-Vektor, ohne CSP oder Sanitization-Bibliotheken zu benötigen, dieses Prinzip entspricht dem in ISO/IEC 27002:2022 Clause 8.28 geforderten Grundsatz der sicheren API-Nutzung.
Abgrenzung zu verwandten Begriffen
| Begriff | Fokus | Verhältnis zu DOM XSS |
|---|---|---|
| Reflected XSS | Serverseitige Reflexion von Eingaben in der HTTP-Antwort | Reflected XSS (CWE-79 Typ 1) entsteht, wenn ein Server Nutzereingaben aus dem HTTP-Request ungefiltert in die HTTP-Antwort einbettet. Im Gegensatz zu DOM XSS passiert der Schadcode den Server und kann dort durch serverseitige Eingabefilterung abgefangen werden. DOM XSS umgeht diesen Schutz vollständig, da die Injektion erst nach der Serverantwort im Browser stattfindet. |
| Stored XSS | Persistente Speicherung von Schadcode in der Datenbank | Stored XSS (CWE-79 Typ 2) schreibt den Angriffscode dauerhaft in einen Datenspeicher (Datenbank, Log, Kommentarfeld) und infiziert jeden Seitenaufruf. DOM XSS hingegen ist meist flüchtig und an einen spezifischen, präparierten Link gebunden. Beide Typen können sich überlagern, wenn eine Webanwendung gespeicherte Daten ohne Encoding per JavaScript in den DOM schreibt. |
| Cross-Site Request Forgery (CSRF) | Erzwingen authentifizierter Aktionen im Namen des Opfers | CSRF (CWE-352) missbraucht die Sitzungsauthentifizierung eines eingeloggten Nutzers, um serverseitige Aktionen auszuführen, ohne Schadcode im Browser des Opfers auszuführen. DOM XSS führt dagegen beliebigen JavaScript-Code im Kontext der Zieldomain aus und kann dadurch CSRF-Token auslesen oder CSRF-Angriffe automatisieren. Beide Schwachstellen sind verwandt, aber strukturell unterschiedliche Klassen. |
Typische Fehler und wie ihr sie vermeidet
- Serverseitige Filterung als ausreichend betrachten: Der häufigste Irrtum bei DOM XSS ist die Annahme, ein serverseitiger WAF- oder Input-Filter schütze vor allen XSS-Varianten. Da der DOM-XSS-Angriffsvektor vollständig im Browser abläuft, oft über location.hash, das nie zum Server gesendet wird, greifen serverseitige Kontrollen nicht. MITRE CWE-79 weist explizit darauf hin, dass die Filterung allein in einem der beteiligten Layer (Server oder Client) keine ausreichende Mitigation darstellt.
- innerHTML ohne Sanitization für dynamische Inhalte verwenden: Entwickler nutzen innerHTML aus Bequemlichkeit für dynamisches Rendering. Jede Zuweisung von nicht sanitisierten Strings an innerHTML ist ein potenzieller DOM-XSS-Sink. ISO/IEC 27002:2022 Clause 8.28 fordert die sichere Nutzung von APIs; innerHTML mit nicht vertrauenswürdigen Daten entspricht explizit nicht diesem Standard. BSI CON.10 verlangt, dass Ausgabe-Encoding und Sink-Kontrollen in Entwicklungsrichtlinien festgelegt werden.
- Content Security Policy nur als Audit-Nachweis ohne Wirkung deployen: Viele Organisationen setzen eine CSP-Header um, lassen jedoch unsafe-inline und unsafe-eval zu, um Kompatibilitätsprobleme zu vermeiden. Eine CSP mit diesen Direktiven bietet keinen wirksamen Schutz gegen DOM XSS. Eine wirksame CSP erfordert die vollständige Eliminierung von inline Scripts und den Einsatz von Nonces oder Hashes, eine Anforderung, die in BSI APP.3.1 und ISO/IEC 27002:2022 Clause 8.28 durch den Verweis auf bewährte Sicherheitspraktiken impliziert ist.
- Fehlende Abdeckung von DOM-XSS-Sinks im DAST: Standard-DAST-Scans testen häufig nur Reflected und Stored XSS-Varianten über HTTP-Request/Response-Zyklen. DOM-XSS-Sinks, die über URL-Fragmente, postMessage oder Event-Handler erreichbar sind, bleiben ohne speziell konfigurierte, browserbasierte Testumgebungen unentdeckt. NIST SP 800-115 betont, dass Web Application Testing die Kombination aus automatisierten Scans und manuellen Prüftechniken erfordert, um alle Angriffsvektoren abzudecken.
Relevanz im regulatorischen Kontext
Die Verordnung (EU) 2024/2847 (Cyber Resilience Act) schafft ab dem 11. Dezember 2027 einen verbindlichen Pflichtrahmen für Hersteller von Produkten mit digitalen Elementen. Annex I Part I verlangt, dass solche Produkte ohne bekannte ausnutzbare Schwachstellen auf den Markt gebracht werden, DOM XSS-Schwachstellen, die zum Zeitpunkt des Inverkehrbringens bekannt sind, erfüllen diesen Anspruch nicht. Annex I Part II §1 verpflichtet Hersteller zusätzlich, Schwachstellen einschließlich ihrer Komponenten zu dokumentieren und unverzüglich zu beheben; §3 fordert regelmäßige Sicherheitstests; §5 verlangt die Implementierung koordinierter Schwachstellen-Offenlegungs-Prozesse.
Auf Normenebene bindet ISO/IEC 27001:2022 Annex A 8.28 alle zertifizierten Organisationen, die Software entwickeln oder entwickeln lassen, an Prinzipien sicherer Codierung, einschließlich Eingabevalidierung, Output-Encoding und sicherer DOM-Manipulation. ISO/IEC 27002:2022 Clause 8.28 konkretisiert dies durch Verweis auf branchenanerkannte Benchmarks wie OWASP Top 10 und CWE-Listen als normativen Maßstab. Für Bundesbehörden und KRITIS-Betreiber verankert BSI IT-Grundschutz APP.3.1 (Edition 2023) den Schutz vor Cross-Site-Scripting als Standardanforderung für den Betrieb von Webanwendungen. NIS-2 (Richtlinie (EU) 2022/2555, Artikel 21) fordert von wesentlichen und wichtigen Einrichtungen risikobasierte technische Sicherheitsmaßnahmen, unter die eine ungesicherte Webanwendung mit bekannten XSS-Schwachstellen fällt.
Häufige Fragen
Was unterscheidet DOM XSS grundsätzlich von Reflected XSS?
Reicht eine Web Application Firewall (WAF) als Schutz gegen DOM XSS aus?
Welche Pflichten entstehen für Unternehmen aus dem Cyber Resilience Act konkret bei DOM XSS?
Quellen & weiterführende Literatur
- MITRE CWE-79, Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), Version 4.20
- NIST SP 800-115, Technical Guide to Information Security Testing and Assessment (September 2008)
- NIST CSRC Glossary, Cross-Site Scripting (XSS), basierend auf NIST SP 800-63-4 und NISTIR 7711
- Verordnung (EU) 2024/2847 des Europäischen Parlaments und des Rates (Cyber Resilience Act), Annex I
- BSI IT-Grundschutz Kompendium, Baustein APP.3.1 Webanwendungen und Webservices (Edition 2023)
- BSI IT-Grundschutz Kompendium, Baustein CON.10 Entwicklung von Webanwendungen (Edition 2023)