Due degli autori della ricerca, Nicholas Boucher e Ross Anderson, spiegano che è possibile sfruttare una caratteristica del sistema di codifica Unicode per fare in modo che il comportamento del codice compilato sia diverso da quello che appare evidente limitandosi a una semplice analisi del sorgente.
Non solo, ma allo stesso tempo, questa vulnerabilità modifica anche la logica definita dal codice sorgente, rendendo il codice esposto a un’ampia varietà di minacce informatiche, che includono anche minacce legate alle supply chain, oramai bersaglio prediletto degli attaccanti.
Abuso degli standard di codifica del testo
L’intero attacco Trojan Source è stato dimostrato rilevando come questo attacco può interagire con il software e le relative supply chain.
Trojan Source si basa su un semplice trucco che non richiede la modifica del compilatore: per questo può riguardare qualunque progetto sviluppato in Go, C++, C#, JavaScript, Java, Rust e Python.
In informatica un carattere di controllo è un carattere non visualizzabile che non rappresenta in sé un simbolo scritto. Tutti i caratteri nella tabella ASCII al di sotto della posizione 32 fanno parte di questa categoria.
Attacco bidirezionale e omoglifo
I ricercatori hanno dimostrato che un modo per ottenerlo è utilizzare i controlli Unicode per il testo bidirezionale (ad esempio LRI -isolato da sinistra a destra e RLI -isolato da destra a sinistra) per dettare la direzione in cui viene visualizzato il contenuto. Questo metodo è ora tracciato come CVE-2021-42574.
I controlli bidirezionali (Bidi) LRI e RLI sono caratteri invisibili e non sono gli unici. Iniettando queste istruzioni, un compilatore può compilare codice completamente diverso da quello che vede un essere umano.
Nell’immagine seguente, utilizzando i controlli RLI/RLI all’interno della stringa, la seconda riga viene compilata mentre l’occhio umano la legge come un commento che il compilatore ignorerebbe.
Iniettando i caratteri Unicode Bidi di override in commenti e stringhe, un attacante potrebbe “produrre codice sorgente sintatticamente valido nella maggior parte delle lingue moderne per cui l’ordine di visualizzazione dei caratteri presenta una logica che diverge dalla logica reale”.
Un altro modo è un attacco omoglifo (CVE-2021-42694), in cui due caratteri diversi hanno una rappresentazione visiva simile, come il numero “zero” e la lettera “O”, o la “L” minuscola e la “i” maiuscola.
In un attacco omoglifo Trojan Source come esemplificato di seguito, l’occhio umano vedrà entrambe le funzioni identiche, mentre il compilatore distingue tra il latino “H” e il cirillico “H” e tratta il codice come avente due funzioni diverse, quindi il risultato non sarà lo stesso.
In un documento [PDF] che descrive in dettaglio il nuovo metodo di attacco Trojan Source, i ricercatori evidenziano che i caratteri di override bidirezionali (Bidi) persistono attraverso l’azione di copia / incolla sulla maggior parte dei browser, editor e sistemi operativi.
I ricercatori hanno testato l’attacco Trojan Source contro più editor di codice e repository basati sul Web che sono comunemente usati nella programmazione e hanno scoperto che il loro metodo ha funzionato su molti di essi.
Seguendo il principio di utilizzare bidi overrides per creare codice valido quando riordinato, i ricercatori hanno trovato almeno tre tecniche che consentono di sfruttare il codice sorgente:
- Early Returns: nascondendo un’istruzione “return” autentica in un commento in modo che possa causare la restituzione di una funzione prima di quanto sembri
- Commenting Out: ingannare la revisione umana inserendo codice importante, ad esempio un condizionale, in un commento in modo che venga ignorato dal compilatore o dall’interprete
- Stretched Strings: ordinare il codice in modo inverso per farlo sembrare al di fuori di una stringa letterale
Un modo per difendersi da Trojan Source è rifiutare l’uso di caratteri di controllo per la direzionalità del testo nelle specifiche del linguaggio e nei compilatori che implementano i linguaggi.
“Nella maggior parte delle impostazioni, questa semplice soluzione potrebbe essere sufficiente. Se un’applicazione vuole stampare testo che richiede sostituzioni Bidi, gli sviluppatori possono generare tali caratteri utilizzando sequenze di escape anziché incorporare caratteri potenzialmente pericolosi nel codice sorgente.
Divulgazione coordinata
Il 25 luglio, i ricercatori hanno informato più maintainers di prodotti che sono stati colpiti dal metodo di attacco Trojan Source e hanno fissato un periodo di divulgazione di 99 giorni sottoposto a embargo.
Il Centro di coordinamento CERT ha anche ricevuto un rapporto sulle vulnerabilità e ha assistito alla divulgazione coordinata fornendo una piattaforma di comunicazione condivisa per i fornitori che implementano le difese.
A seguito del loro rapporto, i ricercatori hanno ricevuto una media di $ 2.246 in bug bounties da cinque dei destinatari, anche se 11 di loro avevano un programma di bug bounty.
Al momento, molti compilatori non sono in grado di fermare il metodo di attacco Trojan Source, nonostante quasi due dozzine di fornitori di software siano consapevoli della minaccia.
Poiché molti maintainers devono ancora implementare una patch, i due ricercatori raccomandano ai governi e alle aziende di identificare i propri fornitori e di spingerli ad adottare le necessarie difese.
Maestro del Caos Digitale e Guardiano del Cyberspazio, naviga nel mare oscuro della sicurezza informatica da oltre vent’anni, armato di codice e un irresistibile papillon.
Con la precisione di un bisturi e l’umorismo di un hacker, ha trasformato centinaia di “comuni mortali IT” in veri e propri ninja dell’Ethical Hacking. La sua missione? Insegnare l’arte della difesa digitale a migliaia di ignare risorse aziendali, un firewall alla volta.
Tre segreti che lo rendono un unicorno nel mondo cyber:
Ha una relazione quasi ossessiva con le password. Alcuni collezionano francobolli, lui colleziona hash crittografici.
Il suo gatto si chiama Hash. Sì, come l’algoritmo. No, non miagola in binario (ancora).
Indossa sempre un papillon, perché chi ha detto che non si può hackerare con stile?
Se lo cercate, seguite la scia di bit verdi: è il suo colore preferito. Perché anche nel mondo digitale, è sempre primavera per la sicurezza!