Kas yra Path Traversal ir kuo tai pavojinga

Autorius: Paskelbta

Trumpai: Path Traversal – tai saugumo spraga, dėl kurios programa leidžia pasiekti failus už katalogo, skirto konkrečiai užklausai apdoroti, ribų. Dažniausiai ji siejama su svetimų failų skaitymu, tačiau failų įrašymo ar šalinimo funkcijose ji gali leisti juos ir pakeisti arba ištrinti. Problema kyla, kai programa naudotojo pateiktus duomenis naudoja kaip failo kelio dalį ir tinkamai netikrina, kur tas kelias veda.

Ką reiškia išeiti už katalogo ribų

Kelias – tai failo adresas failų sistemoje, pavyzdžiui, /srv/programa/dokumentai/instrukcija.pdf. Dokumentus teikianti programa turėtų leisti atsisiųsti tik failus iš nustatytos vietos, o ne bet kuriuos serveryje pasiekiamus failus.

Path Traversal, dar vadinamas directory traversal arba dot-dot-slash, reiškia šios ribos peržengimą. Pavadinimas dot-dot-slash (liet. „taškas, taškas, pasvirasis brūkšnys“) nurodo seką ../: du taškai žymi pirminį katalogą, o pasvirasis brūkšnys atskiria kelio dalis. Tinkamai panaudota seka gali nukreipti operaciją už leidžiamo katalogo ribų.

Tai galima palyginti su dokumentų išdavimo langeliu. Klientas turėtų pateikti dokumento numerį, o darbuotojas – paimti dokumentą iš reikiamos spintos. Klaida atsiranda tada, kai darbuotojas vietoj numerio priima nurodymą: „išeik iš šios spintos, nueik į gretimą kambarį ir paimk nurodytą failą“.

Pavyzdys: dokumento atsisiuntimas pagal pavadinimą

Tarkime, programa viešus dokumentus saugo kataloge /srv/programa/dokumentai/. Naudotojas pasirenka failą, o naršyklė siunčia užklausą:

/atsisiusti?failas=instrukcija.pdf

Jei programa nepatikrinusi prijungia parametro failas reikšmę prie dokumentų katalogo kelio, gaunamas kelias /srv/programa/dokumentai/instrukcija.pdf. Kai pateikiamas įprastas failo pavadinimas, viskas atrodo teisingai. Problema išryškėja pateikus reikšmę, kurioje yra perėjimas į pirminį katalogą:

/atsisiusti?failas=../konfiguracja.env

Sudarytas kelias /srv/programa/dokumentai/../konfiguracja.env nurodo /srv/programa/konfiguracja.env – failą už dokumentų katalogo ribų. Jei programa gali jį perskaityti ir grąžina jo turinį, atskleidžiami duomenys.

Tai veikimo principo pavyzdys, o ne sėkmingos atakos garantija. Failas turi egzistuoti, programos procesas turi turėti prieigą prie jo, o užklausos apdorojimo būdas turi leisti panaudoti pateiktą kelią. Tokį veikimą tikrinkite tik savo aplinkoje arba gavę aiškų leidimą atlikti bandymus.

Kokią žalą gali padaryti Path Traversal

Pasekmės pirmiausia priklauso nuo to, kokią operaciją atlieka pažeidžiama funkcija ir kokias teises programa turi operacinėje sistemoje.

Tam tikromis aplinkybėmis perrašius konfigūraciją arba įkėlus serverio vykdomą failą gali būti perimtas programos valdymas. Tačiau Path Traversal savaime nereiškia galimybės vykdyti kodą ar gauti visišką prieigą prie serverio. Galimybes riboja, be kita ko, proceso teisės ir prieinamos programos funkcijos.

Spraga susijusi ne vien su naršyklėje matomais adresais. Kelią lemiantys duomenys taip pat gali būti gaunami iš formos, API užklausos, įkeliamo failo pavadinimo arba išskleidžiamo archyvo įrašo.

Kaip veiksmingai sumažinti riziką

Saugiausia vengti situacijų, kai kelią nurodo naudotojas. Užuot priėmusi failo pavadinimą ar vietą, programa gali priimti dokumento identifikatorių, pavyzdžiui, 482, ir pati surasti jam priskirtą failą. Kartu ji turi patikrinti, ar konkretus naudotojas turi teisę jį atsisiųsti – pats identifikatorius apsaugos neužtikrina.

Jei būtina priimti kelius, apsauga turėtų apimti kelis elementus:

  1. Griežtai apibrėžti įvesties apribojimai. Jei funkcijai reikia tik failo pavadinimo, ji neturėtų priimti viso kelio. Leidžiamus pavadinimus ir plėtinius reikia apriboti pagal tikruosius poreikius.
  2. Galutinės vietos tikrinimas. Atsižvelgusi į failų sistemos taisykles, programa turėtų patvirtinti, kad nurodytas objektas vis dar yra leidžiamame kataloge. Tam reikia naudoti tinkamas darbo su keliais funkcijas, o ne tiesiog lyginti teksto pradžią.
  3. Atsižvelgimas į simbolines nuorodas. Simbolinė nuoroda nukreipia į kitą failų sistemos vietą. Iš pažiūros leidžiamame kataloge esantis failas per tokią nuorodą gali nukreipti už jo ribų.
  4. Minimalios teisės. Dokumentus teikiantis procesas neturėtų turėti prieigos prie nereikalingų duomenų ar teisės įrašyti ten, kur pakanka skaityti.

Vien sekos ../ pašalinimas nėra pakankama apsauga. Dėl skirtingų skirtukų, kodavimo ir duomenų apdorojimo tvarkos filtras ir failų sistema tą pačią reikšmę gali interpretuoti skirtingai. Tikrinimas turi atitikti tai, kaip programa iš tikrųjų atveria failą.

Nuo ko pradėti programos tikrinimą

Peržiūrėkite failų atsisiuntimo, įkėlimo, šalinimo ir archyvų išskleidimo funkcijas. Kiekvienai nustatykite, ar naudotojas gali paveikti kelią, koks katalogas leidžiamas ir ar programa tikrina galutinį operacijos objektą. Bandymai turėtų apimti ir mėginimus išeiti už katalogo ribų, ir įprastas, tinkamas užklausas.

Jei įtariate, kad spraga buvo pasinaudota, vien pataisyti kodą gali nepakakti. Reikia įvertinti, kokie failai buvo pasiekiami, patikrinti žurnalus ir, jei galėjo nutekėti prisijungimo duomenys, pakeisti atitinkamus slaptažodžius ar raktus. Pirmas praktinis žingsnis – nustatyti konkrečią vietą, kurioje naudotojo duomenys tampa failo keliu.

Taip pat skaitykite

Sužinokite, kaip PHP-FPM apdoroja PHP užklausas, kuo skiriasi nuo žiniatinklio serverio ir kaip derinti procesus prie srauto bei išteklių.
Susipažinkite su BIND – atvirojo kodo DNS serverio programine įranga, jos paskirtimi ir atvejais, kai verta ją diegti patiems.
Sužinokite, ką reiškia Lenkijos REGON registras ir numeris, kuo jis skiriasi nuo NIP bei KRS ir kaip patikrinti įmonės duomenis.