ืืืงืจืื ืืืื ืืืจืกืืืช ืงืืืืืจืืื' ืคืจืกืื ืืื ืืงื ืืืื ืกืช ืงืื ืืืื ื ืืฉืงื ืืชืื ืงืื ืืงืืจ ืฉื ืืืง ืขืืืชืื. ืฉืืืช ืืืชืงืคื ืืืืื ื (CVE-2021-42574) ืืืฆืืช ืชืืช ืืฉื Trojan Source ืืืืืกืกืช ืขื ืืฆืืจืช ืืงืกื ืฉื ืจืื ืืืจืช ืขืืืจ ืืืืืจ/ืืืชืืจืืื ืืืืื ืืฆืืคื ืืงืื. ืืืืืืืช ืืฉืืื ืืืฆืืืช ืขืืืจ ืืืืจืื ืืืชืืจืืื ืื ืฉืื ืื ืืืกืืคืงืื ืขืืืจ C, C++ (gcc ื-clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ื-Python.
ืืฉืืื ืืืืกืกืช ืขื ืฉืืืืฉ ืืชืืื Unicode ืืืืืืื ืืืขืจืืช ืงืื ืฉืืฉื ืืช ืืช ืกืืจ ืืชืฆืืื ืฉื ืืงืกื ืื-ืืืืื ื. ืืขืืจืช ืชืืื ืืงืจื ืืืื, ืืืงืื ืืกืืืืื ืฉื ืืืงืกื ืืืืืื ืืืืืช ืืืฆืืื ืืฉืืื ืืืืื, ืืขืื ืฉืืืจืื - ืืืืื ืืฉืืื. ืืชืจืืื ืืืืืืืื ื ืืชื ืืืฉืชืืฉ ืืชืืื ืืงืจื ืืืื, ืืืฉื, ืืืื ืกืช ืฉืืจืืช ืงืื ืืขืืจืืช ืื ืขืจืืืช ืืงืืืฅ. ืืื ืื ืชืฉืื ืฉืืจืืช ืขื ืืืืื ื ืืงืกื ืฉืื ืื ืืฉืืจื ืืืช, ืืืืฆืขืืช ืืชืืืื ืฉืฆืืื ื, ืงืืขื ืืงืกื ืืืืฆืืื ืืืืื ืืฉืืื ืืืืืื ืืืคืืฃ ืืืงืกื ืจืืื ืงืืื ืืืืฆื ืืฉืืื ืืืืื.
ืืฉืืื ืื, ื ืืชื ืืืืกืืฃ ืืื ื ืืืื ื ืืงืื, ืื ืืืืจ ืืื ืืืคืื ืืช ืืืงืกื ืขื ืืืื ื ืืื ืืืืชื ื ืจืื ืืขืช ืฆืคืืื ืืงืื, ืขื ืืื ืืืกืคืช ืืืขืจื ืืืื ืื ืืชืื ืืชืืืื ืืืืืืืืื ืืืืฆืืื ืืืืื ืืฉืืื, ืื ืฉืืืืื ืืืืืืื ืืืืืืช ืฉืื ืืช ืืื ืืืช ืขื ืืืื ืกื ืืืืื ืืช. ืงืื ืืื ืืืฉืืจ ืชืงืื ืืืืื ื ืกืื ืืืช, ืื ืืชืคืจืฉ ืืืืฆื ืืืจืช.
ืืืื ืกืงืืจืช ืงืื, ืืคืชื ืืขืืื ืืคื ื ืืกืืจ ืืืืืชื ืฉื ืืืืืืืช ืืืจืื ืืขืจื ืื ืืืฉืืื ืืขืืจื ืืงืกื ืืืืจื ื, ืืืฉืง ืืื ืืจื ื ืื IDE, ืื ืืืืืจ ืืืืชืืจืืื ืืฉืชืืฉื ืืกืืจ ืืืืืื ื ืฉื ืืชืืืื ืืืขืฉื ืืขืื ืืช ืืืื ืกื ืืืืื ืืช ืืคื ืฉืืื, ืืืื ืืฉืื ืื ืืืงืกื ืืื-ืืืืื ื ืืืขืจืืช. ืืืขืื ืืฉืคืืขื ืขื ืขืืจืื ืงืื ืคืืคืืืจืืื ืฉืื ืื (VS Code, Emacs, Atom), ืืื ืื ืืืฉืงืื ืืฆืคืืื ืืงืื ืืืืืจืื (GitHub, Gitlab, BitBucket ืืื ืืืฆืจื Atlassian).
ืืฉื ื ืืกืคืจ ืืจืืื ืืืฉืชืืฉ ืืฉืืื ืืื ืืืืฉื ืคืขืืืืช ืืืื ืืืช: ืืืกืคืช ืืืืื "ืืืืจื" ื ืกืชืจ, ืืืืืื ืืืฉืืืช ืืคืื ืงืฆืื ืืืขืื ืืืขื; ืืขืจืช ืืืืืืื ืฉืืืจื ืืื ืืืื ืืืืืื ืืืื ืื ืืืงืืื (ืืืืืื, ืืื ืืืฉืืืช ืืืืงืืช ืืฉืืืืช); ืืงืฆืืช ืขืจืื ืืืจืืืช ืืืจืื ืฉืืืืืืื ืืืฉืืื ืืืืืืช ืืืจืืืช.
ืืืืืื, ืชืืงืฃ ืขืฉืื ืืืฆืืข ืฉืื ืื ืืืืื ืืช ืืฉืืจื: if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {
ืืฉืจ ืืืฆื ืืืืฉืง ืืืืงืืจืช ืืืืื access_level != โuserโ {// ืืืืง ืื ืืืืื
ืื ืืกืฃ, ืืืฆืขื ืืจืืื ื ืชืงืืคื ื ืืกืฃ (CVE-2021-42694), ืืงืฉืืจื ืืฉืืืืฉ ืืืืืืืืคืื, ืชืืืื ืืืืื ืืืจืื, ืื ืฉืื ืื ืืืฉืืขืืชื ืืืขืื ืงืืื Unicode ืฉืื ืื (ืืืืืื, ืืชื "ษ" ืืืื ื" a", "ษก" - "g", "ษฉ" - "l"). ื ืืชื ืืืฉืชืืฉ ืืชืืืื ืืืืื ืืฉืคืืช ืืกืืืืืช ืืฉืืืช ืฉื ืคืื ืงืฆืืืช ืืืฉืชื ืื ืืื ืืืืขืืช ืืคืชืืื. ืืืืืื, ื ืืชื ืืืืืืจ ืฉืชื ืคืื ืงืฆืืืช ืขื ืฉืืืช ืฉืื ื ืืชื ืืืืืื ืืื ืืืืฆืขืืช ืคืขืืืืช ืฉืื ืืช. ืืื ื ืืชืื ืืคืืจื, ืื ืืจืืจ ืืื ืืืื ืืฉืชื ืืคืื ืงืฆืืืช ืืืื ื ืงืจืืืช ืืืงืื ืกืคืฆืืคื.
ืืืืฆืขื ืืืืื, ืืืืืฅ ืฉืืืืจืื, ืืชืืจืืื ืื ืืืื ืืจืืื ืืชืืืืื ืืชืืื Unicode ืืฆืืื ืฉืืืื ืื ืืืืจื ืื ืืฉ ืชืืื ืืงืจื ืื ืืืืืืื ืืืขืจืืช, ืืืืืื ืืืจืืืช ืื ืืืืื ืืืฉื ืื ืืช ืืืืื ืืคืื (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ื-U+200F). ืชืืืื ืืืื ืฆืจืืืื ืืืืืช ืืกืืจืื ืืืคืืจืฉ ืืืคืจืื ืฉืคืช ืืชืื ืืช ืืืฉ ืืืื ืืืชื ืืขืืจืื ืงืื ืืืืืฉืงื ืืืืจืื.
ืชืืกืคืช 1: ืชืืงืื ื ืคืืืขืืช ืืืื ื ืขืืืจ GCC, LLVM/Clang, Rust, Go, Python ืืืื ืืืื. GitHub, Bitbucket ืื'ืืจื ืื ืชืืงื ื ืืช ืืืขืื. ืชืืงืื ืขืืืจ GitLab ื ืืฆื ืืชืืืื. ืืื ืืืืืช ืงืื ืืขืืืชื, ืืืืืฅ ืืืฉืชืืฉ ืืคืงืืื: grep -r $'[\u061C\u200E\u200A\u202B\u202A\u202B\u202C\u202D\u2066E\u2067\u2068\u2069\uXNUMX\uXNUMX/' ืึธืงืึนืจ
ื ืกืคื 2: Russ Cox, ืืื ืืืคืชืื ืืขืจืืช ืืืคืขืื Plan 9 ืืฉืคืช ืืชืื ืืช Go, ืืชื ืืืงืืจืช ืขื ืชืฉืืืช ืืื ืืืืืืืช ืืฉืืืช ืืืชืงืคื ืืืชืืืจืช, ืืฉืจ ืืืืขื ืื ืืืืจ (Go, Rust, C++, Ruby) ืืื ื ืืงืื ืืจืฆืื ืืช . ืืืืจื ืงืืงืก, ืืืขืื ื ืืืขืช ืืขืืงืจ ืืชืฆืืื ื ืืื ื ืฉื ืืืืข ืืขืืจืื ืงืื ืืืืืฉืงื ืืื ืืจื ื, ืฉื ืืชื ืืคืชืืจ ืืืืฆืขืืช ืืืืื ืื ืืื ืื ืืื ืชืื ืืงืื ืืืืื ืกืงืืจื. ืืื, ืืืงืื ืืืฉืื ืชืฉืืืช ืื ืืืชืงืคืืช ืกืคืงืืืืืืืืช, ืืืื ื ืืื ืืืชืจ ืืืชืืงื ืืฉืืคืืจ ืชืืืืื ืกืงืืจืช ืงืื ืืชืืืช.
ืจืืก ืงืืงืก ืื ืืืืื ืฉืืืืจืื ืื ืื ืืืงืื ืื ืืื ืืชืงื ืืช ืืืขืื, ืฉืื ืขื ืืื ืืืกืืจ ืขื ืกืืืื ืืกืืื ืื ืืจืืช ืืืืืจ, ื ืืชืจื ืฉืืื ืขืฆืืื ืฉื ืืืื ืฉืืื ืืฉืืืืฉ ืืกืืืื ืืื ื ืฉืืจ ืืงืืื, ืืืื ืื ืืืช ืืขืจืืืช, ืืกืืืืจ, ืื ืืื ืืืืืืช ืืื ืชืื ืชืฆืืจื ืฉืื ืื ืื ืชืื ืื. ืืืืืื ื ืืชื ืคืจืืืงื Rust, ืฉืืกืจ ืขื ืขืืืื ืงืื LTR/RTL ืืืืืจ, ืื ืื ืืืกืืฃ ืชืืงืื ืืื ืื ืืืืืืืช ืฉื Cargo, ืืืืคืฉืจ ืืชืงืคื ืืืื ืืจื ืืงืืืฅ Cargo.toml. ืืืืคื ืืืื, ืงืืฆืื ืืืื BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ื- requirements.txt ืืืืืื ืืืคืื ืืืงืืจืืช ืืชืงืคืืช.
ืืงืืจ: OpenNet.ru