Több mint 1700 GitHub-projektet érintő sérülékenységet fedeztek fel
Egy friss, nagyszabású kutatás súlyos biztonsági problémát tárt fel a Node.js-alapú statikus fájlkiszolgálók körében: egy széles körben elterjedt útvonalbejárási (path traversal) sebezhetőség, amely több mint 1756 nyílt forráskódú projektet érint a GitHubon. A hibát a fejlesztők által gyakran alkalmazott, de hibásan értelmezett kódséma okozza, amely a path.join() függvényt használja felhasználói bemenetek (URL-path) összefűzésére anélkül, hogy a bemenet validálása vagy szanitizálása megtörténne. A sebezhetőség alapját az adja, hogy a path.join(basePath, userInput) konstrukció nem védi meg a rendszert attól, hogy a userInput tartalmazzon könyvtárbejárásra utaló szekvenciákat (pl. ../). Ezáltal a támadók képesek lehetnek a statikus fájlkiszolgáló gyökérkönyvtárán kívül eső fájlok elérésére – például jelszavakat, konfigurációkat vagy rendszerfájlokat tartalmazó erőforrásokat. A sebezhetőség távoli, jogosultság nélküli kihasználást tesz lehetővé, és sok esetben 9.0 feletti CVSS pontszámmal rendelkezik, azaz a legsúlyosabb kategóriába sorolható. A problémás minta már 2010 óta jelen van Stack Overflow válaszokban, GitHub Gist bejegyzésekben és oktatási anyagokban. A fejlesztők gyakran úgy alkalmazták ezt a konstrukciót, hogy a böngészők és HTTP-kliensek által „tiszta” URL-tesztek alapján tévesen biztonságosnak vélték a megoldást. A böngészők ugyanis automatikusan normalizálják az URL-eket, így nem derült ki, hogy valójában a szerveroldalon nincs érvényes védelem az illegitim útvonalak ellen.
A kutatók egy automatizált biztonsági elemzőpipeline-t fejlesztettek, amely képes:
- sebezhető minták felismerésére több ezer GitHub-repozitóriumban,
- statikus és dinamikus elemzéssel megerősíteni a hibák kihasználhatóságát,
- a CVSS szerinti súlyosság kiszámítására,
- GPT-4 segítségével hibajavítások generálására,
- felelős hibabejelentés (responsible disclosure) révén értesíteni a fejlesztőket.
A jelentett projektek 14%-a már javította a hibát, azonban a válaszadási arány jelentősen eltért a projekt ismertségétől függően: míg a népszerűbb projektek 42%-ban reagáltak érdemben, addig az alacsony aktivitásúaknál ez az arány csak 11% volt. A kutatás egyik legaggasztóbb megállapítása, hogy a sebezhető minta bekerült a nagy nyelvi modellek (LLM-ek) tanítási adataiba is. A teszt során:
- a statikus fájlkiszolgáló kódot generáló promptok esetében az LLM-ek által generált válaszok 95%-a tartalmazta a sebezhetőséget,
- még explicit „secure” fájlkiszolgálót kérve is az esetek 70%-a továbbra is hibás volt.
Ez azt mutatja, hogy az LLM-ek – mivel korábbi, gyakran hibás példákból tanulnak – továbbörökítik a sérülékeny mintákat, ezzel hosszú távon is fennmaradó biztonsági kockázatot teremtve. A kutatás világosan rámutat arra, hogy a nyílt forráskódú ökoszisztéma védelme nem csupán technológiai, hanem közösségi és oktatási kérdés is. A problémák láncreakció-szerűen terjedhetnek – különösen, ha eljutnak az LLM-alapú fejlesztési eszközökbe. A kutatók az alábbiakat javasolják:
- Automatizált, skálázható sebezhetőségkezelő rendszerek bevezetése a fejlesztői környezetekbe.
- Képzések és tudatosságnövelés a biztonságos kódolási minták terjesztésére.
- A tanítóadatok és LLM-outputok biztonsági szűrése, hogy elkerülhető legyen a hibák újratermelése.