Hoʻouka Trojan Source e hoʻokomo i nā loli i ke code i ʻike ʻole ʻia e ka mea hoʻomohala

Ua paʻi nā mea noiʻi mai ke Kulanui o Cambridge i kahi ʻenehana no ka hoʻokomo mālie ʻana i nā code ʻino i loko o ka code kumu i nānā ʻia e nā hoa. Hōʻike ʻia ke ʻano hoʻouka kaua i hoʻomākaukau ʻia (CVE-2021-42574) ma lalo o ka inoa Trojan Source a ua hoʻokumu ʻia ma ka hoʻokumu ʻana o nā kikokikona i ʻokoʻa no ka mea hoʻopili / unuhi ʻōlelo a me ka mea e nānā ana i ke code. Hōʻike ʻia nā hiʻohiʻona o ke ʻano no nā mea hōʻuluʻulu like ʻole a me nā unuhi ʻōlelo i hoʻolako ʻia no C, C++ (gcc a clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go a me Python.

Hoʻokumu ʻia ke ʻano ma ka hoʻohana ʻana i nā huaʻōlelo Unicode kūikawā i nā ʻōlelo code e hoʻololi i ke ʻano hōʻike o nā kikokikona bidirectional. Me ke kōkua o ia mau mana mana, hiki ke hōʻike ʻia kekahi mau ʻāpana o ka kikokikona mai ka hema a i ka ʻākau, a ʻo nā mea ʻē aʻe - mai ka ʻākau a i ka hema. Ma ka hana o kēlā me kēia lā, hiki ke hoʻohana ʻia ia mau mana mana, no ka laʻana, e hoʻokomo i nā laina code ma ka ʻōlelo Hebera a i ʻole Arabic i loko o kahi faila. Akā inā hoʻohui ʻoe i nā laina me nā kuhikuhi kikokikona ʻokoʻa i ka laina hoʻokahi, me ka hoʻohana ʻana i nā huaʻōlelo i kuhikuhi ʻia, hiki i nā paukū o nā kikokikona i hōʻike ʻia mai ka ʻākau a i ka hema hiki ke uhi i nā kikokikona maʻamau i hōʻike ʻia mai ka hema a i ka ʻākau.

Ke hoʻohana nei i kēia ʻano hana, hiki iā ʻoe ke hoʻohui i kahi hana ʻino i ke code, akā e hana i ka kikokikona me kēia kūkulu i ʻike ʻole ʻia i ka nānā ʻana i ke code, ma ka hoʻohui ʻana i ka ʻōlelo aʻe a i ʻole i loko o nā huaʻōlelo maoli i hōʻike ʻia mai ka ʻākau a i ka hema, e alakaʻi i ka holoʻokoʻa. nā huaʻōlelo like ʻole e kau ʻia ana ma luna o ka hoʻokomo ʻino. E hoʻomau mau ʻia kēlā code, akā e unuhi ʻia a hōʻike ʻia ma ke ʻano ʻokoʻa.

Hoʻouka Trojan Source e hoʻokomo i nā loli i ke code i ʻike ʻole ʻia e ka mea hoʻomohala

I ka nānā ʻana i ka code, e ʻike ʻia kahi mea hoʻomohala i ke ʻano ʻike maka o nā huaʻōlelo a ʻike ʻo ia i kahi ʻōlelo kānalua ʻole i loko o kahi mea hoʻoponopono kikokikona hou, ka pūnaewele pūnaewele a i ʻole IDE, akā e hoʻohana ka mea hōʻuluʻulu a me ka unuhi ʻōlelo i ka hoʻonohonoho kūpono o nā huaʻōlelo a e hana. e hana i ka hoʻokomo ʻino e like me ia, me ka nānā ʻole ʻana i ka kikokikona bidirectional i nā manaʻo. Hoʻopilikia ka pilikia i nā mea hoʻoponopono code kaulana (VS Code, Emacs, Atom), a me nā pilina no ka nānā ʻana i nā code i loko o nā waihona (GitHub, Gitlab, BitBucket a me nā huahana Atlassian āpau).

Hoʻouka Trojan Source e hoʻokomo i nā loli i ke code i ʻike ʻole ʻia e ka mea hoʻomohala

Nui nā ala e hoʻohana ai i ke ala e hoʻokō ai i nā hana ʻino: hoʻohui i kahi ʻōlelo huna "hoʻihoʻi", e alakaʻi ana i ka hoʻopau ʻana o ka hana ma mua o ka manawa; ka ʻōlelo ʻana i nā ʻōlelo i ʻike ʻia ma ke ʻano he mau kūkulu kūpono (e laʻana, e hoʻopau i nā loiloi koʻikoʻi); ka hāʻawi ʻana i nā waiwai string ʻē aʻe e alakaʻi ai i ka hāʻule ʻana o ka string validation.

No ka laʻana, hiki i ka mea hoʻouka ke hoʻololi i ka laina: if access_level != "mea hoʻohana{U+202E} {U+2066}// E nānā inā admin{U+2069} {U+2066}" {

e hōʻike ʻia ma ka loiloi loiloi me he mea lā access_level != “mea hoʻohana” {/ // E nānā inā admin

Hoʻohui ʻia, ua manaʻo ʻia kahi ʻano hoʻouka kaua ʻē aʻe (CVE-2021-42694), pili i ka hoʻohana ʻana i nā homoglyphs, nā ʻano like me ka helehelena, akā ʻokoʻa ka manaʻo a loaʻa nā code unicode ʻokoʻa (no ka laʻana, ʻo ke ʻano "ɑ" e like me " a", “ɡ” - “g”, “ɩ” - “l”). Hiki ke hoʻohana ʻia nā huaʻōlelo like i kekahi mau ʻōlelo ma nā inoa o nā hana a me nā ʻano hoʻololi e alakaʻi hewa ai i nā mea hoʻomohala. No ka laʻana, hiki ke wehewehe ʻia nā hana ʻelua me nā inoa ʻike ʻole e hana i nā hana like ʻole. Me ka ʻole o ka nānā ʻana i nā kikoʻī, ʻaʻole maopopo koke kahi o kēia mau hana ʻelua i kapa ʻia ma kahi kikoʻī.

Hoʻouka Trojan Source e hoʻokomo i nā loli i ke code i ʻike ʻole ʻia e ka mea hoʻomohala

Ma ke ʻano he palekana, ʻōlelo ʻia e hōʻike nā mea hōʻuluʻulu, unuhi ʻōlelo, a me nā mea hana e kākoʻo ana i nā huaʻōlelo Unicode i kahi hewa a i ʻole ka ʻōlelo aʻoaʻo inā loaʻa nā hua mana ʻole i hoʻopaʻa ʻia ma nā ʻōlelo, string literals, a i ʻole nā ​​​​mea hōʻike e hoʻololi i ke ala o ka hoʻopuka (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E a me U+200F). Pono e pāpā ʻia ia mau huaʻōlelo ma nā kikoʻī ʻōlelo papahana a pono e mahalo ʻia i nā mea hoʻoponopono code a me nā pilina waihona.

Pākuʻi 1: Ua hoʻomākaukau ʻia nā ʻāpana vulnerability no GCC, LLVM/Clang, Rust, Go, Python a me binutils. Ua hoʻoponopono pū ʻo GitHub, Bitbucket a me Jira i ka pilikia. Ke holomua nei kahi hoʻoponopono no GitLab. No ka ʻike ʻana i ka code pilikia, manaʻo ʻia e hoʻohana i ke kauoha: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]/' kumu

Hoʻohui 2: ʻO Russ Cox, kekahi o nā mea hoʻomohala o ka Plan 9 OS a me ka ʻōlelo polokalamu Go, ua hōʻino i ka nānā nui ʻana i ke ʻano hoʻouka kaua i hōʻike ʻia, i ʻike lōʻihi ʻia (Go, Rust, C++, Ruby) a ʻaʻole i mālama nui ʻia. . Wahi a Cox, pili ka pilikia i ka hōʻike pololei o ka ʻike i nā mea hoʻoponopono code a me nā pilina pūnaewele, hiki ke hoʻopau ʻia me ka hoʻohana ʻana i nā mea hana kūpono a me nā mea loiloi code i ka wā o ka loiloi. No laila, ma kahi o ka huki ʻana i ka manaʻo i ka hoʻouka ʻana, ʻoi aku ka maikaʻi o ka nānā ʻana i ka hoʻomaikaʻi ʻana i nā kaʻina loiloi code a me ka hilinaʻi.

Ke manaʻoʻiʻo nei ʻo Ras Cox ʻaʻole ʻo nā mea hōʻuluʻulu kahi kūpono e hoʻoponopono ai i ka pilikia, no ka mea, ma ka pāpā ʻana i nā hōʻailona weliweli ma ka pae compiler, aia kahi papa nui o nā mea hana e ʻae ʻia ai ka hoʻohana ʻana i kēia mau hōʻailona, ​​​​e like me nā ʻōnaehana kūkulu, nā hui, pūʻolo mana a me nā ʻano parser hoʻonohonoho like ʻole a me ka ʻikepili. Ma keʻano he laʻana, hāʻawi ʻia ka papahana Rust, ka mea i pāpā i ka hana ʻana i ka code LTR/RTL i ka mea hoʻopili, akā ʻaʻole i hoʻohui i kahi hoʻoponopono i ka luna pūʻulu Cargo, e ʻae ai i kahi hoʻouka like ma o ka faila Cargo.toml. Pēlā nō, hiki i nā faila e like me BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml a me requirements.txt hiki ke lilo i kumu o ka hoouka.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka