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 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 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
- Normaliser og kanoniser alle stier før du bruker dem.
- Begrens opplastinger til en dedikert katalog utenfor webroten.
- Håndhev tillatelseslister for filtyper og MIME-typer.
- Aldri gjenbruk midlertidige mapper mellom økter eller brukere.
- 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!







