Attacchi basati su CSS

33

Attualmente sto lavorando a un plug-in per un CMS che dovrebbe consentire agli editor di contenuti di scrivere tag di stile in linea.

Sto cercando consigli / collegamenti su come abusare degli stili in linea.

Parte del motivo del plug-in è di consentire una rigorosa politica di sicurezza dei contenuti (non javascript in linea, ma permessi in linea) - che dovrebbe mitigare l'impatto di qualsiasi cosa brutta che potrebbe essere aggiunta alla pagina, ma non per gli anziani i browser.

I comportamenti di Microsoft funzionano per gli stili in linea?

So che la soluzione migliore per fare questo lavoro sarebbe quella di convalidare / disinfettare il CSS contro una whitelist, ma ciò richiede l'implementazione di un parser CSS e la produzione / gestione di una lista bianca di proprietà. Una lista nera di proprietà / modelli sarebbe fattibile? (Sono consapevole dei meriti relativi di whitelisting / blacklisting - ma è un po 'distorto qui in quanto ci dovrebbe essere solo un numero finito di vettori di attacco).

Aggiorna

Giusto per chiarire, dal momento che gli editori di contenuti dovrebbero essere in qualche modo fidati, la mitigazione degli attacchi potrebbe essere una soluzione più pragmatica della prevenzione.

Inoltre, ho appena trovato un esempio specifico in CVE-2011-0232 , anche se sono più interessato ai casi in cui non esiste una vulnerabilità intrinseca in un'implementazione, ma piuttosto un difetto di progettazione.

    
posta symcbean 21.06.2013 - 13:10
fonte

1 risposta

26

Riguardo a JavaScript:

In Internet Explorer e alcuni vecchi molto browser, è possibile inserire JavaScript nei fogli di stile. Diversi modi per farlo sono descritti nel XS Filter Evasion Cheat Sheet . I tre problemi principali sono:

  1. background-image e similiar: background-image: url('javascript:alert(/XSS/);')
  2. Espressione JavaScript: width: expression(alert(/XSS/)) - confermata funzionante in IE 7
  3. Caricamento dei file .htc: behavior: url(/evil.htc) - confermato in IE da 7 a 9

Altri problemi con i CSS:

In sostanza, ogni risorsa scaricabile (immagine, carattere, ...) può assorbire la capacità della rete dei visitatori e può essere utilizzata per eseguire attacchi CSRF, spiare i visitatori o eseguire attacchi DDOS su siti Web di dimensioni minori.

Potrebbero esserci alcuni modi in cui i CSS possono essere usati per bloccare il browser, occupare molta memoria o far ruotare la CPU al 99% per un po 'di tempo. Il CSS 3 supporterà molte cose strane che vorresti disabilitare, incluse cose 3d e transizioni.

Il layout del sito web può essere modificato liberamente. Ciò include cose divertenti come lo scambio delle posizioni della ricerca e l'inserimento della password. potrebbe non essere possibile usando gli stili in linea, devi solo accorgertene.

Informazioni sulla lista nera:

Una lista nera di modelli è una pessima idea. C'è un alto numero di modi per codificare i CSS, i browser fanno tutto diversamente. I parser CSS seguono spesso il principio "spazzatura in - CSS out". Inoltre, va notato che i parser CSS in genere non si fermano sugli errori, ma cercano di continuare ad analizzare il testo.

In un breve test, sono riuscito a trovare un sacco di definizioni background-color valide: ackground-color: , 2ackground-color: , ackground-color:0062ackground-color: , bac\k\g\r\o\u\nd-c\o\l\or: , %code% .

La soluzione pragmatica:

  1. Scrivi il tuo parser. Non renderlo completo o conforme agli standard, mantienilo semplice e aggiungi una whitelist di proprietà. Ci sono molte altre proprietà che non vuoi che tu voglia. Getti via qualsiasi spazzatura.

  2. Tenere fuori i browser che eseguono JavaScript nei CSS. Dovrai fare qualche ricerca qui, ma IE 8 e versioni successive non supportano più l'espressione JS. Rimangono gli altri problemi.

risposta data 21.06.2013 - 16:32
fonte

Leggi altre domande sui tag