Trojan Boarne oanfal om wizigingen yn 'e koade yn te fieren dy't ûnsichtber binne foar de ûntwikkelder

Undersikers fan 'e Universiteit fan Cambridge hawwe in technyk publisearre foar it stil ynfoegje fan kweade koade yn peer-reviewed boarnekoade. De tariede oanfalmetoade (CVE-2021-42574) wurdt presintearre ûnder de namme Trojan Source en is basearre op 'e formaasje fan tekst dy't oars útsjocht foar de kompilator / tolk en de persoan dy't de koade besjocht. Foarbylden fan 'e metoade wurde oantoand foar ferskate gearstallers en tolken levere foar C, C ++ (gcc en clang), C #, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go en Python.

De metoade is basearre op it brûken fan spesjale Unicode-tekens yn koade-kommentaar dy't de werjeftefolchoarder fan bidirectionele tekst feroarje. Mei help fan sokke kontrôlekarakters kinne guon dielen fan 'e tekst fan links nei rjochts werjûn wurde, wylst oaren - fan rjochts nei lofts. Yn 'e deistige praktyk kinne sokke kontrôletekens brûkt wurde om bygelyks koaderigels yn it Hebrieusk of Arabysk yn in bestân yn te foegjen. Mar as jo rigels kombinearje mei ferskate tekstrjochtings yn ien rigel, mei de oantsjutte tekens, kinne passaazjes fan tekst werjûn fan rjochts nei lofts besteande reguliere tekst oerlappe dy't fan links nei rjochts werjûn wurdt.

Mei dizze metoade kinne jo in kweade konstruksje taheakje oan de koade, mar meitsje dan de tekst mei dit konstruksje ûnsichtber by it besjen fan de koade, troch yn de folgjende opmerking ta te foegjen of binnen de letterlike tekens werjûn fan rjochts nei lofts, wat sil liede ta folslein ferskate karakters wurde boppe op 'e kweade ynfoeging. Sokke koade sil semantysk korrekt bliuwe, mar sil oars ynterpretearre en werjûn wurde.

Trojan Boarne oanfal om wizigingen yn 'e koade yn te fieren dy't ûnsichtber binne foar de ûntwikkelder

By it beoardieljen fan koade sil in ûntwikkelder konfrontearre wurde mei de fisuele folchoarder fan 'e karakters en sil in net-fertochte opmerking sjen yn in moderne tekstbewurker, webynterface of IDE, mar de kompilator en tolk sille de logyske folchoarder fan 'e karakters brûke en sil ferwurkje de kweade ynfoeging lykas is, sûnder omtinken te jaan oan de bidirectionele tekst yn 'e opmerkings. It probleem hat ynfloed op ferskate populêre koade-bewurkers (VS Code, Emacs, Atom), lykas ynterfaces foar it besjen fan koade yn repositories (GitHub, Gitlab, BitBucket en alle Atlassian-produkten).

Trojan Boarne oanfal om wizigingen yn 'e koade yn te fieren dy't ûnsichtber binne foar de ûntwikkelder

D'r binne ferskate manieren om de metoade te brûken om kweade aksjes út te fieren: it tafoegjen fan in ferburgen "return"-ekspresje, dy't liedt ta it foltôgjen fan 'e funksje foarôfgeand; it kommentearjen fan útdrukkingen dy't normaal sichtber binne as jildige konstruksjes (bygelyks om wichtige kontrôles út te skeakeljen); it tawizen fan oare stringwearden dy't liede ta string-validaasjemislukkingen.

In oanfaller kin bygelyks in wiziging foarstelle dy't de rigel omfettet: if access_level != "brûker{U+202E} {U+2066}// Kontrolearje as admin{U+2069} {U+2066}" {

dy't yn 'e resinsje-ynterface werjûn wurde as as access_level != "brûker" {// Kontrolearje as admin

Derneist is in oare oanfalsfariant foarsteld (CVE-2021-42694), ferbûn mei it brûken fan homoglyfen, karakters dy't ferlykber binne yn uterlik, mar ferskille yn betsjutting en hawwe ferskillende unicode-koades (bygelyks it karakter "ɑ" liket op " a", "ɡ" - "g", "ɩ" - "l"). Fergelykbere karakters kinne yn guon talen brûkt wurde yn 'e nammen fan funksjes en fariabelen om ûntwikkelders te mislieden. Bygelyks kinne twa funksjes mei net te ûnderskieden nammen definieare wurde dy't ferskate aksjes útfiere. Sûnder in detaillearre analyze is it net daliks dúdlik hokker fan dizze twa funksjes op in spesifyk plak neamd wurdt.

Trojan Boarne oanfal om wizigingen yn 'e koade yn te fieren dy't ûnsichtber binne foar de ûntwikkelder

As feiligensmaatregel wurdt it oanrikkemandearre dat gearstallers, tolken en assemblage-ark dy't Unicode-karakters stypje in flater of warskôging werjaan as d'r net-paarde kontrôlekarakters binne yn opmerkings, lettertekens of identifiers dy't de útfierrjochting feroarje (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E en U+200F). Sokke karakters moatte ek eksplisyt ferbean wurde yn spesifikaasjes fan programmeartaal en moatte wurde respektearre yn koade-bewurkers en repository-ynterfaces.

Addendum 1: Kwetsberenspatches binne taret foar GCC, LLVM / Clang, Rust, Go, Python en binutils. GitHub, Bitbucket en Jira hawwe ek it probleem repareare. In fix foar GitLab is oan 'e gong. Om problematyske koade te identifisearjen, wurdt it oanrikkemandearre om it kommando te brûken: grep -r $'[\u061C\u200E\u200A\u202B\u202C\u202D\u202C\u202D\u2066E\u2067\u2068\u2069\uXNUMX\uXNUMX/' boarne

Addendum 2: Russ Cox, ien fan 'e ûntwikkelders fan' e Plan 9 OS en de Go-programmearring taal, bekritisearre de oermjittige oandacht foar de beskreaune oanfalmetoade, dy't al lang bekend is (Go, Rust, C++, Ruby) en waard net serieus nommen . Neffens Cox giet it probleem benammen om de juste werjefte fan ynformaasje yn koade-bewurkers en web-ynterfaces, dy't oplost wurde kinne troch de juste ark en koade-analyzers te brûken by beoardieling. Dêrom, yn stee fan it tekenjen fan omtinken foar spekulative oanfallen, soe it mear passend wêze om te rjochtsjen op it ferbetterjen fan koade- en ôfhinklikensbeoardielingsprosessen.

Ras Cox is ek fan betinken dat kompilatoren net it goeie plak binne om it probleem op te lossen, om't troch gefaarlike symboalen op kompilernivo te ferbieden, bliuwt d'r in enoarme laach ark wêryn it gebrûk fan dizze symboalen akseptabel bliuwt, lykas bouwsystemen, assemblers, pakketbehearders en ferskate konfiguraasjeparsers en gegevens. As foarbyld wurdt it Rust-projekt jûn, dat de ferwurking fan LTR / RTL-koade yn 'e kompiler ferbean, mar gjin fix hat tafoege oan' e Cargo-pakketbehearder, wêrtroch in ferlykbere oanfal troch de Cargo.toml-bestân mooglik is. Likegoed kinne bestannen lykas BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml en requirements.txt boarnen wurde fan oanfallen.

Boarne: opennet.ru

Add a comment