napad prolazom puta - ranjivost prijenosa datoteka

Prolazak putanje pri prijenosu datoteka: Kako programeri stvaraju vlastite iskorištavanja

Kada se prijenos datoteka pretvori u pristup datotekama

Jedan nesigurni program za rukovanje prijenosom može otvoriti vrata napadu s prolaskom cijelog puta i ranjivosti prijenosa datoteka. Kada programeri izravno spajaju nazive datoteka s putovima prijenosa, napadači mogu poslati zlonamjerne nazive datoteka poput ../../etc/lozinka za izbjegavanje direktorija i pristup osjetljivim datotekama. Ova vrsta prolaska kroz putanju pretvara jednostavan API za prijenos u moćan iskorištavanje pristupa datotekama, posebno kada se aplikacija pokreće s povišenim dozvolama.

⚠️Nesiguran primjer, samo u obrazovne svrhe. Ne koristiti u produkciji.

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

Napadač može prenijeti datoteku pod nazivom ../../web.config prepisati ili čitati ograničene datoteke, klasični napad prolaska kroz put.

Sigurna verzija:

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

Obrazovna napomena: Uvijek kanoniziraj putove s Put.DohvatiPuniPut() i provjerite ostaje li rezultat unutar vašeg direktorija za prijenos. Nikada ne vjerujte datoteka.NazivDatoteke direktno.

Greške programera koje omogućuju prolazak puta

Većina ranjivosti pri prijenosu datoteka koje dovode do prolaska putanje proizlaze iz brzog koda i nedostatka validacije. Uobičajene pogreške programera uključuju:

  • Spajanje korisničkog unosa izravno u putanje datotečnog sustava
  • Povjerljiv Sadržaj-Tip ili samo validacija proširenja
  • Preskakanje normalizacije putanja prije spremanja

Ponovna upotreba privremenih mapa u zahtjevima ili mikroservisima

⚠️Nesiguran primjer, samo u obrazovne svrhe. Ne koristiti u produkciji.

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

Napadači mogu zaobići ovo jednostavno spajanje kako bi prelazili kroz direktorije (../../app.py) i pisati ili prepisivati ​​proizvoljne datoteke. Sigurna verzija:

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

Obrazovna napomena: Koristite pomoćne programe koje pruža framework, kao što su sigurne_datoteke i primijenite dopuštena proširenja. Nikada ručno ne spajajte unose u putanje datoteka.

Iskorištavanje u stvarnom životu Pipelinei mikroservisi

Napadi prolaska puta ne događaju se samo na javnim krajnjim točkama. Često se pojavljuju unutar CI/CD sustavi, repozitoriji artefakata ili mikroservisi koji upravljaju prenesenim datotekama. Na primjer, ranjivost prijenosa datoteka u upravitelju artefakata izgradnje može omogućiti napadaču da prepiše skripte za izgradnju ili ubrizgati zlonamjerne datoteke u dijeljene programere.

⚠️Nesiguran primjer, samo u obrazovne svrhe. Ne koristiti u produkciji.

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

If $FILENAME nije potvrđeno, izrađeno ../../../etc/lozinka vrijednost može prebrisati kritične sistemske datoteke tijekom implementacije, što je napad prolaska kroz stvarni put. Sigurna verzija: 

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

Obrazovna napomena: In pipelines, dezinficirajte sve dinamičke varijable puta. Ograničite operacije pisanja na kontrolirane direktorije kako biste spriječili izlaz iz datotečnog sustava tijekom izgradnje ili implementacije.

Sprječavanje prolaska puta u logici prijenosa

Smanjenje prolaska puta započinje snažnom validacijom i izolacijom ulaznih podataka. Tretirajte nazive datoteka i putanje kao nepouzdane ulazne podatke od samog početka, posebno prilikom rukovanja prenesenim datotekama.

Najbolje prakse

  1. Normaliziraj i kanoniziraj sve putove prije njihove upotrebe.
  2. Ograniči prijenose u namjenski direktorij izvan web korijena.
  3. Provođenje popisa dopuštenih za ekstenzije datoteka i MIME tipove.
  4. Nikada ne koristite privremene mape za ponovno korištenje između sesija ili korisnika.
  5. Koristite kontejnerizirano skladištenje za prenesene datoteke kada je to moguće.

Mini preventivna kontrolna lista

  • Validiraj svaki naziv datoteke s Put.DohvatiNazivDatoteke() ili ekvivalent.
  • Razriješi pune putanje i provjeri granice direktorija.
  • Primijeni popise dopuštenih proširenja i MIME-a.
  • Koristite zasebne mape za prijenos po korisniku ili sesiji.
  • Uključite skeniranje i validaciju prijenosa u CI/CD ispitivanja.

Obrazovna napomena: Svaki program za obradu prijenosa datoteka potencijalni je vektor napada prolaskom putanje. Izgradite dubinsku obranu validacijom, izoliranjem i skeniranjem cjelokupnog koda za obradu datoteka.

Kako Xygeni otkriva i blokira nesigurne tokove prijenosa

Xygeni Code Security skenira kodne baze i pipelineza otkrivanje obrazaca prolaska puta prije nego što dođu do proizvodnje. Označava nesigurno spajanje putova, nedostajuću kanonizaciju i opasne operacije s datotekama i u kodu i CI/CD skripte.

Funkcionalni isječak, s kontrolnom ogradom:

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

Obrazovna napomena: integriranje Xygeni u svoje pipeline osigurava da se ranjivosti prijenosa datoteka i napadi prolaska puta automatski otkriju tijekom validacije izrade.

Zatvaranje jaza: Sprječavanje napada prolaska kroz sljedeći put

Greška u prolazu jedne putanje u krajnjoj točki za prijenos datoteka može napadačima dati pristup datotečnom sustavu vašeg poslužitelja. Pregledajte rukovatelje prijenosom za nesigurna spajanja, normalizirajte sve putanje i nikada ne vjerujte nazivima datoteka koje kontroliraju korisnici. dodati alati za skeniranje ranjivosti poput Xygeni Code Security na vaše DevSecOps pipeline za otkrivanje napada prolaska kroz put i ranjivosti pri prijenosu datoteka prije njihove isporuke. U sigurnosti, svaka spremljena datoteka mora se tretirati kao izvršeni kod!

alati-za-analizu-sastava-softvera-sca-tools
Prioritizirajte, sanirajte i osigurajte softverske rizike
Nabavite svoj besplatni račun.
Nije potrebna kreditna kartica.

Osigurajte svoj razvoj i isporuku softvera

s Xygeni paketom proizvoda