XSS par clobbering DOM

Exploiting DOM clobbering to enable XSS

Exploiter une vulnérabilité de DOM-clobbering. La fonctionnalité des commentaires autorise un HTML « sûr ». L’objectif est d’injecter un fragment HTML qui écrase une variable DOM (clobbering) et d’enchaîner sur une exécution XSS (alert()).

La zone de commentaires accepte du HTML et certains éléments sont rendus (par ex. un <h1> s’interprète).

  • Le script côté client charge et affiche les commentaires récupérés en JSON. Il utilise DOMPurify.sanitize() pour nettoyer les champs author et body, mais d’autres manipulations DOM restent vulnérables au clobbering.

  • Le code crée un objet defaultAvatar en lisant window.defaultAvatar si présent ; on peut donc écraser defaultAvatar via un élément DOM ayant un identifiant defaultAvatar (clobbering).

  • Comme l’attribut src de l’<img> est construit à partir de defaultAvatar.avatar lorsque comment.avatar est absent, il est possible de forcer un defaultAvatar contrôlé par l’attaquant pour influencer la valeur insérée.

  • L’insertion se fait par divImgContainer.innerHTML = avatarImgHTML, ce qui déclenche l’interprétation de la chaîne HTML construite.

Tentative de forcer defaultAvatar via un élément <a id=defaultAvatar> contenant un attribut susceptible de provoquer une erreur côté client (ex. onerror=alert(0)).

cela est urlencodé par le système

Contournement testé en utilisant un schéma cid: pour que la valeur ne soit pas encodée :

ce dernier est interprété

Mis à jour

Ce contenu vous a-t-il été utile ?