DOMXSS
Il carico utile non raggiunge mai il server. Funziona ancora.
Cos’è DOMXSS?
XSS basato su DOM è lo scripting cross-site che il tuo server non vede mai. Il payload scorre nel frammento dell'URL, document.referrer o un corpo postMessage , e JavaScript lato client lo scrive in innerHTML . I filtri lato server e i firewall delle applicazioni web sono ciechi rispetto a tutto ciò. Imballerai un payload img onerror in un collegamento di condivisione per un visualizzatore di note, lo aprirai tu stesso, traccerai il flusso dall'origine al sink e lo risolverai con textContent in modo che il browser crei un nodo di testo invece di analizzare il markup.
Cosa imparerai in DOMXSS
- Riconoscere il modello source-to-sink: una sorgente DOM controllata dall'aggressore (location.hash, document.referrer, postMessage) che alimenta un pericoloso sink DOM (innerHTML, eval, document.write)
- Spiega perché l'hash dell'URL non raggiunge mai il server e perché i filtri WAF/lato server sono ciechi rispetto a DOM XSS
- Applicare la giusta correzione primaria: sostituire il sink pericoloso (innerHTML) con uno sicuro (textContent), senza filtraggio lato server o riscrittura dell'input
- Distinguere DOM XSS da XSS riflesso e memorizzato in base a dove scorre il carico utile e dove deve arrivare la correzione
- Controlla una base di codice per i tubi source-to-sink adiacenti una volta che emerge un bug
DOMXSS — Fasi della formazione
-
Apri lo strumento di condivisione delle note
Oggi Bob si rivolge a Tideline Federal, il cui staff trasmette note rapide attraverso uno strumento di condivisione interno. Scrivi una nota, lo strumento ti fornisce un collegamento e chiunque apra il collegamento legge la nota nel proprio browser. Bob apre il compositore per vedere come una nota diventa un collegamento.
-
Condividi una nota normale
Innanzitutto, Bob condivide una nota ordinaria per vedere come lo strumento crea un collegamento. Qualunque cosa scriva viene racchiusa nel collegamento stesso.
-
La nota corre nel collegamento
C'è il link di condivisione. L'intera nota si trova al suo interno, nella parte successiva a # . Quando qualcuno apre il collegamento, lo spettatore legge quel frammento e lo visualizza. Niente della nota raggiunge mai il server di Tideline.
-
Crea un carico utile di prova
Il visualizzatore rilascia tutto ciò che la nota contiene nella pagina come HTML. Quindi Bob scrive una nota che non è realmente una nota: un tag immagine la cui sorgente non può essere caricata, portando un gestore onerror . Quando l'immagine fallisce, il gestore viene eseguito e qualsiasi codice in esso contenuto viene eseguito nel browser di chiunque apra il collegamento. Inizia con la prova più semplice possibile, un semplice alert(1) , solo per confermare che il suo codice venga eseguito.
-
Testare il carico utile
Prima di utilizzare qualsiasi arma, Bob visualizza in anteprima il proprio collegamento per verificare che il carico utile si attivi. L'anteprima apre la nota esattamente come la vedrebbe il destinatario. Nel momento in cui lo spettatore lo carica, viene visualizzato l'avviso. Il suo codice viene eseguito nel browser, esattamente come previsto.
-
Armalo
La prova funziona, quindi ora Bob la rende pericolosa. Torna dal compositore e scambia l'avviso innocuo con una riga che legge il cookie di sessione del visitatore, il token che lo mantiene connesso. Un vero carico utile invierebbe quel cookie al proprio server senza alcun suono. Qui viene visualizzato il valore rubato in modo da poter vedere esattamente cosa cattura.
-
Invia il collegamento a una vittima
Bob invia tramite e-mail il collegamento armato ad Alice, un ingegnere di Tideline che apre le note condivise tutto il giorno. È travestito da nota condivisa prima della sua revisione mattutina, quindi non ha motivo di esitare.
-
Arriva una nota condivisa
L'e-mail di Bob sta arrivando. Possiedi il codice visualizzatore dello strumento di condivisione delle note e una nota condivisa arriva nella tua casella di posta subito prima della revisione delle 10:00. Aprilo, quindi apri la nota.
-
Apri la nota condivisa
Niente sembra fuori posto, quindi apri la nota nello stesso modo in cui ne apri dozzine di altre.
-
La nota ti ruba la sessione
Nell'istante in cui la nota viene caricata, questo popup si attiva nel tuo browser e mostra il tuo cookie di sessione, il token che ti mantiene connesso. Non hai fatto clic su nulla e non hai digitato nulla. La nota condivisa conteneva uno script che leggeva semplicemente la tua sessione e avrebbe potuto inviarla direttamente a un utente malintenzionato. Si tratta di un'acquisizione completa dell'account dall'apertura di un collegamento.
Copertura dei framework di sicurezza
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-79 Improper Neutralization of Input During Web Page Generation
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security