6.3 Zranitelnosti nahrávání souborů (File Upload)

Nahrávání souborů na server představuje kritický bod infrastruktury, se kterým je spojeno mnoho bezpečnostních problémů. Pokud je server špatně nastaven, může útočník obejít validace přípon, nahrát spustitelné skripty (malware) a docílit až kompromitace systému.

multipart/form-data
Obyčejné HTTP formuláře využívají k odeslání dat typ application/x-www-form-urlencoded (textové parametry a hodnoty). Pro podporu nahrávání binárních souborů se používá strukturovanější formát multipart/form-data. Součástí hlavičky požadavku je pak i oddělovač (boundary), např. boundary=xxx, který slouží k oddělení jednotlivých souborů a formulářových polí a neměl by se objevovat v samotném obsahu nahrávaných dat.

Metody obejití validace (Bypass)

Pokud webová aplikace omezuje (či se o to snaží) povolené přípony nahraných souborů (např. pouze .jpg nebo .png), existují cesty, jak taková omezení oklamat:

Základní (Generic) testy zranitelnosti uploadu
Při penetračním testu file uploadu zkoušíme řadu přístupů:
  • Stored XSS: Uvedení payloadu přímo v názvu souboru nebo do jeho obsahu (např. <script>alert(1)</script>.jpg).
  • Path Traversal: Skok do jiných složek (např. přepsáním cesty na ../../../../../webapps/root/rce.jsp). Toto je běžné třeba na serverech Apache Tomcat.
  • Spustitelné soubory: Nahrání malwaru, jako .exe nebo .cmd, pro případnou spuštění na Windows serveru.
  • Ověření antiviru: Lze nahrát známý bezpečný "virus" jako EICAR string v podobě eicar.pdf, za účelem zjištění, zdali infrastruktura soubory skenuje. Pozor ale na uložení payloadu do nečekaných míst (jako HTTP hlavičky), kdy může být celá request-odezva WAF filtrem zakázána.

Obrana proti zranitelnostem File Upload

Správná ochrana File Upload
  • Validace: Kontrola názvu souboru, přípony, MIME typu i obsahu proti whitelistu povolených formátů (např. jpg, jpeg, gif).
  • Omezení velikosti: Nastavení maximální velikosti a délky jména souboru.
  • Přejmenování: Změna jména na pseudonáhodnou hodnotu vygenerovanou na straně serveru.
  • Skener: Provádění antivirových skenů na všech přijímaných souborech od uživatelů.
  • Stahování místo zobrazování: Při vracení souboru uživatelům využívat Content-Disposition: attachment; filename="..." k zamezení renderování zranitelných souborů (např. HTML či SVG) prohlížečem, nebo využívat extrémně striktní hlavičku Content Security Policy (CSP) pro endpoint zabezpečující upload/stahování.

Zranitelnosti archivů a komplexních formátů

Kromě jednoduchých souborů se rizika nabalují u formátů jako ZIP nebo CSV: