Flash ignora l'intestazione Content-Type, consentendo XSS?

4

Recentemente ho letto che il plugin Flash ignora l'intestazione Content-Type in determinate circostanze. In particolare, puoi fornire a Flash un URL e il plug-in Flash recupererà volentieri il contenuto di quell'URL e caricherà qualsiasi cosa esso riceva come file SWF, con le autorizzazioni del sito da cui è stato caricato il contenuto - anche se la risposta arriva con un'intestazione Content-Type: text/plain (o qualsiasi altra Content-Type ). L'intestazione Content-Type può indicare che questo non è un file SWF e Flash lo caricherà comunque come file Flash. Il contenuto che viene caricato non deve nemmeno essere un file SWF valido; deve solo iniziare con un file SWF valido, e il plugin Flash ignorerà qualsiasi cruft aggiuntivo che segue.

La fonte di questo reclamo: link

Se questo è vero, non va bene. Significa che il mio sito è vulnerabile a XSS, se esiste una pagina in cui l'aggressore può controllare l'inizio della pagina. Significa che il mio sito può essere vulnerabile anche se imposto correttamente l'intestazione Content-Type correttamente ovunque. Significa che le difese standard contro XSS quando servono contenuti caricati dall'utente non sono sufficienti.

Ad esempio, se si desidera consentire all'utente di caricare un file di testo arbitrario e di servirlo a chiunque lo chieda, un approccio standard è quello di assicurarsi di impostare Content-Type: text/plain sulla risposta. È opinione diffusa che questo sia sufficiente per essere sicuri. Se comprendo correttamente questa vulnerabilità, questa pratica non è sicura: un utente malintenzionato può caricare un file di testo dannoso contenente il contenuto di un file SWF e quindi far sì che venga eseguito dal plugin Flash, creando l'equivalente morale di una vulnerabilità XSS nel sito.

Questo mi ha un po 'logorato. È proprio vero? Flash ha davvero questa vulnerabilità? Flash è stato riparato per risolvere questo problema? Ci sono fattori attenuanti? C'è una difesa pulita sul lato server per prevenire questo tipo di attacco?

    
posta D.W. 25.09.2013 - 06:25
fonte

3 risposte

3

It means that the standard defenses against XSS when serving user-uploaded content are not sufficient.

La difesa standard contro XSS quando serve contenuti caricati dall'utente è di servirsene da un indirizzo diverso (completamente idealmente dominio e indirizzo IP completamente diversi, ma un sottodominio interrompe alcuni almeno). Cioè, ti permetti di cadere vittima di XSS, ma isolalo in modo che un tale compromesso non danneggi il sito principale.

For instance, if you want to allow the user to upload an arbitrary text file and serve it to anyone who asks, a standard approach is to make sure to set Content-Type: text/plain on the response. It's widely believed that this is sufficient to be secure

Molte cose che sono completamente false sono ampiamente credute.

Content-Type / Content-Disposition non è mai stato una difesa sufficiente, di fronte al tipo sniffing (sia dal browser che dai plugin). text/plain è il peggiore possibile: poiché è stato (inavvisibilmente) incluso come predefinito Content-Type in Apache, la maggior parte dei browser ignorerà completamente quel tipo a favore di sniffare parole magiche dall'inizio del file.

Has Flash been patched to fix this?

No. Sebbene ce ne sia uno peggiore con la sintassi crossdomain.xml che viene sepolta all'interno di altri tipi di file e caricata attraverso getPolicy() che è stata leggermente mitigata.

Are there any mitigating factors?

Il tipo di interazione consentita da Flash con la sua variante della stessa politica di origine non consente necessariamente la creazione di script completi nell'origine JS. Ma sì, è piuttosto brutto.

Java e Silverlight hanno problemi simili.

    
risposta data 25.09.2013 - 11:33
fonte
0

Il tipo di contenuto non è destinato a fornire sicurezza; è semplicemente un suggerimento per il browser su come una pagina web deve essere interpretata in assenza di altre informazioni.

Non c'è niente che fermi la tua pagina web (ad esempio come parte di un oggetto flash) dal caricamento del contenuto della pagina decorata con qualsiasi tipo di contenuto che ti piace e interpretandola come qualcos'altro. Questo può accadere con un oggetto flash o tramite sistemi come XmlHttpRequest. (Se esegui una query XHR e eval il risultato, o inserisci ciecamente il risultato nella pagina, sarai altrettanto brusco)

In altre parole, il tipo di contenuto indica al browser quali sono i comportamenti di base per fornire un contenuto. Se il codice del tuo client, che si tratti di JavaScript, di Flash o di cosa hai, dice di fare qualcosa di diverso, allora succederà qualcosa di diverso.

    
risposta data 25.09.2013 - 09:55
fonte
0

X-Content-Type-Options: nosniff potrebbe essere tuo amico. Indica al browser di non indovinare il tipo di contenuto, ma si attenga a ciò che dice il server.

    
risposta data 25.09.2013 - 22:18
fonte

Leggi altre domande sui tag