sulm përshkimi i shtegut - dobësi e ngarkimit të skedarëve

Kalimi i Shtegut në Ngarkimet e Skedarëve: Si i Krijojnë Zhvilluesit Shfrytëzimet e Tyre

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

  1. Normalizoni dhe kanonizoni të gjitha shtigjet para se t'i përdorni.
  2. Kufizo ngarkimet në një drejtori të dedikuar jashtë rrënjës së uebit.
  3. Zbatoni listat e lejimeve për zgjerimet e skedarëve dhe llojet MIME.
  4. Mos i ripërdorni kurrë dosjet e përkohshme. midis seancave ose përdoruesve.
  5. 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!

mjetet-e-për-përbërjes-së-softuerit-sca-tools
Përparësoni, korrigjoni dhe siguroni rreziqet e softuerit tuaj
Merrni Llogarinë tuaj Falas.
Nuk kërkohet kartë krediti.

Siguroni Zhvillimin dhe Ofrimin e Softuerit tuaj

me Xygeni Product Suite