Trojan Sous atak pou prezante chanjman nan kòd la ki envizib pou pwomotè a

Chèchè nan University of Cambridge te pibliye yon teknik pou mete an silans kòd move nan kòd sous revize parèg yo. Metòd atak la prepare (CVE-2021-42574) prezante anba non Trojan Source epi li baze sou fòmasyon tèks ki sanble diferan pou konpilateur/entèprèt la ak moun ki gade kòd la. Egzanp metòd yo demontre pou divès kalite konpilateur ak entèprèt yo bay pou C, C++ (gcc ak clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ak Python.

Metòd la baze sou itilizasyon karaktè Unicode espesyal nan kòmantè kòd ki chanje lòd ekspozisyon tèks bidireksyon an. Avèk èd nan karaktè kontwòl sa yo, kèk pati nan tèks la ka parèt de goch a dwat, pandan ke lòt moun - de dwat a goch. Nan pratik chak jou, karaktè kontwòl sa yo ka itilize, pou egzanp, insert liy kòd nan ebre oswa arab nan yon dosye. Men, si ou konbine liy ak direksyon tèks diferan nan yon sèl liy, lè l sèvi avèk karaktè yo espesifye, pasaj tèks ki parèt de dwat a goch ka sipèpoze tèks regilye ki egziste deja parèt de goch a dwat.

Sèvi ak metòd sa a, ou ka ajoute yon konstriksyon move nan kòd la, men Lè sa a, fè tèks la ak konstriksyon sa a envizib lè w ap gade kòd la, lè w ajoute nan kòmantè sa a oswa andedan karaktè literal yo montre de dwat a goch, ki pral mennen nan konplètman. karaktè diferan yo te sipèpoze sou ensèsyon an move. Kòd sa a ap rete semantik kòrèk, men yo pral entèprete epi parèt yon fason diferan.

Trojan Sous atak pou prezante chanjman nan kòd la ki envizib pou pwomotè a

Pandan y ap revize kòd, yon pwomotè pral konfwonte ak lòd vizyèl karaktè yo epi li pral wè yon kòmantè ki pa sispèk nan yon editè tèks modèn, koòdone entènèt oswa IDE, men konpilatè a ak entèprèt yo pral sèvi ak lòd lojik karaktè yo epi yo pral trete ensèsyon an move jan yo ye, san yo pa peye atansyon sou tèks la bidireksyon nan kòmantè yo. Pwoblèm nan afekte divès editè kòd popilè (VS Code, Emacs, Atom), osi byen ke interfaces pou gade kòd nan depo (GitHub, Gitlab, BitBucket ak tout pwodwi Atlassian).

Trojan Sous atak pou prezante chanjman nan kòd la ki envizib pou pwomotè a

Gen plizyè fason yo sèvi ak metòd la aplike aksyon move: ajoute yon ekspresyon kache "retounen", ki mennen nan fini an nan fonksyon an davans; fè kòmantè ekspresyon ki ta nòmalman vizib kòm konstri ki valab (pa egzanp, pou enfim chèk enpòtan); bay lòt valè fisèl ki mennen nan echèk validation fisèl.

Pa egzanp, yon atakè ta ka pwopoze yon chanjman ki gen ladan liy lan: if access_level != "itilizatè{U+202E} {U+2066}// Tcheke si admin{U+2069} {U+2066}" {

ki pral parèt nan koòdone revizyon an kòm si access_level != "itilizatè" { // Tcheke si admin

Anplis de sa, yo te pwopoze yon lòt varyant atak (CVE-2021-42694), ki asosye ak itilizasyon omoglif, karaktè ki sanble nan aparans, men ki diferan nan siyifikasyon epi ki gen diferan kòd unicode (pa egzanp, karaktè "ɑ" sanble ak " a", "ɡ" - "g", "ɩ" - "l"). Karaktè menm jan an ka itilize nan kèk lang nan non yo nan fonksyon ak varyab twonpe devlopè yo. Pou egzanp, de fonksyon ak non endistenabl yo ka defini ki fè aksyon diferan. San yo pa yon analiz detaye, li pa imedyatman klè kilès nan de fonksyon sa yo rele nan yon kote espesifik.

Trojan Sous atak pou prezante chanjman nan kòd la ki envizib pou pwomotè a

Kòm yon mezi sekirite, li rekòmande pou konpilatè, entèprèt, ak zouti asanble ki sipòte karaktè Unicode montre yon erè oswa avètisman si gen karaktè kontwòl ki pa pè nan kòmantè, literal fisèl, oswa idantifyan ki chanje direksyon pwodiksyon an (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ak U+200F). Karaktè sa yo ta dwe tou klèman entèdi nan espesifikasyon langaj pwogramasyon epi yo ta dwe respekte nan editè kòd ak koòdone depo.

Addendum 1: Yo te prepare plak vilnerabilite pou GCC, LLVM/Clang, Rust, Go, Python ak binutils. GitHub, Bitbucket ak Jira te rezoud pwoblèm nan tou. Yon ranje pou GitLab ap fèt. Pou idantifye kòd pwoblèm, li sijere pou itilize kòmandman an: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' /path/to/ sous

Addendum 2: Russ Cox, youn nan devlopè yo nan Plan 9 OS ak langaj pwogram Go, kritike atansyon a twòp nan metòd la atak ki dekri, ki te konnen depi lontan (Go, Rust, C++, Ruby) epi yo pa te pran oserye. . Dapre Cox, pwoblèm nan sitou konsène ekspozisyon kòrèk enfòmasyon nan editè kòd ak koòdone entènèt, ki ka rezoud lè l sèvi avèk zouti ki kòrèk yo ak analizè kòd pandan revizyon. Se poutèt sa, olye pou yo atire atansyon sou atak spéculatif, li ta pi apwopriye pou konsantre sou amelyore kòd ak pwosesis revizyon depandans.

Ras Cox kwè tou ke konpilatè yo pa bon kote pou rezoud pwoblèm nan, depi lè yo entèdi senbòl danjere nan nivo konpilateur, gen rete yon gwo kouch zouti nan ki itilize nan senbòl sa yo rete akseptab, tankou bati sistèm, asanblaj, manadjè pake ak divès kalite analizè konfigirasyon ak done. Kòm yon egzanp, pwojè Rust yo bay, ki entèdi pwosesis la nan kòd LTR/RTL nan du a, men li pa t ajoute yon ranje nan manadjè a pake kago, ki pèmèt yon atak menm jan an nan dosye a Cargo.toml. Menm jan an tou, dosye tankou BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ak requirements.txt ka vin sous atak.

Sous: opennet.ru

Add nouvo kòmantè