Kur ngarkimet e skedarëve shndërrohen në akses në skedarë
Një trajtues i vetëm i ngarkimit të pasigurt mund të hapë derën për një sulm të përshkimit të plotë të shtegut dhe një cenueshmëri të ngarkimit të skedarëve. Kur zhvilluesit bashkojnë emrat e skedarëve direkt me shtigjet e ngarkimit, Sulmuesit mund të paraqesin emra skedarësh dashakeq si ../../etj./passwd për të dalë nga drejtoritë dhe për të aksesuar skedarë të ndjeshëm. Ky lloj përshkimi i shtegut e kthen një API të thjeshtë ngarkimi në një shfrytëzim të fuqishëm të aksesit të skedarëve, veçanërisht kur aplikacioni funksionon me leje të larta.
⚠️Shembull i pasigurt, vetëm për qëllime edukative. Mos e përdorni në prodhim.
// 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!"); } Një sulmues mund të ngarkojë një skedar me emrin ../../web.config për të mbishkruar ose lexuar skedarë të kufizuar, një sulm klasik i përshkimit të shtegut.
Versioni i sigurt:
// 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!"); } Shënim edukativ: Gjithmonë kanonizoni shtigjet me Shteg.GetFullPath() dhe kontrolloni që rezultati të mbetet brenda direktorisë suaj të ngarkimit. Mos i besoni kurrë një skedar.Emri i skedarit direkt.
Gabimet e zhvilluesve që mundësojnë përshkimin e shtegut
Shumica e dobësive të ngarkimit të skedarëve që çojnë në përshkimin e shtegut vijnë nga kodi i nxituar dhe mungesa e validimit. Gabimet e zakonshme të zhvilluesve përfshijnë:
- Bashkimi i të dhënave të përdoruesit direkt në shtigjet e sistemit të skedarëve
- besuar Lloji i përmbajtjes ose vetëm validimi i zgjatjes
- Duke anashkaluar normalizimin e shtigjeve para ruajtjes
Ripërdorimi i dosjeve të përkohshme nëpër kërkesa ose mikroshërbime
⚠️Shembull i pasigurt, vetëm për qëllime edukative. Mos e përdorni në prodhim.
# 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' Sulmuesit mund ta anashkalojnë këtë bashkim të thjeshtë për të kaluar nëpër drejtoritë (../../app.py) dhe shkruajnë ose mbishkruajnë skedarë arbitrarë. Versioni i sigurt:
# 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' Shënim edukativ: Përdorni ndihmës të ofruar nga framework si p.sh. emri_i_skedarit_secure dhe zbatoni zgjerimet e listës së lejuar. Mos e bashkoni kurrë manualisht të dhënat hyrëse në shtigjet e skedarëve.
Shfrytëzimi në Realitet Pipelines dhe Mikroshërbime
Sulmet e përshkimit të shtegut nuk ndodhin vetëm në pikat fundore publike. Ato shpesh shfaqen brenda CI/CD sisteme, depo artefaktesh ose mikroshërbime që menaxhojnë skedarët e ngarkuar. Për shembull, një dobësi e ngarkimit të skedarëve në një menaxher të objekteve të ndërtimit mund të lejojë që një sulmues të mbishkruajë skriptet e ndërtimit ose injektoni skedarë dashakeq në programet e përbashkëta vrapuese.
⚠️Shembull i pasigurt, vetëm për qëllime edukative. Mos e përdorni në prodhim.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $FILENAME nuk është i validuar, një i hartuar ../../../etj./passwd value mund të mbishkruajë skedarët kritikë të sistemit gjatë vendosjes, një sulm i përshkimit të rrugës në botën reale. Versioni i sigurt:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" Shënim edukativ: In pipelines, dezinfektoni të gjitha variablat dinamike të shtegut. Kufizoni operacionet e shkrimit në drejtoritë e kontrolluara për të parandaluar daljen nga sistemi i skedarëve gjatë ndërtimeve ose vendosjeve.
Parandalimi i Përshkimit të Shtegut në Logjikën e Ngarkimit
Zbutja e përshkimit të shtegut fillon me një validim dhe izolim të fortë të të dhënave hyrëse. Trajtojini emrat e skedarëve dhe shtigjet si të dhëna hyrëse të pabesueshme që nga fillimi, veçanërisht kur trajtoni skedarë të ngarkuar.
Praktikat më të mira
- Normalizoni dhe kanonizoni të gjitha shtigjet para se t'i përdorni.
- Kufizo ngarkimet në një drejtori të dedikuar jashtë rrënjës së uebit.
- Zbatoni listat e lejimeve për zgjerimet e skedarëve dhe llojet MIME.
- Mos i ripërdorni kurrë dosjet e përkohshme. midis seancave ose përdoruesve.
- Përdorni magazinim në kontejnerë për skedarët e ngarkuar kur është e mundur.
Lista e kontrollit mini parandaluese parandaluese.
- Validoni çdo emër skedari me Path.GetFileName() ose ekuivalent.
- Zgjidh shtigjet e plota dhe verifiko kufijtë e direktorive.
- Zbato listat e lejimeve të zgjerimeve dhe MIME.
- Përdorni dosje të ndara ngarkimi për përdorues ose seancë.
- Përfshi skanimin dhe validimin e ngarkimit në CI/CD teste.
Shënim edukativ: Çdo trajtues i ngarkimit të skedarëve është një vektor i mundshëm sulmi për përshkimin e shtegut. Ndërtoni mbrojtje të thelluar duke validuar, izoluar dhe skanuar të gjithë kodin e trajtimit të skedarëve.
Si i zbulon dhe bllokon Xygeni rrjedhat e pasigurta të ngarkimit
Xygeni Code Security scans bazat e kodeve dhe pipelines për të zbuluar modelet e përshkimit të shtegut përpara se ato të arrijnë në prodhim. Ai sinjalizon bashkimin e pasigurt të shtegut, mungesën e kanonizimit dhe operacionet e rrezikshme të skedarëve si në kod ashtu edhe në CI/CD skripte.
Fragment funksional, me parmakë kontrolli:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk Shënim edukativ: Integrimi Xygeni në tuajin pipeline siguron që dobësitë e ngarkimit të skedarëve dhe sulmet e përshkimit të shtegut kapen automatikisht gjatë validimit të ndërtimit.
Mbyllja e Boshllëkut: Parandalimi i Sulmit Tuaj të Përshkimit të Rrugës së Ardhshme
Një gabim i përshkimit të një shtegu të vetëm në një pikë fundore të ngarkimit të skedarëve mund t'u japë sulmuesve qasje në sistemin e skedarëve të serverit tuaj. Rishikoni trajtuesit e ngarkimeve për bashkime të pasigurta, normalizoni të gjitha shtigjet dhe mos u besoni kurrë emrave të skedarëve të kontrolluar nga përdoruesi. Shtoj mjetet e skanimit të dobësive si Xygeni Code Security për të tuaj DevSecOps pipeline për të zbuluar sulmet e përshkimit të shtegut dhe dobësitë e ngarkimit të skedarëve përpara se ato të dërgohen. Në siguri, çdo skedar i ruajtur duhet të trajtohet si kod i ekzekutuar!






