W ogromnej liczbie kompilatorów wykryto lukę umożliwiającą ukrycie złośliwego kodu

Eksperci z University of Cambridge opublikowali informację o niebezpiecznej luce (CVE-2021-42574), która dotyczy prawie wszystkichnowoczesne kompilatory kodu źródłowego. Artykuł Trojan Source opisuje podstępny atak, który pozwala hakerom ukryć złośliwy kod w kodzie źródłowym różnych programów.

Atak opiera się na kompilatorachobsługuje unikalne identyfikatory używane do określenia orientacji tekstu – od lewej do prawej lub od prawej do lewej. Słabością jest algorytm Unicode Bidi, który umożliwia łączne używanie słów pisanych od prawej do lewej i od lewej do prawej. Dzięki temu algorytmowi możesz łączyć słowa arabskie i angielskie. Umożliwia to czytanie tekstu pisanego od prawej do lewej, od lewej do prawej i odwrotnie.

W niektórych przypadkach możliwości algorytmuUnicode Bidi nie wystarczy, aby zmienić sposób wyświetlania tych słów i w takich przypadkach stosuje się specjalne znaki sterujące. Jeśli jednak w tej samej linii znajdują się słowa o różnych kierunkach tekstu, wówczas za pomocą tych znaków sterujących można zmienić kierunek, w którym kompilator czyta ten tekst i na przykład sprawić, że linie wyglądające jak komentarze będą działać jak kod wykonywalny.


</ img>

Korzystając z tej metody, możesz dodać malwareinstrukcję do normalnego kodu źródłowego i uczynić tekst tej instrukcji niewidocznym podczas przeglądania kodu za pomocą kolejnego komentarza. Spowoduje to wstawienie zupełnie innych znaków, które w rzeczywistości mogą być dowolnym kodem. Ostateczny kod źródłowy pozostaje semantycznie poprawny, ale po skompilowaniu dzieje się coś zupełnie innego.

Podczas przeglądania i analizowania takiego kodu źródłowegoprogramista zobaczy kod z komentarzami, które nie budzą żadnych podejrzeń, ale kompilator lub interpreter odwróci logiczną kolejność symboli, a niewinny komentarz zamieni się w dodatkowy kod wstawiony do programu. Błąd występuje w prawie wszystkich kompilatorach &#8211; dla języków programowania C, C++ (gcc i clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go i Python; w różnych popularnych edytorach kodu, w tym VS Code, Emacs, Atom i interfejsach przeglądania kodu źródłowego w GitHub, Gitlab, BitBucket i wszystkich produktach Atlassian.

Źródło: trojansource, zdnet

</ p>