Vulnerabilità scoperta in un gran numero di compilatori per nascondere codice maligno
Gli esperti della Cambridge University hanno pubblicato informazioni su una pericolosa vulnerabilità (CVE-2021-42574) che colpisce quasi tutti i moderni compilatori di codice sorgente. L'articolo Trojan Source descrive un attacco insidioso che permette agli hacker di nascondere codice maligno nel codice sorgente di vari programmi.
L'attacco si basa sul modo in cui i compilatori gestiscono gli identificatori unici utilizzati per determinare se il testo è orientato da sinistra a destra o da destra a sinistra. La debolezza sta nell'algoritmo Unicode Bidi, che permette di usare insieme parole scritte da destra a sinistra e da sinistra a destra. Grazie a questo algoritmo, le parole arabe e inglesi possono essere combinate. Permette di leggere il testo scritto da destra a sinistra, da sinistra a destra e viceversa.
In alcuni casi la capacità dell'algoritmo Unicode Bidi non è sufficiente per cambiare il modo in cui queste parole sono visualizzate, e in questi casi si usano caratteri di controllo speciali. Tuttavia, se le parole con una direzione di testo diversa sono combinate in una linea, è possibile usare questi caratteri di controllo per cambiare la direzione di lettura di questo testo da parte del compilatore e, per esempio, far funzionare come codice eseguibile linee che sembrano commenti.
Usando questo metodo, si può aggiungere un'istruzione malevola al normale codice sorgente e rendere il testo di quell'istruzione invisibile quando si visualizza il codice con un commento successivo. Questo porterà all'inserimento di caratteri completamente diversi, che potrebbero effettivamente essere codice arbitrario. Il codice sorgente finale rimane semanticamente corretto, ma il contrario accade dopo la compilazione.
Durante la revisione e l'analisi di tale codice sorgente, il programmatore vede codice con commenti che non destano alcun sospetto, ma il compilatore o l'interprete invertirà l'ordine logico dei caratteri e un commento innocente si trasformerà in un codice aggiuntivo inserito nel programma. Il bug è presente in quasi tutti i compilatori - per i linguaggi di programmazione C, C++ (gcc e clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go e Python; in vari editor di codice popolari, compresi VS Code, Emacs, Atom; e nelle interfacce di revisione del codice sorgente in GitHub, Gitlab, BitBucket e tutti i prodotti Atlassian.
Fonte: trojansource, zdnet