Questo documento presenta una serie di
modifiche non ufficiali del codice sorgente
WebKit
per configurare un programma di navigazione web in modo da evitare la
vulnerabilità CORS. CORS è un acronimo che indica Cross-Origin Resouce Sharing. Tale
modifica è stata originalmente introdotta dal
W3C come "miglioria"
della funzionalità web, tuttavia i suoi benefici non ripagano dei costi in termini di
compromissione della sicurezza e della riservatezza ed essa rappresenta probabilmente
una delle peggiori vulnerabilità di sicurezza e trapelazione di informazioni in tutta
la storia del calcolo elettronico.
Infatti, quando la funzionalità CORS è abilitata, un programma di navigazione web può
caricare risorse da origini (serventi web) che sono diverse dall'origine della richiesta
iniziale dell'utente (il servente web che appare nella barra degli indirizzi del programma
di navigazione web). Pertanto, quando la funzionalità CORS è abilitata, il programma di
navigazione web può caricare risorse che generalmente saranno non fidate (in quanto
la
fiducia non è una proprietà transitiva), permettendo quindi una forma potenzialmente
molto pericolosa di dirottamento del programma di navigazione web!
Inoltre, un tale problema può avere un impatto rilevante sull'efficienza energetica in
quanto vengono aperte connessioni multiple ad un numero che può essere anche elevato di
differenti nodi serventi invece che una singola connessione ad un solo nodo servente.
Per comprendere meglio i pericoli creati dalla vulnerabilità CORS si consiglia di
leggere alcuni esempi pratici.
Le seguenti modifiche del codice sorgente rappresentano una possibile contromisura alla
vulnerabilità CORS:
-
modifiche per WebKit versioni 2.46.x;
-
modifiche per WebKit versioni 2.44.x;
-
modifiche per WebKit versioni 2.42 a partire da 2.42.5;
-
modifiche per WebKit versione 2.42.4;
-
modifiche per WebKit versioni 2.42 fino a 2.42.3;
-
modifiche per WebKit versione 2.40.x;
-
modifiche per WebKit versione 2.38.x;
-
modifiche per WebKit versione 2.36.x;
-
modifiche per WebKit versione 2.34.x;
-
modifiche per WebKit versione 2.32.x;
-
modifiche per WebKit versione 2.22.x (non collaudate);
-
modifiche per WebKit versione 2.20.x (non collaudate);
-
modifiche per WebKit versione 2.19.x;
-
modifiche per WebKit versione 2.18.x;
-
modifiche per WebKit (Chromium) distribuito con Android 4.4 (KitKat).
Si noti che, quando un documento web viene caricato con la funzionalità CORS disabilitata,
ci potrebbe essere una limitazione della funzionalità (per esempio, alcune o tutte le
immagini non vengono caricate). Questo è assolutamente normale e dimostra che la contromisura
è efficace in quanto il programma di navigazione web non sta consentendo il caricamento di
contenuto da fornitori non fidati.
Si noti inoltre che, nonostante le modifiche qui proposte riguardano solo il motore
WebKit, la maggior parte degli altri programmi di
navigazione web sono anch'essi affetti da questa vulnerabilità, in quanto come già
detto è
standardizzata.
Le modifiche al codice sorgente WebKit elencate sopra sono configurabili quando combinate con
un programma di navigazione che sia stato anch'esso modificato in modo tale da poter gestire
le nuove opzioni (altrimenti CORS è sempre disabilitato). Di seguito si forniscono le modifiche
al codice sorgente del programma di navigazione web del sistema Android e di tre altri programmi
selezionati come esempio,
epiphany (Linux/Gnome), Zirco (Android) e
Orweb (Android):
-
modifiche per epiphany versione 3.32.x;
-
modifiche per epiphany versione 3.30.x;
-
modifiche per epiphany versione 3.27.x;
-
modifiche per epiphany versione 3.26.x;
-
modifiche per il navigatore web predefinito del sistema Android 4.4 (KitKat);
-
modifiche per il navigatore web Zirco versione 0.4.4;
-
modifiche per il navigatore web Orweb versione 0.7.
Opzionalmente è possibile combinare queste modifiche con una
modifica per prevenire i meccanismi di tracciamento dei motori di ricerca tramite manipolazione dell'URL di ricerca.
Tutte le modifiche elencate sopra possono essere applicate tramite il comando
"
patch -p1". Esse sono software libero,
fornito "così com'è", nella speranza che risulti utile, ma SENZA ALCUNA GARANZIA.
La maggior parte degli utenti dovrebbero probabilmente configurare il programma di
navigazione web come segue:
- selezionare l'opzione "Disable CORS";
- selezionare l'opzione "Enable CORS within the same domain";
- disabilitare l'opzione "Disable CORS Redirection".
Un ultimo consiglio: prima di ricompilare il programma di navigazione web Android, si
dovrà prima installare la Android SDK modificata, che potrà essere compilata tramite
i comandi "make update-api ; make PRODUCT-sdk-sdk".
E se si dovesse generare un errore riguardo a strumenti mancanti durante la compilazione
dell'SDK, allora re-inizializzare e sincronizzare la base dati del codice sorgente con
i seguenti comandi:
"
repo init <original_repository_arguments> -gall,tools ;
repo sync"
Una volta che l'SDK è stato compilato, sarà disponibile in out/host/linux-x86/sdk. A quel
punto, aggiornare le preferenze SDK Manager in Android Studio con il percorso del nuovo
SDK e infine iniziare a ricompilare il programma Zirco o Orweb modificato, facendo attenzione
a non sovrascrivere il nuovo SDK con aggiornamenti scaricati dalla rete.
Una distribuzione Android fortificata la quale contiente queste modifiche e molte altre
funzionalità e migliorie per la sicurezza e la riservatezza è ora disponibile per telefoni
Sony Xperia E3:
distribuzione Android 4.4.4 "KitKat" fortificata.
Se si utilizza il programma di navigazione Mozilla Firefox invece che un programma di
navigazione basato su WebKit, allora è possibile trovare una simile funzionalità nella
seguente estensione:
requestblock.
Letture Utili
-
Careful Who You Trust: Studying the Pitfalls of Cross-Origin Communication, G Meise, P. Laperdrix, B. Stock. ACM ASIA CCS '21: Proceedings of the 2021 ACM Asia Conference on Computer and Communications Security, Maggio 2021
-
We Still Don’t Have Secure Cross-Domain Requests: an Empirical Study of CORS, J. Chen, J. Jiang, H. Duan, T. Wan, S. Chen, V. Paxson, M. Yang. Proceedings of the 27th USENIX Security Symposium, Agosto 2018
-
The Chain of Implicit Trust: An Analysis of the Web Third-party Resources Loading, M. Ikram, R. Masood, G. Tyson, M. A. Kaafar, N. Loizon, R. Ensafi. ACM WWW '19: The World Wide Web Conference, Maggio 2019
-
Security of CORS on LocalStorage, N. Zhu. IEEE 2021 International Conference on Internet, Education and Information Technology (IEIT), Aprile 2021
-
It's More Than Stealing Cookies - Exploitability of XSS, K Nirmal, B. Janet, R. Kumar. IEEE 2018 Second International Conference on Intelligent Computing and Control Systems (ICICCS), Giugno 2018
-
Protecting browser state from web privacy attacks, C. Jackson, A. Bortz, D. Boneh, J. C. Mitchell. ACM WWW '06: Proceedings of the 15th international conference on World Wide Web, Maggio 2006
-
Protecting browsers from cross-origin CSS attacks, L-S. Huang, Z. Weinberg, C. Evans, C. Jackson. ACM CCS '10: Proceedings of the 17th ACM conference on Computer and communications security, Ottobre 2010
-
XSS Attacks: Cross Site Scripting Exploits and Defense, S. Fogie, J. Grossman. Syngress Publishing, Maggio 2007. ISBN: 978-0-08-055340-5
-
Dynamic Pharming Attacks and Locked Same-origin Policies for Web Browsers, C. Karlof, U. Shankar, J. D. Tygar, D. Wagner. ACM CCS '07: Proceedings of the 14th ACM conference on Computer and communications security, Ottobre 2007