Pag-atake sa pagtawid sa landas - kahinaan sa pag-upload ng file

Paglalakbay sa Landas sa mga Pag-upload ng File: Paano Gumagawa ang mga Developer ng Kanilang Sariling mga Exploit

Kapag ang mga Pag-upload ng File ay Naging Pag-access sa File

Ang isang insecure na upload handler ay maaaring magbukas ng pinto sa isang full path traversal attack at kahinaan sa pag-upload ng file. Kapag direktang pinagdudugtong ng mga developer ang mga filename sa mga upload path, maaaring magsumite ang mga umaatake ng mga malisyosong pangalan ng file gaya ng ../../etc/passwd para makatakas sa mga direktoryo at ma-access ang mga sensitibong file. Ang ganitong uri ng path traversal ay ginagawang isang malakas na file access exploit ang isang simpleng upload API, lalo na kapag ang application ay tumatakbo nang may mataas na mga pahintulot.

⚠️Halimbawa na hindi ligtas, para sa layuning pang-edukasyon lamang. Huwag gamitin sa produksyon.

// 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!"); } 

Maaaring mag-upload ang isang attacker ng file na pinangalanang ../../web.config para patungan o basahin ang mga pinaghihigpitang file, isang klasikong path traversal attack.

Ligtas na bersyon:

// 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!"); } 

Pang-edukasyon na tala: Palaging gawing canonical ang mga path gamit ang Landas.KuninBuongLandas() at tiyaking nananatili ang resulta sa loob ng iyong direktoryo ng pag-upload. Huwag kailanman magtiwala sa isang file.Pangalan ng File direkta.

Mga Pagkakamali ng Developer na Nagpapagana ng Path Traversal

Karamihan sa mga kahinaan sa pag-upload ng file na humahantong sa path traversal ay nagmumula sa minadaliang code at nawawalang validation. Kabilang sa mga karaniwang error ng developer ang:

  • Direktang pagsasama-sama ng input ng user sa mga path ng filesystem
  • Nagtiwala Content-Type o pagpapatunay ng extension lamang
  • Nilalaktawan ang normalisasyon ng mga path bago i-save

Muling paggamit ng mga pansamantalang folder sa mga kahilingan o microservice

⚠️Halimbawa na hindi ligtas, para sa layuning pang-edukasyon lamang. Huwag gamitin sa produksyon.

# 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' 

Maaaring malampasan ng mga umaatake ang simpleng pagsasama-samang ito upang tumawid sa mga direktoryo (../../app.py) at magsulat o mag-overwrite ng mga arbitraryong file. Ligtas na bersyon:

# 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' 

Pang-edukasyon na tala: Gumamit ng mga katulong na ibinigay ng framework tulad ng pangalan ng_file_na_secure at ipatupad ang mga allowlisted na extension. Huwag kailanman manu-manong pagdugtungin ang input sa mga file path.

Pagsasamantala sa Tunay na Pipelinemga serbisyo at Microservices

Ang mga pag-atake sa pagtawid sa landas ay hindi lamang nangyayari sa mga pampublikong endpoint. Madalas itong lumilitaw sa loob ng CI/CD mga sistema, mga repositoryo ng artifact, o mga microservice na namamahala sa mga na-upload na file. Halimbawa, ang isang kahinaan sa pag-upload ng file sa isang build artifact manager ay maaaring magpahintulot sa isang attacker na i-overwrite ang mga build script o mag-inject ng mga malisyosong file sa mga shared runner.

⚠️Halimbawa na hindi ligtas, para sa layuning pang-edukasyon lamang. Huwag gamitin sa produksyon.

# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact   run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME 

If $FILENAME ay hindi napatunayan, isang ginawa ../../../etc/passwd Maaaring patungan ng value ang mga kritikal na system file habang nagde-deploy, isang totoong path traversal attack. Ligtas na bersyon: 

# Safer artifact storage guardrail - name: Store build artifact securely   run: |     SAFE_NAME=$(basename "$FILENAME")     cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" 

