Windows integra una funzionalità chiamata Best-Fit Mapping che si occupa di gestire la conversione dei caratteri da UTF-16 ad ANSI quando il carattere specifico non fosse disponibile. Il meccanismo tenta di mappare caratteri Unicode non supportati ai “più simili” disponibili: un’operazione che in alcuni casi può tuttavia condurre a risultati spesso imprevedibili. Basti pensare che caratteri come il simbolo dello yen (U+00A5
) possono essere mappati con un backslash, simbolo utilizzato per definire percorsi a livello di file system, creando opportunità sconfinate per gli attacchi informatici.
Ogni lingua utilizza un ampio set di caratteri e simboli. Così, si è sentita l’esigenza di utilizzare lo standard internazionale di codifica chiamato Unicode. Non tutte le applicazioni e le funzionalità del sistema operativo, tuttavia, possono servirsene e in molti casi sono necessarie delle conversioni da un formato all’altro. Le attività di conversione possono portare a severe falle di sicurezza quando librerie e programmi si affidano a tali conversioni senza operare un’adeguata “sanitizzazione” dei dati.
Cosa sono e come nascono gli attacchi WorstFit
Orange Tsai, uno dei ricercatori di sicurezza più noti a livello mondiale, che già in passato si è ripetutamente dedicato alle vulnerabilità introdotte con il supporto superficiale dei vari set di caratteri, spiega che il problema noto come WorstFit rappresenta una delle più recenti e insidiose vulnerabilità scoperte nei sistemi Windows.
WorstFit sfrutta proprio il meccanismo Best-Fit Mapping per approfittare di caratteristiche introdotte ai fini della compatibilità, con il preciso intento di sferrare attacchi informatici. Orange Tsai cita tre possibili scenari di attacco:
Filename Smuggling
Questo vettore di attacco si basa sulla manipolazione dei nomi di file per ottenere accessi non autorizzati ai percorsi del file system. Caratteri speciali come il simbolo dello yen (¥), come visto in precedenza, possono essere utilizzati per costruire routine di aggressione in grado di acquisire visibilità su percorsi critici.
In questo modo, il codice malevolo può ottenere accesso non autorizzato a file sensibili oppure eseguire comandi arbitrari.
Argument Splitting
WorstFit consente anche di manipolare argomenti della riga di comando sfruttando conversioni di caratteri. Fornendo input che contengono caratteri speciali come le doppie virgolette, un attaccante può iniettare nuovi argomenti o alterare l’esecuzione dei comandi.
Orange Tsai spiega che, in questo caso, le doppie virgolette non sono le normali doppie virgolette bensì i caratteri ottenibili con il codice Unicode U+FF02
. Come spiegato nell’articolo su come usare caratteri speciali da tastiera, provate a scrivere FF02
in un documento Word vuoto, selezionate la stringa e premete ALT+X
.
Le doppie virgole “speciali” così ottenute usando Unicode, proprio “grazie” al Best-Fit Mapping, sono automaticamente convertite in doppie virgolette tradizionali offrendo agli aggressori una modalità particolarmente efficace per predisporre l’esecuzione di codice arbitrario negli ambienti in cui ciò non sarebbe assolutamente previsto.
Environment Variable Confusion
Manipolando variabili d’ambiente elaborate tramite API ANSI, è inoltre possibile bypassare restrizioni di sicurezza e alterare l’esecuzione del software.
Il ricercatore spiega che nel contesto di un server CGI, l’uso del carattere “à” (U+00E0
) può essere sfruttato per aggirare le regole di accesso impostate su percorsi sensibili.
Elenco delle lingue e dei Paesi più esposti agli attacchi WorstFit in Windows (fonte: Orange Tsai)
Superficie di attacco estesa
Gli studi presentati da Orange Tsai sui casi WorstFit evidenziano vulnerabilità significative nel modo in cui Windows gestisce la conversione dei caratteri e gli argomenti della riga di comando.
Questi esempi mettono in luce la necessità di una maggiore attenzione nella progettazione delle applicazioni e nella gestione delle configurazioni per prevenire exploit. La ricerca sottolinea anche l’importanza della transizione verso API più sicure e della promozione dell’uso di UTF-8 per mitigare i rischi associati a queste vulnerabilità.
Il ricercatore cita esempi che coinvolgono direttamente Windows, Excel, PHP, software di compressione e decompressione dati, client Git e così via. In tutti i casi, può verificarsi l’esecuzione di codice dannoso semplicemente “giocando” con i dati forniti in input e la sintassi della richiesta.
Chi è responsabile del problema WorstFit?
Il problema alla base di WorstFit è complesso e la responsabilità non può certamente essere attribuita a un singolo attore. Le seguenti entità sono coinvolte:
- Sviluppatori di applicazioni: Gli sviluppatori possono contribuire alla diffusione delle vulnerabilità se non utilizzano le API corrette e se non gestiscono correttamente gli input degli utenti.
- Microsoft: Essendo lo sviluppatore del sistema operativo Windows, Microsoft ha una parte significativa nella responsabilità. La gestione della conversione dei caratteri ANSI e la presenza del meccanismo Best-Fit Mapping creano opportunità per exploit come WorstFit.
- Compiler e librerie runtime: Le vulnerabilità possono derivare dal comportamento del compilatore e dalle librerie di runtime (CRT) che non gestiscono correttamente gli argomenti della riga di comando.
- Progetti Open Source: Alcuni progetti open source distribuiscono eseguibili precompilati gestiti da volontari, rendendo difficile identificare chi è responsabile per eventuali vulnerabilità.
Perché è difficile risolvere il problema?
La risoluzione del problema WorstFit è complicata da diversi fattori. Innanzi tutto, la conversione tra formati può portare a comportamenti imprevisti, specialmente quando si utilizzano caratteri speciali o simboli. Windows, inoltre, ha sempre puntato tanto sulla retrocompatibilità: le modifiche volte a correggere vulnerabilità possono influenzare negativamente applicazioni più vecchie che si basano su comportamenti precedenti.
Gli sviluppatori devono affrontare la sfida di modificare il codice esistente per utilizzare le API capaci di supportare set di caratteri estesi. Ciò richiede una revisione completa della logica di gestione degli argomenti.
Infine, la stessa mancanza di chiarezza su chi debba essere ritenuto responsabile, rende difficile l’implementazione di soluzioni efficaci e tempestive.
I migliori interventi per proteggersi dagli attacchi WorstFit
Come spiegato in precedenza, gli attacchi WorstFit rappresentano una vulnerabilità significativa nei sistemi Windows, sfruttando comportamenti di conversione dei caratteri che possono portare a esecuzioni di codice arbitrario. Sebbene la risoluzione completa di queste vulnerabilità richieda un intervento a livello di sistema operativo, ci sono diverse misure che utenti e sviluppatori possono adottare per mitigare i rischi associati.
Puntare sull’uso di UTF-8
La mitigazione più efficace consisterebbe nell’adozione universale del formato UTF-8 come standard per la codifica dei caratteri in tutte le edizioni di Windows. Questo approccio ridurrebbe significativamente le opportunità di attacco legate alla conversione dei caratteri ANSI, che è alla base del problema WorstFit. Tuttavia, poiché questo cambiamento richiede un intervento da parte di Microsoft, gli utenti devono attendere implementazioni ufficiali.
Utilizzo delle Wide Character API
Gli sviluppatori dovrebbero essere incoraggiati a utilizzare le Wide Character API nelle loro applicazioni. Queste API sono progettate per gestire correttamente i caratteri Unicode e possono prevenire le vulnerabilità associate alle API ANSI. Ad esempio, l’uso di funzioni come wgetcwd
e wgetenv
della C Runtime Library aiuta a evitare l’esposizione agli attacchi WorstFit.
Controllo delle opzioni di codifica in Windows
Gli utenti finali possono controllare le impostazioni di codifica nel proprio sistema Windows. È consigliabile attivare l’opzione UTF-8, se disponibile, anche se attualmente è ancora in fase beta. Gli utenti devono essere consapevoli dei potenziali effetti collaterali e testare attentamente le loro applicazioni dopo aver apportato modifiche a queste impostazioni.
Per procedere in tal senso, si può premere Windows+R
, digitare intl.cpl
, cliccare sulla scheda Opzioni di amministrazione, sul pulsante Cambia impostazioni locali del sistema e infine spuntare la casella Beta: utilizzare Unicode UTF-8 per il supporto della lingua a livello mondiale.
Sanificazione dell’input
Le applicazioni devono implementare rigorose misure di sanificazione degli input per prevenire l’iniezione di comandi malevoli. Anche se questo tipo di controllo non può eliminare completamente il rischio associato al comportamento del Best-Fit Mapping, può ridurre significativamente la superficie d’attacco.
Applicazione di aggiornamenti e patch
È fondamentale mantenere tutti i software aggiornati con le ultime patch di sicurezza. Gli sviluppatori e le aziende dovrebbero monitorare attivamente i comunicati relativi a vulnerabilità note e applicare tempestivamente le correzioni necessarie.
Formazione e consapevolezza degli utenti
La formazione degli utenti finali è cruciale per riconoscere potenziali attacchi e comportamenti sospetti. Gli utenti dovrebbero essere educati sui rischi associati all’uso di software non aggiornato o proveniente da fonti non verificate.
In queste pagine si può trovare una lista degli eseguibili Windows direttamente affetti dal problema WorstFit. Per ciascuno di essi è presente un riferimento al comportamento tenuto dallo sviluppatore (eventuale disponibilità di patch correttive).
Credit immagine in apertura: Orange Tsai