Co je Path Traversal a jak chránit soubory
Autor: Redakce Domeny.ForSale Zveřejněno
Stručně: Path Traversal je bezpečnostní zranitelnost, kvůli které aplikace umožňuje přístup k souborům mimo adresář určený pro obsluhu daného požadavku. Nejčastěji se spojuje se čtením cizích souborů, ale u funkcí pro zápis nebo mazání může umožnit také jejich změnu či odstranění. Problém vzniká, když aplikace používá uživatelská data jako součást cesty k souboru a důsledně nekontroluje, kam tato cesta vede.
Co znamená přístup mimo povolený adresář
Cesta je adresa souboru v souborovém systému, například /srv/aplikace/dokumenty/navod.pdf. Aplikace zpřístupňující dokumenty by měla umožňovat stahování souborů pouze z určeného místa, nikoli libovolných souborů dostupných na serveru.
Path Traversal, označovaný také jako directory traversal nebo dot-dot-slash, spočívá v překročení této hranice. Název dot-dot-slash odkazuje na zápis ../: dvě tečky označují nadřazený adresář a lomítko odděluje jednotlivé části cesty. Vhodně použitá sekvence tak může nasměrovat operaci mimo povolenou složku.
Lze to přirovnat k přepážce pro výdej dokumentů. Klient má sdělit číslo dokumentu a pracovník jej má vydat z příslušné skříně. Chyba nastává, když pracovník místo čísla přijme pokyn: „Odejdi od této skříně, přejdi do vedlejší místnosti a vezmi uvedený soubor.“
Příklad: stažení dokumentu podle názvu
Předpokládejme, že aplikace ukládá veřejné dokumenty do adresáře /srv/aplikace/dokumenty/. Uživatel vybere soubor a prohlížeč odešle požadavek:
/stahnout?soubor=navod.pdf
Pokud program bez kontroly připojí hodnotu parametru soubor k cestě adresáře s dokumenty, získá cestu /srv/aplikace/dokumenty/navod.pdf. U běžného názvu to vypadá správně. Problém se projeví po zadání hodnoty obsahující přechod do nadřazeného adresáře:
/stahnout?soubor=../konfiguracja.env
Sestavená cesta /srv/aplikace/dokumenty/../konfiguracja.env odkazuje na /srv/aplikace/konfiguracja.env, tedy na soubor mimo adresář s dokumenty. Pokud jej aplikace dokáže přečíst a vrátí jeho obsah, dojde k odhalení dat.
Jde o příklad mechanismu, nikoli o záruku úspěšného útoku. Soubor musí existovat, proces aplikace k němu musí mít přístup a způsob zpracování požadavku musí umožňovat využití zadané cesty. Takové chování testujte výhradně ve vlastním prostředí nebo s výslovným souhlasem k testování.
Jaké škody může Path Traversal způsobit
Dopad závisí především na tom, jakou operaci zranitelná funkce provádí a jaká oprávnění má aplikace v operačním systému.
- Čtení souborů: funkce stahování může odhalit konfiguraci, uživatelská data, zálohy nebo přístupové údaje.
- Zápis a přepisování: zranitelný mechanismus zápisu může umístit soubor mimo cílový adresář nebo změnit existující soubor.
- Mazání: funkce pro mazání souborů může odstranit prostředky, které by uživatel vůbec neměl mít možnost vybrat.
Za určitých podmínek může přepsání konfigurace nebo umístění souboru, který server spouští, vést k následnému převzetí kontroly nad aplikací. Path Traversal však automaticky neznamená možnost spouštění kódu ani plný přístup k serveru. Jeho možnosti omezují mimo jiné oprávnění procesu a dostupné funkce aplikace.
Zranitelnost se netýká jen adres viditelných v prohlížeči. Data ovlivňující cestu mohou pocházet také z formuláře, požadavku na API, názvu nahrávaného souboru nebo položky v rozbalovaném archivu.
Jak účinně omezit riziko
Nejbezpečnější je vyhnout se situaci, kdy cestu zadává uživatel. Místo názvu nebo umístění souboru může aplikace přijímat identifikátor dokumentu, například 482, a sama vyhledat soubor, který mu odpovídá. Přitom musí ověřit, zda má daný uživatel právo jej stáhnout — samotný identifikátor ochranu nezajišťuje.
Pokud je přijímání cest nezbytné, zabezpečení by mělo zahrnovat několik prvků:
- Přesně vymezené vstupy. Pokud funkce potřebuje pouze název souboru, neměla by přijímat celou cestu. Povolené názvy a přípony je třeba omezit podle skutečných potřeb.
- Kontrola výsledného umístění. Po zohlednění pravidel souborového systému by aplikace měla ověřit, že cíl stále leží uvnitř povoleného adresáře. K tomu je třeba použít vhodné funkce pro práci s cestami, nikoli prosté porovnání začátků textových řetězců.
- Zohlednění symbolických odkazů. Symbolický odkaz odkazuje na jiné místo v souborovém systému. Soubor zdánlivě umístěný v povolené složce tak může ve skutečnosti odkazovat mimo ni.
- Minimální oprávnění. Proces zpřístupňující dokumenty by neměl mít přístup k nepotřebným datům ani právo zápisu tam, kde stačí čtení.
Pouhé odstraňování řetězce ../ není dostatečnou ochranou. Rozdíly v oddělovačích, kódování a pořadí zpracování dat mohou způsobit, že filtr a souborový systém vyhodnotí stejnou hodnotu odlišně. Kontrola musí odpovídat tomu, jak aplikace soubor skutečně otevírá.
Kde začít s kontrolou aplikace
Projděte funkce pro stahování, nahrávání, mazání a rozbalování souborů. U každé zjistěte, zda uživatel ovlivňuje cestu, který adresář je povolený a zda program kontroluje výsledný cíl operace. Testy by měly zahrnovat jak pokusy o přístup mimo adresář, tak běžné, platné požadavky.
Pokud máte podezření na zneužití zranitelnosti, samotná oprava kódu nemusí stačit. Je třeba posoudit, které soubory byly přístupné, zkontrolovat logy a — pokud mohly uniknout přístupové údaje — změnit příslušná hesla nebo klíče. Prvním praktickým krokem je najít konkrétní místo, kde se z uživatelských dat stává cesta k souboru.
