In quali situazioni può element.setAttribute consentire XSS?

9

Burp ha identificato una potenziale vulnerabilità DOM XSS:

The application may be vulnerable to DOM-based cross-site scripting. Data is read from window.location.href and passed to the 'setAttribute()' function of a DOM element

In questo esempio, il codice vulnerabile è come (non posso includere l'originale per riservatezza):

var thing = windows.location.href;
...
element.setAttribute("fill", thing);

Il OWASP DOM XSS Cheat Sheet dice "Escape JavaScript prima di inserire dati non sicuri nel sottocontext degli attributi HTML all'interno dell'esecuzione Contesto". Non sono abbastanza sicuro di cosa intendano per contesto di esecuzione.

Esegui alcuni test rapidi (in Chrome), questo è vulnerabile:

document.getElementById("bob").setAttribute("onclick", "alert(1)");

Ma non lo è:

document.getElementById("bob").setAttribute("fill", "" onclick="alert(1)");

Dato tutto ciò, ritengo che Burp abbia riportato un falso positivo. Ma temo che mi sia sfuggito qualcosa, quindi un ulteriore input sarebbe apprezzato.

Mi interessa solo se questo è sfruttabile nei browser recenti. Non mi interessa "non è la miglior pratica" o "sfruttabile in IE 4 su un Mac".

    
posta paj28 14.10.2016 - 11:30
fonte

1 risposta

5

setAttribute() è sicuro in quanto non fa altro che impostare il valore dell'attributo. Anche usando caratteri speciali nella stringa non puoi iniettare un attributo aggiuntivo (come hai tentato nel tuo terzo snippet), per non parlare di sfuggire al tag HTML.

Alcuni attributi sono pericolosi per alcuni elementi. Come hai dimostrato, gli attributi di on* sono vulnerabili perché ti consentono di specificare gestori di eventi di script. Allo stesso modo, src e srcdoc sono pericolosi su <iframe> elementi, ecc.

La tecnica di iniezione di JS tramite url() come proposto da @Anders ha funzionato in passato per gli attributi CSS ma non è più possibile nei principali browser. Allora, un carico utile come <rect fill="url('javascript:alert(1)')"/> avrebbe potuto funzionare. Questo potrebbe anche essere il motivo per cui Burp lo segnala come una potenziale vulnerabilità. Tuttavia, non è un vettore di attacco nei browser recenti.

    
risposta data 16.10.2016 - 02:43
fonte

Leggi altre domande sui tag