Kai failų įkėlimas virsta prieiga prie failų
Viena nesaugi įkėlimo tvarkyklė gali atverti duris viso kelio apėjimo atakai ir failų įkėlimo pažeidžiamumui. Kai kūrėjai tiesiogiai sujungia failų pavadinimus su įkėlimo keliais, užpuolikai gali pateikti kenkėjiškus failų pavadinimus kaip ../../etc/passwd norint išeiti iš katalogų ir pasiekti slaptus failus. Šis kelio apėjimo tipas paprastą įkėlimo API paverčia galingu failų prieigos išnaudojimu, ypač kai programa veikia su padidintomis teisėmis.
⚠️Nesaugus pavyzdys, skirtas tik edukaciniams tikslams. Nenaudoti gamybinėje aplinkoje.
// Vulnerable upload handler, file upload vulnerability [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var path = Path.Combine("uploads/", file.FileName); // No validation using var stream = new FileStream(path, FileMode.Create); await file.CopyToAsync(stream); return Ok("File uploaded!"); } Užpuolikas gali įkelti failą pavadinimu ../../web.config perrašyti arba perskaityti apribotus failus – klasikinė kelio apėjimo ataka.
Saugi versija:
// Safe upload with validation and canonicalization [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var fileName = Path.GetFileName(file.FileName); // strip directories var targetDir = Path.GetFullPath("uploads/"); var safePath = Path.Combine(targetDir, fileName); if (!safePath.StartsWith(targetDir)) return BadRequest("Invalid file path"); using var stream = new FileStream(safePath, FileMode.Create); await file.CopyToAsync(stream); return Ok("File securely uploaded!"); } Edukacinė pastaba: Visada kanonizuokite kelius su Kelias.GautiVisąKelią() ir patikrinkite, ar rezultatas lieka jūsų įkėlimo kataloge. Niekada nepasitikėkite failas.FailoName tiesiogiai.
Kūrėjo klaidos, neleidžiančios apeiti kelio
Dauguma failų įkėlimo pažeidžiamumų, dėl kurių kyla problemų dėl kelio apėjimo, kyla dėl skuboto kodo ir nepatvirtinimo. Dažniausios kūrėjų klaidos:
- Vartotojo įvesties sujungimas tiesiai į failų sistemos kelius
- Pasitikėjimas Turinio tipas arba vien tik plėtinio patvirtinimas
- Kelių normalizavimo praleidimas prieš išsaugojimą
Laikinų aplankų pakartotinis naudojimas užklausose arba mikropaslaugose
⚠️Nesaugus pavyzdys, skirtas tik edukaciniams tikslams. Nenaudoti gamybinėje aplinkoje.
# Flask example vulnerable to path traversal attack @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] file.save('uploads/' + file.filename) return 'Uploaded' Užpuolikai gali apeiti šį paprastą sujungimą, kad galėtų pereiti katalogus (../../programėlė.py) ir rašyti arba perrašyti savavališkus failus. Saugi versija:
# Safe file upload validation from werkzeug.utils import secure_filename @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] name = secure_filename(file.filename) path = os.path.join('uploads', name) file.save(path) return 'Securely uploaded' Edukacinė pastaba: Naudokite platformos teikiamus pagalbininkus, pvz. saugus_failo_pavadinimas ir taikyti leidžiamųjų sąrašų plėtinius. Niekada rankiniu būdu nesujunkite įvesties į failų kelius.
Išnaudojimas realiame gyvenime Pipelineir mikropaslaugos
Kelio apėjimo atakos vyksta ne tik viešuose galiniuose taškuose. Jos dažnai pasirodo ir jų viduje. CI/CD sistemos, artefaktų saugyklos arba mikropaslaugos, kurios tvarko įkeltus failus. Pavyzdžiui, failų įkėlimo pažeidžiamumas kūrimo artefaktų tvarkyklėje gali leisti užpuolikui perrašyti kūrimo scenarijus arba įterpti kenkėjiškus failus į bendrai naudojamus bėgikus.
⚠️Nesaugus pavyzdys, skirtas tik edukaciniams tikslams. Nenaudoti gamybinėje aplinkoje.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $FAILO PAVADINIMAS nėra patvirtintas, sukurtas ../../../etc/passwd reikšmė gali perrašyti svarbius sistemos failus diegimo metu – tai realaus pasaulio kelio apėjimo ataka. Saugi versija:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" Edukacinė pastaba: In pipelines, išvalykite visus dinaminius kelio kintamuosius. Apribokite rašymo operacijas kontroliuojamuose kataloguose, kad būtų išvengta failų sistemos išėjimo kompiliavimo ar diegimo metu.
Kelio apėjimo prevencija įkėlimo logikoje
Kelių apėjimo mažinimas prasideda nuo griežto įvesties patvirtinimo ir izoliacijos. Failų pavadinimus ir kelius nuo pat pradžių traktuokite kaip nepatikimą įvestį, ypač tvarkant įkeltus failus.
Geriausia praktika
- Normalizuokite ir kanonizuokite visus kelius prieš juos naudodami.
- Apriboti įkėlimus į specialų katalogą, esantį už žiniatinklio šakninio katalogo ribų.
- Įgyvendinti leidžiamųjų sąrašų taikymą failų plėtiniams ir MIME tipams.
- Niekada pakartotinai nenaudokite laikinų aplankų tarp seansų ar vartotojų.
- Naudokite konteinerinį saugojimą įkeltiems failams, kai įmanoma.
Mini prevencinis kontrolinis sąrašas
- Patikrinkite kiekvieną failo vardą su Kelias.GautiFailoName() arba lygiavertis.
- Išspręskite pilnus kelius ir patikrinkite katalogų ribas.
- Taikyti plėtinių ir MIME leidžiamųjų sąrašų.
- Naudokite atskirus įkėlimo aplankus kiekvienam vartotojui arba sesijai.
- Įtraukti įkėlimo nuskaitymą ir patvirtinimą CI/CD bandymai.
Edukacinė pastaba: Kiekvienas failų įkėlimo tvarkytojas yra potencialus kelio apėjimo atakos vektorius. Sukurkite išsamią apsaugą patikrindami, izoliuodami ir nuskaitydami visą failų tvarkymo kodą.
Kaip „Xygeni“ aptinka ir blokuoja nesaugius įkėlimo srautus
Ksigeni Code Security nuskaito kodų bazės ir pipelines aptikti kelio perėjimo modelius prieš jiems pasiekiant gamybinę aplinką. Tai žymi nesaugų kelių sujungimą, trūkstamą kanonizavimą ir pavojingas failų operacijas tiek kode, tiek CI/CD scenarijus.
Funkcinis fragmentas su valdymo apsauginiu turėklu:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk Edukacinė pastaba: Integravimas Ksigeni į savo pipeline užtikrina, kad failų įkėlimo pažeidžiamumai ir kelio apėjimo atakos būtų automatiškai aptiktos atliekant kompiliavimo patvirtinimą.
Tarpo panaikinimas: kaip užkirsti kelią kitam jūsų kelio apėjimo atakos etapui
Vieno kelio apėjimo klaida failų įkėlimo galiniame taške gali suteikti užpuolikams prieigą prie jūsų serverio failų sistemos. Peržiūrėkite įkėlimo tvarkykles, ar nėra nesaugių sujungimų, normalizuokite visus kelius ir niekada nepasitikėkite vartotojo valdomais failų pavadinimais. papildyti pažeidžiamumų skenavimo įrankiai kaip Xygeni Code Security jūsų „DevSecOps“ pipeline aptikti kelio apėjimo atakas ir failų įkėlimo pažeidžiamumus prieš jiems išsiunčiant. Saugumo požiūriu kiekvienas išsaugotas failas turi būti traktuojamas kaip vykdomas kodas!






