XSS memorizzato
Piantato una volta, da quel momento in poi funzionerà per ogni visitatore.
Cos’è XSS memorizzato?
Lo scripting cross-site archiviato deve essere installato una sola volta. Ogni utente che successivamente carica la pagina esegue lo script dell'aggressore sulla propria sessione, senza alcun collegamento su cui fare clic e nulla da notare. Trascinerai un tag immagine con un gestore onerror in un libro degli ospiti, quindi caricherai tu stesso la pagina e guarderai la stampa del cookie della sessione. La correzione sfugge al limite del rendering, quindi il payload identico ancora presente nel database viene visualizzato come testo. Il valore memorizzato non deve mai essere ripulito affinché la correzione possa essere mantenuta.
Cosa imparerai in XSS memorizzato
- Distinguere l'XSS memorizzato dall'XSS riflesso, la persistenza durevole del carico utile sul server è ciò che cambia il modello di minaccia
- Spiega perché un tag <img src=x onerror=alert(...)> si attiva anche quando non è presente alcun tag <script> nel payload
- Identificare l'escape HTML del limite di rendering come difesa primaria corretta e spiegare perché le blocklist del livello di input e le strategie solo CSP non sono all'altezza
- Leggere una funzione di rendering Node.js abbastanza bene da individuare un bug di concat-in-HTML e riconoscere la riga in cui deve essere inserito l'escape
- Comprendi che il valore memorizzato può rimanere esattamente così com'è una volta che il renderer esce correttamente, non è necessario che il database sia disinfettato affinché la correzione funzioni
XSS memorizzato — Fasi della formazione
-
Trova il forum della comunità
Oggi Bob si rivolge a Signal Coast, il cui forum della comunità consente a qualsiasi membro di pubblicare una breve nota pubblica che ogni altro membro legge. Accede con un account usa e getta e apre il libro degli ospiti del forum per vedere come gestisce ciò che le persone scrivono.
-
Le note vengono visualizzate come scritte
Il libro degli ospiti fa una promessa che la maggior parte dei siti fa attenzione a non mantenere mai: rende ogni nota esattamente come scritta, HTML incluso. Un campo che trasforma qualunque cosa digiti in markup attivo è esattamente ciò che Bob sperava di trovare.
-
Pubblica una nota normale
Innanzitutto, Bob si comporta come qualsiasi altro membro e pubblica una normale nota per vedere come la gestisce il libro degli ospiti. Il biglietto si attacca al muro esattamente così come è scritto: testo semplice, niente di insolito. Questa è la funzionalità che funziona come previsto.
-
Passare a uno script
Il campo esegue il rendering in HTML, quindi Bob gli fornisce uno script anziché una frase. La sua sonda è un tag immagine con una fonte che non può essere caricata e un gestore onerror che legge il cookie di sessione dello spettatore. L'immagine fallisce, il gestore viene eseguito e il browser apre qualunque cosa gli venga indicata dalla nota. Qui stampa la sessione, prova che una nota può eseguire codice con allegato il login dello spettatore.
-
Funziona con la sessione
Eccolo qui: la nota è stata eseguita da sola e ha attivato il cookie della sessione live dello spettatore, senza che venisse cliccato nessun collegamento e nessun file aperto. Un'impronta innocua oggi; domani un segnale silenzioso al server di Bob. Bob ha dimostrato che il muro corre qualunque cosa contenga una nota. Ora costruisce la vera arma.
-
Pianta il login falso
Bob scambia la sonda con una nota che riscrive la pagina in una casella di accesso a Sessione scaduta, con un gestore che invia qualsiasi cosa venga digitata al suo server. Ad ogni membro che carica il wall sembra che il forum gli abbia semplicemente chiesto di accedere nuovamente. Le credenziali vanno direttamente a Bob.
-
La trappola è armata
Il login falso è ora la nota più recente sul muro e sembra proprio che il forum chieda ai membri di accedere nuovamente. Il suo gestore invia qualunque cosa venga digitata direttamente al server di Bob. L'ha piantato una volta; ogni membro che si fida e accede consegna la propria password.
-
Alice apre il muro
Possiedi il codice di rendering del libro degli ospiti. Questa mattina ti aggiorni sulla community, proprio come qualsiasi altro amministratore che inizia la giornata: apri il browser e vai al muro. Non hai fatto clic su un collegamento né eseguito nulla. Stai semplicemente caricando una pagina che gestisci.
-
Premi al caricamento
La pagina ha appena terminato il caricamento e un popup sta già stampando il cookie della sessione. Non hai digitato nulla e non hai fatto clic su nulla. Una delle note di Bob è stata pubblicata nell'istante in cui è stato eseguito il rendering del muro, all'interno della sessione di amministrazione. Sulla sua corporatura lo stesso conduttore gli avrebbe segnalato quella sessione direttamente.
-
E sotto un login falso
Scorri il muro e c'è una seconda nota piantata: una casella di accesso alla Sessione scaduta che assomiglia a quella del forum. Qualsiasi membro che si fida e accede consegna la propria password all'aggressore. Queste sono note memorizzate, eseguite dal browser di ogni visualizzatore. Come ingegnere proprietario di questa pagina, sai che la correzione è nel codice di rendering.
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