Gilus pasinerimas į kelio perėjimo pažeidžiamumą
Įsivaizduokite, kad jūsų namuose pilna kambarių su įvairiomis durimis, kai kurios veda į saugias zonas, tokias kaip jūsų asmeninis biuras arba seifas. O kas, jei kas nors žinotų triuką, kaip apeiti įprastus kelius ir patekti tiesiai į šiuos kambarius, pavogdamas ar sugadindamas jūsų vertingus daiktus, tokius kaip 419 karatų auksinė grandinėlė, brangūs kvepalai ar net senovinė Kolo dėžutė. Iš esmės taip nutinka per kelio kirtimo ataką.
Kas yra Kelias?
Kelias, taip pat žinomas kaip aplankų perėjimas, yra pažeidžiamumas, aptinkamas žiniatinklio programose. Tai leidžia užpuolikams pasiekti failus ir katalogus, saugomus už žiniatinklio šakninio aplanko ribų, kurių jie paprastai neturėtų pasiekti, tai yra skirta virėjams, dar žinomiems kaip Backend Engineers. Šiuose failuose gali būti neskelbtinos informacijos, pvz., programos kodo, vartotojo duomenų, kredencialų ir net sistemos failų, kuriuos galima išnaudoti siekiant toliau valdyti serverį.
Kaip veikia kelio perėjimas
Tarkime, kad yra žiniatinklio programa, grėsminga „yahooyahoo“ internetinė parduotuvė, kuria prekiaujama nelegaliai, panašiai kaip „Darkmarket“, kurios pavadinimas iš tikrųjų yra yahooyahoo! Žinau, kvailas, susijęs su kažkuo pasislėpimu lygumoje žvilgsnis Administratorius, kuris dabar yra kalėjime :).
Programa įkelia vaizdą naudodama tokį URL:
<img src="/loadImage?filename=218.png">
Užpakalinėje programoje serveris apdoroja šią užklausą pridėdamas failo pavadinimą prie pagrindinio katalogo:
/var/www/images/218.png
Tačiau, jei nėra gynybos nuo kelio perėjimo, užpuolikas; šiuo atveju EFCC gali manipuliuoti failo pavadinimo parametras pasiekti kitus serveryje esančius failus, pvz., vartotojų paskyros informaciją.
Pavyzdžiui, jie gali pabandyti:
https://yahooyahoo.com/loadImage?filename=../../../etc/passwd
Ši užklausa nurodo serveriui įkelti failą padidinant tris katalogo lygius nuo pagrindinio kelio ir tada pasiekiant /etc/passwd
failas, svarbus sistemos failas į Unix panašiose sistemose.
Serveris sukuria kelią taip:
/var/www/images/../../../etc/passwd
The ../
seka juda vienu katalogo lygiu aukštyn. Taigi, kelias išsprendžiamas taip:
/etc/passwd
Galia ir galia ../
Seka
Kai išgirsi Seka Web-Sec, tiesiog pagalvokite Navigacija.
Galvoti apie ../
kaip būdas pakilti vienu lygiu aukštyn katalogo struktūroje, pavyzdžiui, lipti kopėčiomis į aukštą aukščiau:
- Vienintelis
../
pakelia jus vienu lygiu aukštyn. ../../
pakelia jus dviem lygiais aukštyn.../../../
pakelia jus trimis lygiais aukštyn ir pan.
Kompiuterinėje failų sistemoje:
- Pradedant nuo
/home/user/documents/projects
,../
nuveda tave į/home/user/documents
. ../../
nuvestų tave į/home/user
.../../../
atveda tave į/home
.
Norėdami tai geriau suprasti:
Įsivaizduokite, kad esate dideliame viešbutyje „Hotel 3FCC“. Pradedate nuo 419 kambario (4 aukštas, 19 kambarys). Naudojant ../
:
../
reiškia išėjimą į koridorių (vienu lygiu aukštyn pagal katalogą).../../
reiškia pakilti liftu į 3 aukštą.../../../
reiškia nusileisti į 2 aukštą.
Viešbučio išdėstymas:
Hotel:
---------------------
(Floors)
|
|
+---------------------------------------------+
| 1st Floor | 2nd Floor | 3rd Floor | 4th Floor |
| | | | |
+-------------+-------------+-------------+-------------+
| | Room 219 | | Room 419 |
| | | | (Your Room)|
| +-------------+ +-------------+
| | Room 220 | | Room 420 |
| | | | |
+-------------+-------------+-------------+-------------+
| | Room 319 | | |
| | | | |
| +-------------+ +-------------+
| | Room 320 | | |
| | | | |
+-------------+-------------+-------------+-------------+
Kelio perėjimo žingsniai:
-
Pradinė padėtis: 419 kambarys 4 aukšte
-
Dabartinis kelias:
/home/user/documents/projects
-
Viešbučio analogija: Jūs esate 419 kambaryje 4 aukšte
+———————————————-+ | 1 aukštas | 2 aukštas | 3 aukštas | 4 aukštas | | | | | | +————-+————-+————–+——– ——+ | | 219 kambarys | | 419 kambarys | | | | | (Jūs) | | +————-+ +————-+ | | 220 kambarys | | 420 kambarys | | | | | | +————-+————-+————–+——– ——+ | | 319 kambarys | | | | | | | | | +————-+ +————–+ | | 320 kambarys | | | | | | | | +————-+————-+————–+——– ——+
-
-
1 žingsnis: Naudojant
../
pakilti vienu lygiu į 4 aukšto koridorių-
Naujas kelias:
/home/user/documents
-
Viešbučio analogija: Išeinant į 4 aukšto koridorių
+———————————————-+ | 1 aukštas | 2 aukštas | 3 aukštas | 4 aukštas | | | | | | +————-+————-+————–+——– ——+ | | 219 kambarys | | (Prieškambaris) | | | | | | | +————-+ +————–+ | | 220 kambarys | | 419 kambarys | | | | | (Tuščia) | +————-+————-+————–+——– ——+ | | 319 kambarys | | | | | | | | | +————-+ +————–+ | | 320 kambarys | | | | | | | | +————-+————-+————–+——– ——+
-
-
2 žingsnis: Naudojant
../../
pakilti dviem lygiais į 3 aukštą-
Naujas kelias:
/home/user
-
Viešbučio analogija: Lipkite liftu į 3 aukštą
+———————————————-+ | 1 aukštas | 2 aukštas | 3 aukštas | 4 aukštas | | | | | | +————-+————-+————–+——– ——+ | | 219 kambarys | (Jūs) | (Prieškambaris) | | | | | | | +————-+ +————-+ | | 220 kambarys | 319 kambarys | 419 kambarys | | | | (Tuščia) | (Tuščia) | +————-+————-+————–+——– ——+ | | 320 kambarys | | | | | | | | | +————-+ +————–+ | | | | | +————-+————-+————–+——– ——+
-
-
3 veiksmas: Naudojant
../../../
pakilti trimis lygiais į 2 aukštą-
Naujas kelias:
/home
-
Viešbučio analogija: Lipkite liftu į 2 aukštą
+———————————————-+ | 1 aukštas | 2 aukštas | 3 aukštas | 4 aukštas | | | (Jūs) | (Tuščia) | (Prieškambaris) | +————-+————-+————–+——– ——+ | | 219 kambarys | 319 kambarys | 419 kambarys | | | | (Tuščia) | (Tuščia) | | +————-+ +————–+ | | 220 kambarys | 320 kambarys | 420 kambarys | | | | | | +————-+————-+————–+——– ——+
-
Gynybos ir aplinkkeliai
Kad būtų išvengta šių atakų, daugelis programų pašalina katalogų perėjimo sekas iš vartotojo įvesties. Tačiau sumanūs užpuolikai dažnai randa būdų, kaip apeiti šią gynybą.
Pavyzdžiui, jie gali naudoti absoliutų kelią tiesiai iš šaknies:
filename=/etc/passwd
Arba jie gali naudoti įdėtas perėjimo sekas, pvz ....//
kuri po pašalinimo vis tiek palieka galiojančią perėjimo seką:
https://yahooyahoo.com/loadImage?filename=....//etc/passwd
Štai kaip veikia įdėtos sekos:
- Vartotojo įvestis:
....//etc/passwd
- Taikymo juostelės
../
: seka....//
grįžta į../
- Rezultatas kelias:
/var/www/images/../etc/passwd
- Galutinis kelias yra toks:
/etc/passwd
URL kodavimo gudrybės
Kitas triukas susijęs su URL kodavimu (netrukus parašysiu straipsnį apie URL kodavimą), kai tokie simboliai kaip ../
yra pavaizduoti užkoduotomis formomis (%2e%2e%2f
). Pavyzdžiui:
filename=%2e%2e%2f%2e%2e%2fetc/passwd
Tai gali priversti programą apdoroti ją kaip galiojančią įvestį.
Apsauga nuo kelio perėjimo
Norėdami apsisaugoti nuo kelio perėjimo:
- Venkite naudotojo įvesties failų sistemos API kai tik įmanoma.
- Griežtai patvirtinkite naudotojo įvestus duomenis:
- Naudokite baltąjį leidžiamų verčių sąrašą.
- Leisti tik konkrečius simbolius (pvz., raidinius ir skaitinius).
- Kanonizuokite kelią:
- Įsitikinkite, kad išspręstas kelias prasideda numatytu baziniu katalogu.
Realūs išpuolių keliu pavyzdžiai
1. Apache Struts CVE-2017-5638
2017 m. populiarioje atvirojo kodo žiniatinklio programų sistemoje „Apache Struts“ buvo aptiktas kritinis pažeidžiamumas. Pažeidžiamumas (CVE-2017-5638) leido užpuolikams išnaudoti kelio perėjimą, kad nuskaitytų ir vykdytų savavališkus failus serveryje. Tai buvo dalis atakos vektoriaus, naudoto per didžiulį „Equifax“ duomenų pažeidimą, per kurį buvo atskleista daugiau nei 147 mln. žmonių asmeninė informacija. Užpuolikai pasinaudojo pažeidžiamumu vykdydami nuotolinį kodą, gaudami prieigą prie neskelbtinų duomenų.
2. „Fortinet FortiOS Path Traversal“ (CVE-2018-13379)
2018 m. „Fortinet“ FortiOS SSL VPN žiniatinklio portale buvo aptiktas kelio perėjimo pažeidžiamumas (CVE-2018-13379). Dėl šios klaidos neautentifikuoti užpuolikai galėjo atsisiųsti sistemos failus naudojant specialiai sukurtas HTTP išteklių užklausas. Pasinaudoję tuo, užpuolikai gali pasiekti neskelbtiną informaciją, pvz., slaptažodžių failus ir VPN seanso informaciją, taip pakenkdami viso tinklo saugumui.
3. „Magento“ elektroninės prekybos platforma
„Magento“, populiarioji el. prekybos platforma, bėgant metams susidūrė su daugybe pažeidžiamumų. Vienas iš tokių pažeidžiamumų leido užpuolikams išnaudoti failų įkėlimo mechanizmą, kad įkeltų kenkėjiškus failus apeinant katalogų apribojimus. Tai gali sukelti nuotolinio kodo vykdymą, leidžiantį užpuolikams perimti žiniatinklio serverį ir pasiekti jautrią klientų informaciją bei mokėjimo duomenis.
4. „Nokia“ parduotuvės programėlė
2012 m. „Nokia Store“ programėlėje buvo rastas reikšmingas pažeidžiamumas. Ši problema leido užpuolikams atsisiųsti savavališkus failus iš serverio. Manipuliuodami URL parametrais, užpuolikai gali pasiekti apribotus katalogus ir neskelbtinus failus, o tai gali atskleisti vartotojo duomenis ir vidines konfigūracijas.
5. Rubygems.org Path Traversal (CVE-2020-25613)
2020 m. Rubygems.org, Ruby bendruomenės brangakmenių prieglobos tarnyboje, buvo aptiktas kelias perėjimo pažeidžiamumas. Dėl pažeidžiamumo (CVE-2020-25613) užpuolikai galėjo manipuliuoti failų keliais ir atsisiųsti savavališkus failus iš serverio. Tai kėlė didelę riziką, nes galėjo atskleisti slaptus konfigūracijos failus ir kredencialus, saugomus serveryje.
6. Cisco ASA Path Traversal pažeidžiamumas (CVE-2018-0296)
2018 m. buvo nustatyta, kad Cisco Adaptive Security Appliance (ASA) programinė įranga turi kritinį kelio perėjimo pažeidžiamumą (CVE-2018-0296). Tai leido neautentifikuotiems užpuolikams siųsti sukurtas HTTP užklausas, kad gautų prieigą prie jautrių sistemos failų. Išnaudodami šį trūkumą, užpuolikai gali gauti informacijos apie įrenginio konfigūraciją, o tai gali padėti tolimesnėms atakoms prieš tinklą.
7. GitHub Enterprise Server Path Traversal (CVE-2020-10546)
2020 m. „GitHub Enterprise Server“ buvo aptiktas kelio perėjimo pažeidžiamumas (CVE-2020-10546). Šis pažeidžiamumas leido užpuolikams pasiekti savavališkus failus serveryje manipuliuojant URL keliais. Pasinaudojęs tuo, užpuolikas gali gauti prieigą prie slaptos informacijos, pvz., saugyklų failų ir konfigūracijos duomenų, o tai sukels didelę riziką paveiktoms įmonėms.
8. „WordPress“ papildinio pažeidžiamumas
Nustatyta, kad daugelis „WordPress“ papildinių yra pažeidžiami kelio perėjimo atakoms. Pavyzdžiui, populiarus papildinys „Duplicate Page“ turėjo kelio perėjimo pažeidžiamumą, leidžiantį užpuolikams nuskaityti savavališkus failus iš serverio. Tokie plačiai naudojamų įskiepių pažeidžiamumai kelia didelę riziką, nes gali paveikti daugybę svetainių, gali atskleisti neskelbtinus duomenis ir sudaryti sąlygas tolesniems atakoms.
Baigiamieji žodžiai
Neturėčiau rašyti straipsnio, kuriame jums tai pasakojama (lol), bet kartais pačios saugiausios durys turi paslėptus raktus – o žiniatinklio saugumo pasaulyje kelias yra vienas raktų, į kurį tikrai nenorite patekti į neteisingą rankas.
Pažeidžiamumų, susijusių su keliu, neapsiriboja tai, ką čia parodžiau, bet matau tai kaip atspirties tašką, geras magas niekada neatskleidžia savo paslapčių :).
Pažeidžiamumas, susijęs su keliu, yra tarsi paslėpti tvirtovės praėjimai, leidžiantys užpuolikams praslysti per gynybą ir sukelti sumaištį. Suprasdami, kaip veikia šios atakos, ir įdiegę gynybą, galime geriau apsaugoti savo skaitmenines tvirtoves nuo neteisėtos prieigos. Visada patikrinkite ir išvalykite naudotojo įvestus duomenis ir reguliariai, turiu omenyje, reguliariai peržiūrėkite savo kodo ir serverio konfigūracijas, kad išvengtumėte galimų išnaudojimų.
Suvaldyta nelaimė.
Ištekliai:
Portswigger (žiniatinklio saugumo akademija)
Vikipedija