Mixed content problemi sorgono quando i siti web consegnano le loro pagine su HTTPS, ma consentono alcune delle risorse da consegnare in chiaro. L’attaccante di rete attiva non può fare nulla per il traffico crittografato, ma pasticciare con il testo in chiaro può provocare attacchi che vanno dal phishing nel migliore dei casi al compromesso completo del browser nel peggiore dei casi. Un singolo script esposto è sufficiente: l’attaccante può dirottare la connessione e iniettare carichi utili di attacco arbitrari in esso.
Tendiamo a parlare molto di altri aspetti di SSL/TLS, ma il contenuto misto è probabilmente il modo più semplice per rovinare completamente la crittografia del tuo sito web.
Nei primissimi giorni del Web, era consentito tutto il contenuto misto; i browser Web si aspettavano che gli operatori del sito pensassero alle conseguenze del mixaggio dei contenuti. Questo, ovviamente, non è risultato con grande sicurezza. Gli operatori del sito hanno fatto tutto ciò di cui avevano bisogno per svolgere il loro lavoro e ridurre i costi. Solo negli ultimi anni i fornitori di browser hanno iniziato a prestare attenzione e hanno iniziato a limitare i contenuti misti.
Contenuti misti nei browser moderni
Oggi, quasi tutti i principali browser tendono a suddividere i contenuti misti in due categorie: passivo per immagini, video e suoni; e attivoper risorse più pericolose, come gli script. Tendono a consentire il contenuto misto passivo per impostazione predefinita, ma rifiutano il contenuto attivo. Questo è chiaramente un compromesso tra rompere il Web e la sicurezza ragionevole.
Internet Explorer è stato il leader nella gestione sicura dei contenuti misti. Già nel Internet Explorer 5 (secondo questo post), avevano il rilevamento e la prevenzione di contenuti non sicuri per impostazione predefinita. Chrome ha iniziato a bloccare per impostazione predefinita nel 2011 e Firefox nel 2013. Il browser predefinito di Android e Safari, tuttavia, consentono ancora tutti i contenuti misti senza alcuna restrizione (e con avvisi quasi inesistenti).
Ecco i risultati dei miei recenti test su quali contenuti non sicuri sono consentiti per impostazione predefinita:
Browser | Immagini | CSS | Script | XHR | WebSockets | Fotogrammi |
---|---|---|---|---|---|---|
browser di Android 4.4.x | Sì | Sì | Sì | Sì | Sì | Sì |
Chrome 33 | Sì | No | No | Sì | Sì | No |
Firefox 28 | Sì | No | No | No | No | No |
Internet Explorer 11 | Sì | No | No | No | No | No |
Safari 7 | Sì | Sì | Sì | Sì | Sì | Sì |
Sono per lo più in attesa, ma c’è una sorpresa con Chrome, che blocca il contenuto della pagina attiva, ma consente comunque connessioni XMLHttpRequest e WebSocket in chiaro.
Vale la pena ricordare che la tabella non ci dice tutto. Ad esempio, i browser tendono a non controllare ciò che fanno i loro plugin. Inoltre, alcuni componenti (ad esempio, Flash o Java) sono ambienti completi a sé stanti e ci sono pochi browser che possono fare per far rispettare la sicurezza.
Test per la gestione di contenuti misti in SSL Labs
Per semplificare la valutazione della gestione del browser di questo problema, ho recentemente esteso il test del client SSL Labs per sondare la gestione di contenuti misti. Quando visiti la pagina, il tuo browser utente viene testato e otterrai risultati simili a questi:
Prevalenza di contenuti misti
Aneddoticamente, il contenuto misto è molto comune. In Qualys, abbiamo studiato questo problema nel 2011, insieme a molti altri problemi a livello di applicazione che si traducono in una completa rottura della crittografia nelle applicazioni Web. Abbiamo analizzato le homepage di circa 250.000 siti web sicuri dalla lista Alexa top 1 million e abbiamo determinato che 22.41% di loro utilizzava contenuti non sicuri. Se le immagini sono escluse, il numero scende al 18,71%.
Uno studio più dettagliato di 18.526 siti estratti da Alexa top 100.000 ha avuto luogo nel 2013: A Dangerous Mix: analisi su larga scala di siti web a contenuto misto (Chen et al.). Per ogni sito sono state analizzate fino a 200 pagine sicure, per un totale di 481.656 pagine. I loro risultati indicano che fino al 43% dei siti web hanno problemi di contenuti misti.
Mitigazione
La migliore difesa contro problemi di contenuto misto è semplicemente non avere questo tipo di problema nel tuo codice. Ma è facile a dirsi che a farsi; ci sono molti modi in cui i contenuti misti possono insinuarsi. Quando ciò fallisce, ci sono due tecnologie che possono essere utili:
- HTTP Strict Transport Security (HSTS) è un meccanismo che impone il recupero sicuro delle risorse, anche a fronte di errori dell’utente (tentativo di accedere al sito Web sulla porta 80) e errori di implementazione (gli sviluppatori inseriscono un collegamento non sicuro in una pagina sicura). HSTS è una delle cose migliori che è successo a TLS di recente, ma funziona solo sui nomi host che controlli.
- Content Security Policy (CSP) può essere utilizzato per bloccare il recupero di risorse non sicuro da siti Web di terze parti. Ha anche molte altre funzioni utili per affrontare altri problemi di sicurezza delle applicazioni, ad esempio XSS.