Co je Path Traversal a jak chránit soubory

Autor: 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.

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ů:

  1. 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.
  2. 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ů.
  3. 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.
  4. 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.

Přečtěte si také

Zjistěte, jak PHP-FPM zpracovává požadavky PHP, čím se liší od webového serveru a jak nastavit procesy podle provozu a zdrojů hostingu.
Poznejte BIND, otevřený software pro server DNS: jak spravuje domény, jaké role plní a kdy se vyplatí provozovat vlastní server.
Zjistěte, k čemu slouží polský registr a číslo REGON, jak se liší od NIP a KRS a jak v oficiálním registru ověřit údaje o firmě.