Pang-edukasyon na tala: In pipelines, linisin ang lahat ng dynamic path variable. Limitahan ang mga write operation sa mga kontroladong direktoryo upang maiwasan ang pagtakas ng filesystem habang binubuo o ini-deploy.

Pagpigil sa Pagtawid sa Landas sa Logic ng Pag-upload

Ang pagpapagaan ng pagtawid sa landas ay nagsisimula sa matibay na pagpapatunay at paghihiwalay ng input. Ituring ang mga pangalan ng file at landas bilang hindi mapagkakatiwalaang input mula sa simula, lalo na kapag humahawak ng mga na-upload na file.

Pinakamahusay na kasanayan

  1. Gawing normal at gawing canonical lahat ng landas bago gamitin ang mga ito.
  2. Paghigpitan ang mga pag-upload sa isang nakalaang direktoryo sa labas ng web root.
  3. Ipatupad ang mga allowlist para sa mga extension ng file at mga uri ng MIME.
  4. Huwag nang gamitin muli ang mga pansamantalang folder sa pagitan ng mga sesyon o mga gumagamit.
  5. Gumamit ng lalagyang imbakan para sa mga na-upload na file kung maaari.

Maikling checklist para sa pag-iwas

  • Patunayan ang bawat pangalan ng file gamit ang Landas.KuninPangalan ngFile() o katumbas.
  • Lutasin ang mga kumpletong path at i-verify ang mga hangganan ng direktoryo.
  • Ilapat ang extension at mga MIME allowlist.
  • Gumamit ng magkakahiwalay na upload folder para sa bawat user o session.
  • Isama ang pag-scan at pagpapatunay ng upload sa CI/CD mga pagsubok.

Pang-edukasyon na tala: Ang bawat file upload handler ay isang potensyal na path traversal attack vector. Bumuo ng malalimang depensa sa pamamagitan ng pag-validate, paghihiwalay, at pag-scan sa lahat ng file-handling code.

Paano Natutukoy at Hinaharangan ng Xygeni ang mga Hindi Ligtas na Daloy ng Pag-upload

Xygeni Code Security scan mga codebase at pipelines upang matukoy ang mga pattern ng pagtawid sa landas bago pa man umabot sa produksyon ang mga ito. Nagfa-flag ito ng hindi ligtas na pagdudugtong ng landas, nawawalang canonicalization, at mga mapanganib na operasyon ng file sa parehong code at CI/CD script.

Functional snippet, na may control guardrail:

# Secure enforcement with Xygeni - name: Enforce secure upload and path handling   run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk 

Pang-edukasyon na tala: Pagsasama ng Xygeni sa iyong pipeline Tinitiyak nito na ang mga kahinaan sa pag-upload ng file at mga pag-atake sa path traversal ay awtomatikong nahuhuli habang nagpapatunay ng build.

Pagsasara ng Agwat: Pag-iwas sa Iyong Susunod na Pag-atake sa Pagtawid ng Landas

Ang isang bug sa single path traversal sa isang file upload endpoint ay maaaring magbigay sa mga attacker ng access sa filesystem ng iyong server. Suriin ang mga upload handler para sa mga hindi ligtas na concatenation, gawing normal ang lahat ng path, at huwag kailanman magtiwala sa mga filename na kontrolado ng user. Idagdag mga tool sa pag-scan ng kahinaan gaya ng Xygeni Code Security sa iyong Mga DevSecOps pipeline upang matukoy ang mga pag-atake sa path traversal at mga kahinaan sa pag-upload ng file bago ipadala ang mga ito. Sa seguridad, ang bawat file na naka-save ay dapat ituring bilang code na naisakatuparan!

mga tool sa pagsusuri ng komposisyon ng software ng mga tool sa sca
Unahin, ayusin, at i-secure ang mga panganib ng iyong software
Kunin ang Iyong Libreng Account.
Walang kinakailangang credit card.

I-secure ang Iyong Pag-develop at Paghahatid ng Software

kasama ang Xygeni Product Suite