English  |  Italiano 

Modifiche WebKit non ufficiali per evitare la vulnerabilità CORS


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



Copyright © 2017-2024 Guido Trentalancia. Tutti i diritti sono riservati.