Minden programozási nyelvet érintő sebezhetőséget találtak, észrevétlenül csempészhető vele vírus a forrásokba

Kutatók a közelmúltban egy olyan tanulmányt publikáltak, amiben egy újfajta, gyakorlatilag minden programozási nyelvet érintő sebezhetőség koncepcióját írják le. Ennek kihasználásával gyakorlatilag bármilyen programba tetszőleges ártalmas kód vagy hátsó kapu csempészhető be, méghozzá a program forrásán keresztül, de úgy, hogy azt a kódbázis legitim fejlesztői gyakorlatilag képtelenek észrevenni.

A módszer lényege, hogy az Unicode szabvány egy speciális képességét használja ki, ami lehetőséget ad arra, hogy a szóban forgó formátumú szövegekben karakterek a megjelenítettől eltérő sorrendben szerepeljenek. Ennek nyomán speciálisan összeállított szekvenciákkal olyan forrásfájlok alakíthatók ki, amik egy kódszerkesztőben megjelenítve teljesen másnak tüntetik fel a program forrását, mint amilyen tartalmúnak azt valójában a fordítóprogram látja.

Utóbbi értelmezésére ugyanis nincsenek hatással az említett speciális szekvenciák, a fejlesztő által használt kódszerkesztő azonban a forrás megjelenítése során ezeket is figyelembe veszi. Így a manipulált programok tárgykódja valójában más forráskódból készül el, mint amit az adott programok forrásának megtekintése során a fejlesztők a kódszerkesztőkben vagy az integrált fejlesztői környezetekben láthatnak.

Emitt hiába is kutatnak a fejlesztők az elrejtett hátsó kapuk, sebezhetőség vagy más rosszindulatú módosítások után a kódokban, mert azok helyett (és helyén) mindig teljesen ártalmatlannak tűnő, legitim kódot látnak majd. Ugyanakkor a fordító valójában a programot az említett rosszindulatú betétet leíró forrás alapján állítja elő, így a létrejövő tárgykódba a támadók által elrejtett káros töltet kerül be.

A kutatók dolgozatukban C, C++, C# és JavaScript, valamint Java, Rust, Go és Python nyelvű gyakorlati példákat is mutatnak arra, hogy miként lehetséges a szóban forgó sebezhetőséget kihasználva rosszindulatú részeket elrejteni programok forráskódjában, de szerintük a sebezhetőség az összes többi programozási nyelvet is érinti.

A megoldást valószínűleg a kódszerkesztők, fejlesztőkörnyezetek és fordítók olyan módosítása jelentheti majd, amik egyrészt felhívják a fejlesztők figyelmét a speciálisan, manipulációra lehetőséget adó szekvenciákra a forrásokban, és/vagy amik egységesítik a kódok értelmezését és megjelenítését a szerkesztőkörnyezet és a fordító között.

Forrás: prog.hu