XSS riflettente nei codici di script con tipo di contenuto "text / javascript"

1

Ho una pagina web che restituisce codice di script non elaborato con l'intestazione Content-Type: text/javascript . Tuttavia ho trovato che c'è un xss riflettente in uno dei parametri passati all'url che viene copiato nel javascript restituito. Questa è la configurazione.

URL:

www.mysite.com/js?p1=data&p2=NodeFrame.jsResponse

Javascript:

/**/NodeFrame.jsResponse({"success":true,"data":{"id":0,"jdata":[]}});

Ora l'XSS che ho trovato va così

URL:

www.mysite.com/js?p1=data&p2=NodeFrame.jsResponse({"success":true,"data":{"id":0,"jdata":[]}});alert(1);//

Javascript:

/**/NodeFrame.jsResponse({"success":true,"data":{"id":0,"jdata":[]}});alert(1);//({"success":true,"data":{"id":0,"jdata":[]}});

Per chiarire, i valori del parametro p2, vengono utilizzati non pubblicitari nello script restituito, come il nome della funzione.

La risposta HTTP ha Content-Type: text/javascript , in essa. E lo script non è incorporato in un documento html.

C'è qualche possibilità che il codice possa essere eseguito in un browser? Sono preoccupato per i vecchi browser e fondamentalmente. Supponi che X-Content-Type-Options: nosniff non sia impostato, c'è un browser che lo renderà effettivamente? In tal caso, posso testare un PoC o una versione del browser?

Modifica : La domanda è: qualsiasi versione di qualsiasi browser, annuserà un codice di script non elaborato con Content-Type: text/javascript set di intestazione, dato che X-Content-Type-Options: nosniff non è impostato.

    
posta mystupidstory 03.01.2016 - 19:00
fonte

3 risposte

1

Innanzitutto, text/javascript è obsoleto e, di conseguenza, meno affidabile. Il tipo MIME ufficiale accettato per JavaScript è application/javascript . Qualcuno dei principali browser moderni dovrebbe sapere come gestire quest'ultimo senza eseguirlo direttamente se visitato.

Riguardo alle vulnerabilità di sicurezza presenti in Internet Explorer, i tipi MIME di JavaScript sembrano non essere interessati. In un articolo di Microsoft sul rilevamento del tipo MIME , ci sono tipi riconosciuti chiaramente definiti , dove JavaScript non è presente. Ciò significa che Internet Explorer utilizzerà automaticamente tutto ciò che viene restituito dal server:

If the "suggested" (server-provided) MIME type is unknown (not known and not ambiguous), FindMimeFromData immediately returns this MIME type as the final determination. The reason for this is that new MIME types are continually emerging, and these MIME types might have formats that are difficult to distinguish from the set of hard-coded MIME types for which tests exist.

Google Chrome tende a enfatizzare anche la compatibilità diretta, quindi presumibilmente si verificherà un processo simile.

Pertanto, uno script inviato con Content-Type: application/javascript non dovrebbe essere vulnerabile al tipo di sniffing, ma ciò non significa che non dovrebbero essere prese precauzioni necessarie per assicurarsi che ciò non avvenga. Le persone potrebbero utilizzare browser meno affidabili o visualizzare un file in un contesto diverso da un browser che non riconosce correttamente i tipi MIME.

Sarebbe meglio usare sempre X-Content-Type-Options: nosniff poiché questo caso è esattamente quello per cui è stato progettato.

    
risposta data 03.01.2016 - 19:55
fonte
2

The question is, will any version of any browser, sniff a raw script code with Content-Type: text/javascript header set, given that X-Content-Type-Options: nosniff is not set.

Per eseguire lo script all'interno del browser, non importa se il tipo viene annusato o meno. Se solo lo script stesso viene fornito al browser, cioè non è incorporato in qualche modo in HTML, quindi il browser non ha un documento in cui lo script può essere eseguito. Ciò significa che lo script verrà visualizzato o scaricato ma non eseguito nel contesto di un documento HTML. Se si utilizza Internet Explorer, potrebbe anche offrire lo script per l'esecuzione, in modo simile ad altri contenuti eseguibili. Alcuni test con IE11 dimostrano che non importa quale sia il Content-Type in questo caso, perché i dati saranno mostrati in linea (testo / plain, immagini) o saranno offerti per il download e forse per l'esecuzione. Se l'esecuzione è offerta sembra dipendere unicamente dall'estensione del file e X-Content-Type-Options: nosniff sembra non avere alcun effetto su questa decisione.

Se lo script è incorporato o referenziato all'interno di un documento HTML, il tipo di contenuto per lo più non ha importanza perché il browser "sa" quale deve essere il contenuto (cioè Javascript) e di solito ignora il tipo di contenuto impostato da il server comunque. Così puoi consegnare con successo un file Javascript con un tipo di contenuto di testo / semplice, application / octet-stream e persino image / gif alla maggior parte dei browser. Dai browser che ho controllato qualche tempo fa, solo le versioni più recenti di Chrome escludere alcuni tipi di contenuto, cioè non è più possibile includere script in un tipo di contenuto di immagine / qualsiasi cosa in Chrome. Funziona ancora con altri browser.

    
risposta data 03.01.2016 - 21:11
fonte
1

Le versioni precedenti di IE lo tratteranno, se lo incorpori in un tag script verrà reso ed eseguito

    
risposta data 09.07.2016 - 04:11
fonte

Leggi altre domande sui tag