Serangan Sumber Trojan kanggo ngenalake owah-owahan ing kode sing ora katon kanggo pangembang

Peneliti saka Universitas Cambridge wis nerbitake tèknik kanggo nglebokake kode angkoro kanthi meneng menyang kode sumber sing dideleng peer. Cara serangan sing disiapake (CVE-2021-42574) diwenehi jeneng Sumber Trojan lan adhedhasar tatanan teks sing katon beda kanggo compiler / interpreter lan wong sing ndeleng kode kasebut. Conto cara dituduhake kanggo macem-macem compiler lan interpreter diwenehake kanggo C, C ++ (gcc lan clang), C #, JavaScript (Node.js), Jawa (OpenJDK 16), Rust, Go lan Python.

Cara kasebut adhedhasar panggunaan karakter Unicode khusus ing komentar kode sing ngganti urutan tampilan teks bidirectional. Kanthi bantuan saka karakter kontrol kuwi, sawetara bagΓ©an saka teks bisa ditampilake saka kiwa menyang tengen, lan liyane - saka tengen ngiwa. Ing laku saben dinten, karakter kontrol kuwi bisa digunakake, contone, kanggo nglebokake baris kode ing basa Ibrani utawa Arab menyang file. Nanging yen sampeyan nggabungake garis kanthi arah teks sing beda ing siji baris, nggunakake karakter sing ditemtokake, perangan teks sing ditampilake saka tengen ngiwa bisa tumpang tindih teks biasa sing ditampilake saka kiwa menyang tengen.

Nggunakake metode iki, sampeyan bisa nambah konstruksi angkoro menyang kode, nanging banjur nggawe teks kanthi konstruksi iki ora katon nalika ndeleng kode kasebut, kanthi nambahake komentar ing ngisor iki utawa ing njero karakter literal sing ditampilake saka tengen ngiwa, sing bakal nyebabake rampung. karakter beda kang superimposed ing sisipan angkoro. Kode kasebut bakal tetep bener kanthi semantik, nanging bakal diinterpretasikake lan ditampilake kanthi beda.

Serangan Sumber Trojan kanggo ngenalake owah-owahan ing kode sing ora katon kanggo pangembang

Nalika mriksa kode, pangembang bakal ngadhepi urutan visual saka karakter lan bakal weruh komentar sing ora curiga ing editor teks modern, antarmuka web utawa IDE, nanging kompiler lan juru bakal nggunakake urutan logis saka karakter lan bakal proses sisipan angkoro kaya apa, tanpa nggatekake teks bidirectional ing komentar. Masalah kasebut mengaruhi macem-macem editor kode populer (Kode VS, Emacs, Atom), uga antarmuka kanggo ndeleng kode ing repositori (GitHub, Gitlab, BitBucket lan kabeh produk Atlassian).

Serangan Sumber Trojan kanggo ngenalake owah-owahan ing kode sing ora katon kanggo pangembang

Ana sawetara cara kanggo nggunakake metode kanggo ngleksanakake tumindak ala: nambah ekspresi "bali" sing didhelikake, sing ndadΓ©kakΓ© kanggo ngrampungake fungsi luwih dhisik; ngomentari ekspresi sing biasane katon minangka konstruksi sing bener (contone, kanggo mateni pamriksa penting); nemtokake nilai string liyane sing nyebabake gagal validasi string.

Contone, panyerang bisa ngusulake owah-owahan sing kalebu baris: if access_level != "user{U+202E} {U+2066}// Priksa manawa admin{U+2069} {U+2066}" {

sing bakal ditampilake ing antarmuka review kaya access_level != "user" {/ // Priksa manawa admin

Kajaba iku, varian serangan liyane wis diusulake (CVE-2021-42694), sing digandhengake karo panggunaan homoglyph, karakter sing katon padha, nanging beda makna lan duwe kode unicode sing beda (contone, karakter "Ι‘" meh padha karo " a", "Ι‘" - "g", "Ι©" - "l"). Karakter sing padha bisa digunakake ing sawetara basa kanthi jeneng fungsi lan variabel kanggo nyasarake pangembang. Contone, rong fungsi kanthi jeneng sing ora bisa dibedakake bisa ditetepake sing nindakake tumindak sing beda. Tanpa analisa sing rinci, ora langsung jelas endi saka rong fungsi kasebut sing diarani ing papan tartamtu.

Serangan Sumber Trojan kanggo ngenalake owah-owahan ing kode sing ora katon kanggo pangembang

Minangka langkah keamanan, disaranake kompiler, juru basa, lan piranti perakitan sing ndhukung karakter Unicode nampilake kesalahan utawa bebaya yen ana karakter kontrol sing ora dipasangake ing komentar, literal string, utawa pengenal sing ngganti arah output (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E lan U+200F). Karakter kasebut uga kudu dilarang sacara eksplisit ing spesifikasi basa pamrograman lan kudu dihormati ing editor kode lan antarmuka repositori.

Tambahan 1: Patch kerentanan wis disiapake kanggo GCC, LLVM / Clang, Rust, Go, Python lan binutils. GitHub, Bitbucket lan Jira uga ndandani masalah kasebut. Ndandani GitLab lagi ditindakake. Kanggo ngenali kode masalah, disaranake nggunakake printah: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]/' sumber

Tambahan 2: Russ Cox, salah sawijining pangembang Plan 9 OS lan basa pamrograman Go, ngritik perhatian sing berlebihan marang metode serangan sing diterangake, sing wis suwe dikenal (Go, Rust, C ++, Ruby) lan ora dianggep serius. . Miturut Cox, masalah kasebut utamane babagan tampilan informasi sing bener ing panyunting kode lan antarmuka web, sing bisa ditanggulangi kanthi nggunakake alat lan penganalisa kode sing bener nalika ditinjau. Mulane, tinimbang narik kawigaten marang serangan spekulatif, luwih becik fokus kanggo ningkatake proses review kode lan dependensi.

Ras Cox uga pracaya sing compiler ora Panggonan tengen kanggo ndandani masalah, wiwit dening nglarang simbol mbebayani ing tingkat compiler, isih ana lapisan ageng saka alat kang nggunakake simbol iki tetep ditrima, kayata mbangun sistem, assemblers, manajer paket lan macem-macem parser konfigurasi lan data. Contone, project Rust diwenehi, kang dilarang Processing saka LTR / kode RTL ing compiler, nanging ora nambah fix kanggo manager paket Cargo, sing ngidini serangan padha liwat file Cargo.toml. Kajaba iku, file kayata BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml lan requirements.txt bisa dadi sumber serangan.

Source: opennet.ru

Add a comment