Trojan Source Π°Ρ‚Π°ΠΊΠ° Π·Π° въвСТданС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π˜Π·ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΎΡ‚ унивСрситСта Π² ΠšΠ΅ΠΉΠΌΠ±Ρ€ΠΈΠ΄ΠΆ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ…Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π·Π° Ρ‚ΠΈΡ…ΠΎ вмъкванС Π½Π° Π·Π»ΠΎΠ²Ρ€Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Π² Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡ€Π°Π½ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄. ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Π°Ρ‚Π°ΠΊΠ° (CVE-2021-42574) Π΅ прСдставСн ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ Trojan Source ΠΈ сС основава Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСкст, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°/ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ Π»ΠΈΡ†Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° са дСмонстрирани Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΈ, доставСни Π·Π° C, C++ (gcc ΠΈ clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ΠΈ Python.

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ сС основава Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° спСциални Unicode символи Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ промСнят Ρ€Π΅Π΄Π° Π½Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° двупосочСн тСкст. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ някои части ΠΎΡ‚ тСкста ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ отляво надясно, Π° Π΄Ρ€ΡƒΠ³ΠΈ - отдясно наляво. Π’ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Π°Ρ‚Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° вмъкванС Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ Π½Π° ΠΈΠ²Ρ€ΠΈΡ‚ ΠΈΠ»ΠΈ арабски във Ρ„Π°ΠΉΠ». Но Π°ΠΊΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ посоки Π½Π° тСкст Π² Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ посочСнитС Π·Π½Π°Ρ†ΠΈ, пасаТитС ΠΎΡ‚ тСкст, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ отдясно наляво, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° припокрият ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ тСкст, ΠΏΠΎΠΊΠ°Π·Π°Π½ отляво надясно.

Използвайки Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π° конструкция към ΠΊΠΎΠ΄Π°, Π½ΠΎ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ тСкста с Ρ‚Π°Π·ΠΈ конструкция Π½Π΅Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π°, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π² слСдния ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ ΠΈΠ»ΠΈ Π²ΡŠΡ‚Ρ€Π΅ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ отдясно наляво, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ напълно Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π·Π½Π°Ρ†ΠΈ сС наслагват Π²ΡŠΡ€Ρ…Ρƒ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎΡ‚ΠΎ вмъкванС. Вакъв ΠΊΠΎΠ΄ Ρ‰Π΅ останС сСмантично ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½, Π½ΠΎ Ρ‰Π΅ бъдС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½.

Trojan Source Π°Ρ‚Π°ΠΊΠ° Π·Π° въвСТданС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π”ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠΎΠ΄Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Ρ‰Π΅ сС сблъска с визуалния Ρ€Π΅Π΄ Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ ΠΈ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈ Π½Π΅ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ Π² ΠΌΠΎΠ΄Π΅Ρ€Π΅Π½ тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΡƒΠ΅Π± интСрфСйс ΠΈΠ»ΠΈ IDE, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ логичСския Ρ€Π΅Π΄ Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ ΠΈ Ρ‰Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‚Π΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎΡ‚ΠΎ вмъкванС Ρ‚Π°ΠΊΠΎΠ²Π°, ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ Π΅, Π±Π΅Π· Π΄Π° ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° двупосочния тСкст Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ засяга Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ популярни Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄ (VS Code, Emacs, Atom), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ интСрфСйси Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (GitHub, Gitlab, BitBucket ΠΈ всички ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π½Π° Atlassian).

Trojan Source Π°Ρ‚Π°ΠΊΠ° Π·Π° въвСТданС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Има няколко Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ дСйствия: добавянС Π½Π° скрит ΠΈΠ·Ρ€Π°Π· β€žΠ²Ρ€ΡŠΡ‰Π°Π½Π΅β€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° функцията ΠΏΡ€Π΅Π΄ΠΈ Π²Ρ€Π΅ΠΌΠ΅; ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π±ΠΈΡ…Π° Π±ΠΈΠ»ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΊΠ°Ρ‚ΠΎ Π²Π°Π»ΠΈΠ΄Π½ΠΈ конструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Π°ΠΆΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ); присвояванС Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ стойности Π½Π° Π½ΠΈΠ·, ΠΊΠΎΠΈΡ‚ΠΎ водят Π΄ΠΎ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΈΠ·.

НапримСр, Π°Ρ‚Π°ΠΊΡƒΠ²Π°Ρ‰ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈ промяна, която Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ€Π΅Π΄Π°: if access_level != "user{U+202E} {U+2066}// ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ admin{U+2069} {U+2066}" {

ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π² интСрфСйса Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄, сякаш access_level != β€œuser” { // ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ администратор

ОсвСн Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΄Ρ€ΡƒΠ³ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° Π°Ρ‚Π°ΠΊΠ° (CVE-2021-42694), ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ…ΠΎΠΌΠΎΠ³Π»ΠΈΡ„ΠΈ, Π·Π½Π°Ρ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° външСн Π²ΠΈΠ΄, Π½ΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡƒΠ½ΠΈΠΊΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΠ²Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π½Π°ΠΊΡŠΡ‚ β€žΙ‘β€œ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π° Π½Π° β€ž a”, β€œΙ‘β€ - β€œg”, β€œΙ©β€ - β€œl”). Подобни Π·Π½Π°Ρ†ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π° някои Π΅Π·ΠΈΡ†ΠΈ Π² ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π²Π΅Π΄Π°Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. НапримСр ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π½Π΅Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ дСйствия. Π‘Π΅Π· ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π΅ Π΅ Π²Π΅Π΄Π½Π°Π³Π° ясно коя ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ място.

Trojan Source Π°Ρ‚Π°ΠΊΠ° Π·Π° въвСТданС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠšΠ°Ρ‚ΠΎ мярка Π·Π° сигурност сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΈ инструмСнтитС Π·Π° асСмблиранС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ 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 ΠΈ binutils. GitHub, Bitbucket ΠΈ Jira ΡΡŠΡ‰ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ…Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ Ρ…ΠΎΠ΄ Π΅ корСкция Π·Π° GitLab. Π—Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° проблСмния ΠΊΠΎΠ΄ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' /path/to/ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ 2: Ръс Кокс, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ОБ 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€