Attaccu di Trojan Source per intruduce cambiamenti à u codice chì sò invisibili à u sviluppatore

I ricercatori di l'Università di Cambridge anu publicatu una tecnica per inserisce in silenziu codice maliziusu in u codice fonte rivedutu da i pari. U metudu di attaccu preparatu (CVE-2021-42574) hè prisentatu sottu u nome Trojan Source è hè basatu annantu à a furmazione di testu chì pare diversu per u compilatore / interprete è a persona chì vede u codice. Esempii di u metudu sò dimustrati per vari compilatori è interpreti furniti per C, C++ (gcc è clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go è Python.

U metudu hè basatu annantu à l'usu di caratteri speciali Unicode in i cumenti di codice chì cambianu l'ordine di visualizazione di u testu bidirezionale. Cù l'aiutu di tali caratteri di cuntrollu, alcune parti di u testu ponu esse mostrate da manca à diritta, mentri àutri - da diritta à manca. In a pratica di ogni ghjornu, tali caratteri di cuntrollu pò esse usatu, per esempiu, per inserisce linee di codice in ebraicu o arabu in un schedariu. Ma se combina linee cù diverse direzioni di testu in una linea, utilizendu i caratteri specificati, i passaggi di testu affissati da a diritta à a manca ponu sovrappone u testu regulare esistente affissatu da a manca à a diritta.

Utilizendu stu metudu, pudete aghjunghje una custruzzione maliziosa à u codice, ma poi rende u testu cù questu custruzzione invisibili quandu vede u codice, aghjustendu in u cumentu seguitu o in i caratteri literali mostrati da diritta à manca, chì portanu à cumplettamente. caratteri diffirenti essendu superposti nantu à l'inserzione maliziosa. Un tali codice resterà semanticamente currettu, ma serà interpretatu è mostratu in modu diversu.

Attaccu di Trojan Source per intruduce cambiamenti à u codice chì sò invisibili à u sviluppatore

Mentre rivede u codice, un sviluppatore serà cunfruntatu cù l'ordine visuale di i caratteri è vede un cummentariu micca sospettu in un editore di testu mudernu, interfaccia web o IDE, ma u compilatore è l'interprete utilizanu l'ordine logicu di i caratteri è vi processà l'inserzione maliciosa cum'è, senza attente à u testu bidirezionale in i cumenti. U prublema affetta diversi editori di codice populari (VS Code, Emacs, Atom), è ancu interfacce per vede u codice in repository (GitHub, Gitlab, BitBucket è tutti i prudutti Atlassian).

Attaccu di Trojan Source per intruduce cambiamenti à u codice chì sò invisibili à u sviluppatore

Ci hè parechje manere di utilizà u metudu per implementà l'azzioni maliziusi: aghjunghjendu una espressione "return" oculata, chì porta à u cumpletu di a funzione prima di u tempu; cumentu di espressioni chì sò normalment visibili cum'è custruzzioni valide (per esempiu, per disattivà i cuntrolli impurtanti); assignà altri valori di stringa chì portanu à fallimenti di validazione di stringa.

Per esempiu, un attaccante puderia prupone un cambiamentu chì include a linea: if access_level != "user{U+202E} {U+2066}// Verificate se admin{U+2069} {U+2066}" {

chì serà affissatu in l'interfaccia di rivisione cum'è access_level != "user" { // Verificate se admin

Inoltre, hè stata pruposta una altra variante d'attaccu (CVE-2021-42694), assuciata à l'usu di l'omoglifi, caratteri chì sò simili in l'apparenza, ma differiscenu in significatu è anu diversi codici Unicode (per esempiu, u caratteru "ɑ" s'assumiglia à " a", "ɡ" - "g", "ɩ" - "l"). I caratteri simili ponu esse aduprati in alcune lingue in i nomi di funzioni è variabili per ingannà i sviluppatori. Per esempiu, duie funzioni cù nomi indistinguibili ponu esse definite chì facenu diverse azzioni. Senza un analisi detallatu, ùn hè micca chjaru immediatamente quale di sti dui funzioni hè chjamatu in un locu specificu.

Attaccu di Trojan Source per intruduce cambiamenti à u codice chì sò invisibili à u sviluppatore

Cum'è una misura di sicurità, hè cunsigliatu chì compilatori, interpreti è strumenti di assemblea chì supportanu i caratteri Unicode mostranu un errore o un avvisu s'ellu ci sò caratteri di cuntrollu senza accoppiamentu in cumenti, letterali di stringa, o identificatori chì cambianu a direzzione di output (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E è U+200F). Tali caratteri anu ancu esse esplicitamente pruibiti in e specificazioni di lingua di prugrammazione è devenu esse rispettati in editori di codice è interfacce di repository.

Addendum 1: Patch di vulnerabilità sò stati preparati per GCC, LLVM/Clang, Rust, Go, Python è binutils. GitHub, Bitbucket è Jira anu ancu risoltu u prublema. Una correzione per GitLab hè in corso. Per identificà u codice problematicu, hè cunsigliatu di utilizà u cumandimu: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069\uXNUMX\uXNUMXF\uXNUMXA\uXNUMXB\uXNUMXC\uXNUMXD\uXNUMXE\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX/ fonte

Addendum 2: Russ Cox, unu di i sviluppatori di u Pianu 9 OS è u linguaghju di prugrammazione Go, hà criticatu l'attenzione eccessiva à u metudu di attaccu descrittu, chì hè statu longu cunnisciutu (Go, Rust, C ++, Ruby) è ùn hè statu pigliatu in seriu. . Sicondu Cox, u prublema cuncerna principarmenti a visualizazione curretta di l'infurmazioni in editori di codice è interfacce web, chì ponu esse risolti cù l'uttene curretta è l'analizzatori di codice durante a rivista. Dunque, invece di attirà l'attenzione à l'attacchi speculativi, saria più appruvatu di fucalizza nantu à a migliurà i prucessi di rivisione di codice è di dependenza.

Ras Cox crede ancu chì i compilatori ùn sò micca u locu adattatu per risolve u prublema, postu chì pruibendu i simboli periculosi à u livellu di u compilatore, resta un grande stratu di strumenti in quale l'usu di sti simboli resta accettabile, cum'è sistemi di custruzzione, assemblatori, gestori di pacchetti è vari parsers di cunfigurazione è dati. Cum'è un esempiu, u prughjettu Rust hè datu, chì pruibitu u trasfurmazioni di codice LTR / RTL in u compilatore, ma ùn aghjunghje micca una correzione à u gestore di pacchettu Cargo, chì permette un attaccu simili à traversu u schedariu Cargo.toml. In listessu modu, i schedari cum'è BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml è requirements.txt ponu diventà fonti di attacchi.

Source: opennet.ru

Add a comment