В огромен брой компилатори е открита уязвимост, която ви позволява да скриете злонамерен код

Експерти от университета в Кеймбридж публикуваха информация за опасна уязвимост (CVE-2021-42574), което засяга почти всичкисъвременни компилатори на изходен код. Статията за Trojan Source описва коварна атака, която позволява на хакерите да скрият злонамерен код в изходния код на различни програми.

Атаката се основава на това как компилаторитеобработва уникални идентификатори, използвани за определяне на ориентацията на текста – от ляво на дясно или от дясно на ляво. Слабостта се крие в алгоритъма Unicode Bidi, който позволява думите, написани отдясно наляво и отляво надясно, да се използват заедно. Благодарение на този алгоритъм можете да комбинирате арабски и английски думи. Това ви позволява да четете текст, написан отдясно наляво, отляво надясно и обратно.

В някои случаи възможностите на алгоритъмаUnicode Bidi не е достатъчен, за да промени начина, по който тези думи се показват, и в такива случаи се използват специални контролни знаци. Въпреки това, ако един и същ ред комбинира думи с различни текстови посоки, тогава с помощта на тези контролни знаци можете да промените посоката, в която компилаторът чете този текст и, например, да накарате редовете, които изглеждат като коментари, да действат като изпълним код.


</ img>

Използвайки този метод, можете да добавите злонамерениинструкция в нормалния изходен код и направете текста на тази инструкция невидим, когато преглеждате кода, като използвате последващ коментар. Това ще вмъкне напълно различни знаци, които всъщност могат да бъдат произволен код. Крайният изходен код остава семантично правилен, но веднъж компилиран се случва нещо съвсем различно.

Когато преглеждате и анализирате такъв изходен кодпрограмистът ще види код с коментари, които не предизвикват подозрение, но компилаторът или интерпретаторът ще обърне логическия ред на символите и невинният коментар ще се превърне в допълнителен код, вмъкнат в програмата. Грешката присъства в почти всички компилатори &#8211; за езици за програмиране C, C++ (gcc и clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go и Python; в различни популярни редактори на код, включително VS Code, Emacs, Atom и интерфейси за преглед на изходния код в GitHub, Gitlab, BitBucket и всички продукти на Atlassian.

Източник: trojansource, zdnet

</ P>