sti-traverseringsangrep - sårbarhet for filopplasting

Stigjennomgang i filopplastinger: Hvordan utviklere lager sine egne utnyttelser

Når filopplastinger blir til filtilgang

En enkelt usikker opplastingsbehandler kan åpne døren for et fullstendig sti-traverseringsangrep og sårbarhet for filopplasting. Når utviklere sammenkobler filnavn direkte med opplastingsstier, angripere kan sende inn ondsinnede filnavn i likhet med ../../etc/passwd for å unnslippe mapper og få tilgang til sensitive filer. Denne typen sti-traversering gjør et enkelt opplastings-API om til et kraftig utnyttelsespunkt for filtilgang, spesielt når applikasjonen kjører med utvidede tillatelser.

⚠️Usikkert eksempel, kun for pedagogiske formål. Ikke bruk i produksjon.

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

				
			

En angriper kan laste opp en fil med navnet ../../web.config å overskrive eller lese begrensede filer, et klassisk sti-traverseringsangrep.

Sikker versjon:

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

				
			

Pedagogisk merknad: Kanoniser alltid stier med Sti.GetFullPath() og sjekk at resultatet forblir i opplastingsmappen din. Stol aldri på en fil.Filnavn direkte.

Utviklerfeil som muliggjør sti-gjennomgang

De fleste sårbarheter ved filopplasting som fører til stigjennomgang, kommer fra forhastet kode og manglende validering. Vanlige utviklerfeil inkluderer:

  • Sammenkobling av brukerinndata direkte i filsystemstier
  • Klarering Content-Type eller kun validering av utvidelse
  • Hopper over normalisering av stier før lagring

Gjenbruk av midlertidige mapper på tvers av forespørsler eller mikrotjenester

⚠️Usikkert eksempel, kun for pedagogiske formål. Ikke bruk i produksjon.

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

				
			

Angripere kan omgå denne enkle sammenkoblingen for å bla gjennom kataloger (../../app.py) og skrive eller overskrive vilkårlige filer. Sikker versjon:

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

				
			

Pedagogisk merknad: Bruk hjelpemidler levert av rammeverket, som f.eks. sikkert_filnavn og håndhev tillatte utvidelser. Aldri sleng sammen inndata manuelt i filbaner.

Utnyttelse i virkeligheten Pipelines og mikrotjenester

Banetraverseringsangrep skjer ikke bare i offentlige endepunkter. De opptrer ofte inni CI/CD systemer, artefaktlagre eller mikrotjenester som administrerer opplastede filer. For eksempel kan et sikkerhetsproblem ved filopplasting i en byggeartefaktbehandler la en angriper overskrive byggeskript eller injisere skadelige filer i delte løpere.

⚠️Usikkert eksempel, kun for pedagogiske formål. Ikke bruk i produksjon.

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

				
			

If $FILNAVN er ikke validert, en utformet ../../../etc/passwd verdi kan overskrive kritiske systemfiler under utrulling, et reelt sti-traverseringsangrep. Sikker versjon: 

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

				
			

Pedagogisk merknad: In pipelines, rengjør alle dynamiske stivariabler. Begrens skriveoperasjoner til kontrollerte kataloger for å forhindre filsystemutslipp under bygging eller distribusjoner.

Forhindre banegjennomgang i opplastingslogikk

Å redusere stigjennomgang starter med sterk validering og isolering av inndata. Behandle filnavn og stier som upålitelig inndata fra starten av, spesielt når du håndterer opplastede filer.

Beste praksis

  1. Normaliser og kanoniser alle stier før du bruker dem.
  2. Begrens opplastinger til en dedikert katalog utenfor webroten.
  3. Håndhev tillatelseslister for filtyper og MIME-typer.
  4. Aldri gjenbruk midlertidige mapper mellom økter eller brukere.
  5. Bruk containerbasert lagring for opplastede filer når det er mulig.

Mini-sjekkliste for forebyggende tiltak

  • Valider hvert filnavn med Sti.HentFilnavn() eller tilsvarende.
  • Løs opp fullstendige stier og bekreft kataloggrenser.
  • Bruk utvidelses- og MIME-tillatelseslister.
  • Bruk separate opplastingsmapper per bruker eller økt.
  • Inkluder skanning og validering av opplastinger i CI/CD tester.

Pedagogisk merknad: Hver filopplastingsbehandler er en potensiell angrepsvektor for stitraversering. Bygg et dyptgående forsvar ved å validere, isolere og skanne all filhåndteringskode.

Hvordan Xygeni oppdager og blokkerer usikre opplastingsflyter

Xygeni Code Security skanner kodebaser og pipelines for å oppdage mønstre for trasékjøring før de når produksjon. Den flagger usikker stisammenkobling, manglende kanonisering og farlige filoperasjoner i både kode og CI/CD skript.

Funksjonsutdrag, med kontrollrekkverk:

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

				
			

Pedagogisk merknad: Integrering Xygeni inn i din pipeline sørger for at sårbarheter ved filopplasting og angrep ved stigjennomgang fanges opp automatisk under byggevalidering.

Å lukke gapet: Forhindre ditt neste angrep på veien

En feil med enkel sti-traversering i et endepunkt for filopplasting kan gi angripere tilgang til serverens filsystem. Gjennomgå opplastingsbehandlere for usikre sammenkoblinger, normaliser alle stier, og stol aldri på brukerkontrollerte filnavn. Legg til verktøy for sårbarhetsskanning i likhet med Xygeni Code Security til din DevSecOps pipeline for å oppdage angrep ved stitraversering og sårbarheter for filopplasting før de sendes. I sikkerhetssammenheng må alle lagrede filer behandles som kjørt kode!

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken