È possibile fare un attacco XSS se si può iniettare un file arbitrario (qualsiasi estensione, come: .js, .html ecc.) in background-image
proprietà CSS? Se sì, come si fa?
No, non è possibile.
Un valore a background-image
sarà reso come un'immagine. Anche un SVG con codice di script incorporato verrebbe visualizzato come un'immagine quando caricato tramite background-image
. Quindi XSS non è possibile qui (allo stesso modo un valore arbitrario a <img src="...">
non può mai portare a XSS).
Anche se non si poteva semplicemente modificare un valore di background-image
ma iniettare un nuovo CSS, molto probabilmente non sarebbe possibile ottenere XSS. Le tecniche per inserire codice di script tramite CSS expression(...)
o url('javascript:...')
non funzionano nei browser moderni. In altre parole, persino l'incorporamento di un intero file CSS controllato dall'utente può causare gravi perdite nel canale laterale, ma non nel semplice XSS.
In casi estremi, potrebbe effettivamente portare a problemi, ma non necessariamente XSS, né necessariamente attraverso la regola di stile immagine di sfondo.
Caso estremo numero 1: il fornitore del browser potrebbe avere una vulnerabilità nel motore di rendering per l'immagine di sfondo che, se sfruttata, porta al codice in esecuzione. Questo è altamente improbabile con i browser moderni, ma in teoria potrebbe essere possibile.
Caso estremo numero 2: il sito potrebbe avere modifiche CSS non standard come EQCSS che supportano eval ('') o un altro modo per eseguire Javascript. In questo caso, puoi effettivamente inserire Javascript nella pagina.
Caso estremo numero 3: se il sito è progettato in modo tale da poter aggiungere classi CSS arbitrarie e regole di accompagnamento, è possibile scrivere regole intelligenti che possono perdere dati basati su selettori di attributo CSS. Ad esempio, gli attributi di screen reader aggiunti da alcuni framework javascript che contengono parte o tutto il contenuto di determinate pagine potrebbero potenzialmente essere combinati con immagini ospitate su un altro sito per filtrare i dati relativi ai contenuti degli attributi.
Caso estremo numero 4: Le regole CSS :: before e :: after supportano la regola di stile "content" che può essere utilizzata per inserire praticamente stringhe arbitrarie prima o dopo il contenuto. esiste attualmente una bozza ( link ) che propone di estendere questa regola di stile del contenuto oltre la limitazione prima / dopo.