I ricercatori hanno scoperto una nuova tecnica per iniettare vulnerabilità nel codice sorgente di un software e renderle invisibili in modo che nessuno possa notarle: “piuttosto che inserire bug logici, gli avversari possono attaccare la codifica dei file di codice sorgente per iniettare vulnerabilità”.
Il trucco consisterebbe nell’utilizzare i caratteri di controllo Unicode per riordinare i token nel codice sorgente a livello di codifica. Questi token riordinati visivamente possono essere utilizzati per visualizzare la logica che diverge dalla logica presentata dall’ordinamento logico dei token del codice sorgente.
I compilatori e gli interpreti aderiscono all’ordine logico del codice sorgente, non all’ordine visivo.
L’attacco consiste nell’utilizzare caratteri di controllo incorporati nei commenti e nelle stringhe per riordinare i caratteri del codice sorgente in modo da modificarne la logica.
Gli avversari possono sfruttare questo escamotage per inserire vulnerabilità nel codice che non saranno viste dai revisori umani.
Si tratta di un attacco particolarmente potente nel contesto delle catene di fornitura del software. Nel caso in cui un avversario commette con successo vulnerabilità mirate nel codice open source ingannando i revisori umani, il software a valle probabilmente erediterà la vulnerabilità.
I ricercatori spiegano che esistono diverse tecniche che possono essere utilizzate per sfruttare il riordino visivo dei token del codice sorgente:
Early Returns causano il cortocircuito di una funzione eseguendo return un’istruzione che visivamente sembra essere all’interno di un commento.
Commenting-Out fa apparire visivamente un commento come codice, che a sua volta non viene eseguito.
Stretched Strings fanno sì che porzioni di valori letterali stringa appaiano visivamente come codice, il che ha lo stesso effetto del commento e causa l’esito negativo dei confronti tra stringhe.
“I compilatori, gli interpreti e le pipeline di compilazione che supportano Unicode dovrebbero generare errori o avvisi per i caratteri di controllo bidirezionali non terminati nei commenti o nelle stringhe letterali e per gli identificatori con caratteri confondibili con script misti. Le specifiche della lingua dovrebbero formalmente vietare i caratteri di controllo bidirezionali non terminati nei commenti e nelle stringhe letterali. Gli editor di codice e i frontend del repository dovrebbero rendere percepibili i caratteri di controllo bidirezionali e i caratteri confondibili con script misti con simboli visivi o avvisi”, concludono i ricercatori.
https://www.trojansource.codes/
https://www.trojansource.codes/trojan-source.pdf