Pag-atake sa Trojan Source aron ipaila ang mga pagbag-o sa code nga dili makita sa developer

Ang mga tigdukiduki gikan sa Unibersidad sa Cambridge nagpatik sa usa ka teknik alang sa hilom nga pagsulod sa malisyosong code ngadto sa peer-reviewed source code. Ang giandam nga pamaagi sa pag-atake (CVE-2021-42574) gipresentar ubos sa ngalan nga Trojan Source ug gibase sa pagporma sa teksto nga lahi ang hitsura alang sa compiler/interpreter ug sa tawo nga nagtan-aw sa code. Ang mga pananglitan sa pamaagi gipakita alang sa lain-laing mga compiler ug interpreter nga gihatag alang sa C, C++ (gcc ug clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ug Python.

Ang pamaagi gibase sa paggamit sa mga espesyal nga Unicode nga karakter sa mga komentaryo sa code nga nagbag-o sa han-ay sa pagpakita sa bidirectional nga teksto. Sa tabang sa ingon nga mga karakter sa pagkontrol, ang pipila ka mga bahin sa teksto mahimong ipakita gikan sa wala hangtod sa tuo, samtang ang uban - gikan sa tuo hangtod sa wala. Sa adlaw-adlaw nga praktis, ang ingon nga kontrol nga mga karakter mahimong magamit, pananglitan, sa pagsal-ot sa mga linya sa code sa Hebrew o Arabic ngadto sa usa ka file. Apan kung imong ikombinar ang mga linya nga adunay lain-laing mga direksyon sa teksto sa usa ka linya, gamit ang espesipikong mga karakter, ang mga tudling sa teksto nga gipakita gikan sa tuo ngadto sa wala mahimong magsapaw sa kasamtangan nga regular nga teksto nga gipakita gikan sa wala ngadto sa tuo.

Gamit kini nga pamaagi, mahimo nimong idugang ang usa ka malisyosong pagtukod sa code, apan unya himoa nga dili makita ang teksto nga adunay kini nga konstruksyon kung tan-awon ang code, pinaagi sa pagdugang sa mosunod nga komento o sa sulod sa literal nga mga karakter nga gipakita gikan sa tuo hangtod sa wala, nga motultol sa hingpit lain-laing mga karakter nga gipatong sa malisyosong pagsal-ot. Ang ingon nga kodigo magpabilin nga husto sa semantiko, apan hubad ug ipakita sa lahi nga paagi.

Pag-atake sa Trojan Source aron ipaila ang mga pagbag-o sa code nga dili makita sa developer

Samtang nagrepaso sa code, ang usa ka developer mag-atubang sa biswal nga han-ay sa mga karakter ug makakita og dili kadudahan nga komento sa modernong text editor, web interface o IDE, apan ang compiler ug interpreter mogamit sa lohikal nga han-ay sa mga karakter ug mohimo. iproseso ang malisyoso nga pagsal-ot sama sa, nga wala magtagad sa bidirectional nga teksto sa mga komento. Ang problema nakaapekto sa lainlaing mga sikat nga editor sa code (VS Code, Emacs, Atom), ingon man mga interface alang sa pagtan-aw sa code sa mga repository (GitHub, Gitlab, BitBucket ug tanan nga mga produkto sa Atlassian).

Pag-atake sa Trojan Source aron ipaila ang mga pagbag-o sa code nga dili makita sa developer

Adunay ubay-ubay nga mga paagi sa paggamit sa pamaagi sa pagpatuman sa malisyosong mga aksyon: pagdugang sa usa ka tinago nga "pagbalik" nga ekspresyon, nga modala ngadto sa pagkompleto sa function sa sayo pa; pagkomento sa mga ekspresyon nga kasagarang makita isip balido nga mga konstruksyon (pananglitan, aron ma-disable ang importante nga mga tseke); pag-assign sa ubang mga kantidad sa string nga mosangpot sa mga kapakyasan sa validation sa string.

Pananglitan, ang tig-atake mahimong mosugyot og kausaban nga naglakip sa linya: if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {

nga ipakita sa review interface nga murag access_level != β€œuser” {/ // Susiha kung admin

Dugang pa, usa pa nga variant sa pag-atake ang gisugyot (CVE-2021-42694), nga may kalabotan sa paggamit sa mga homoglyph, mga karakter nga parehas sa hitsura, apan lahi ang kahulugan ug adunay lainlaing mga unicode code (pananglitan, ang karakter nga "Ι‘" susama sa " a”, β€œΙ‘β€ - β€œg”, β€œΙ©β€ - β€œl”). Ang parehas nga mga karakter mahimong magamit sa pipila nga mga pinulongan sa mga ngalan sa mga function ug mga variable aron mapahisalaag ang mga developer. Pananglitan, ang duha ka mga gimbuhaton nga adunay dili mailhan nga mga ngalan mahimong ipasabut nga naghimo sa lainlaing mga aksyon. Kung walay detalyado nga pagtuki, dili dayon klaro kung hain niining duha ka mga gimbuhaton ang gitawag sa usa ka piho nga lugar.

Pag-atake sa Trojan Source aron ipaila ang mga pagbag-o sa code nga dili makita sa developer

Isip usa ka sukod sa seguridad, girekomendar nga ang mga compiler, interpreter, ug mga galamiton sa pag-assemble nga nagsuporta sa mga karakter sa Unicode magpakita sa usa ka sayup o pasidaan kung adunay mga wala gipares nga kontrol nga mga karakter sa mga komentaryo, string literal, o mga identifier nga nagbag-o sa direksyon sa output (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ug U+200F). Ang ingon nga mga karakter kinahanglan usab nga tin-aw nga gidili sa mga detalye sa programming language ug kinahanglan respetuhon sa mga editor sa code ug mga interface sa repository.

Addendum 1: Ang mga vulnerability patch giandam na para sa GCC, LLVM/Clang, Rust, Go, Python ug binutils. GitHub, Bitbucket ug Jira usab giayo ang isyu. Ang pag-ayo alang sa GitLab nagpadayon. Aron mahibal-an ang problema nga code, gisugyot nga gamiton ang command: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]/' tinubdan

Addendum 2: Si Russ Cox, usa sa mga nag-develop sa Plan 9 OS ug ang Go programming language, gisaway ang sobra nga pagtagad sa gihulagway nga pamaagi sa pag-atake, nga dugay nang nahibal-an (Go, Rust, C++, Ruby) ug wala giseryoso. . Sumala sa Cox, ang problema nag-una mahitungod sa husto nga pagpakita sa impormasyon sa code editors ug web interface, nga mahimong masulbad pinaagi sa paggamit sa husto nga mga himan ug code analyzers sa panahon sa pagrepaso. Busa, imbes nga ipunting ang atensyon sa mga pangagpas nga pag-atake, mas angay nga ipunting ang pag-ayo sa mga proseso sa pagrepaso sa code ug dependency.

Nagtuo usab si Ras Cox nga ang mga compiler dili ang husto nga lugar aron ayohon ang problema, tungod kay pinaagi sa pagdili sa peligro nga mga simbolo sa lebel sa compiler, adunay nagpabilin nga usa ka dako nga layer sa mga himan diin ang paggamit niini nga mga simbolo nagpabilin nga madawat, sama sa mga sistema sa pagtukod, mga assembler, package managers ug lain-laing mga configuration parser ug data. Ingon nga usa ka pananglitan, ang Rust nga proyekto gihatag, nga nagdili sa pagproseso sa LTR/RTL code sa compiler, apan wala makadugang sa pag-ayo sa Cargo package manager, nga nagtugot sa susama nga pag-atake pinaagi sa Cargo.toml file. Sa susama, ang mga file sama sa BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ug requirements.txt mahimong tinubdan sa mga pag-atake.

Source: opennet.ru

Idugang sa usa ka comment