Wanneer bestanduploads veranderen in bestandstoegang
Eén onveilige uploadhandler kan de deur openen voor een volledige padtraversal-aanval en kwetsbaarheid voor het uploaden van bestanden. Wanneer ontwikkelaars bestandsnamen rechtstreeks aan uploadpaden koppelen, aanvallers kunnen kwaadaardige bestandsnamen indienen als ../../etc/passwd om uit mappen te ontsnappen en toegang te krijgen tot gevoelige bestanden. Dit type paddoorkruising maakt van een eenvoudige upload-API een krachtig exploit voor toegang tot bestanden, vooral wanneer de toepassing met verhoogde machtigingen wordt uitgevoerd.
⚠️Onveilig voorbeeld, alleen voor educatieve doeleinden. Niet gebruiken in productie.
// 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!"); } Een aanvaller kan een bestand uploaden met de naam ../../web.config om beperkte bestanden te overschrijven of te lezen, een klassieke padtraversal-aanval.
Veilige versie:
// 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!"); } Educatieve opmerking: Maak paden altijd canoniek met Pad.GetFullPath() en controleer of het resultaat in uw uploaddirectory blijft. Vertrouw nooit een bestand.Bestandsnaam direct.
Fouten van ontwikkelaars die padtraversal mogelijk maken
De meeste kwetsbaarheden bij het uploaden van bestanden die leiden tot padtraversal zijn het gevolg van overhaaste code en ontbrekende validatie. Veelvoorkomende fouten bij ontwikkelaars zijn onder andere:
- Gebruikersinvoer rechtstreeks in bestandssysteempaden samenvoegen
- vertrouwend Content-Type of alleen extensievalidatie
- Normalisatie van paden overslaan vóór het opslaan
Tijdelijke mappen hergebruiken voor aanvragen of microservices
⚠️Onveilig voorbeeld, alleen voor educatieve doeleinden. Niet gebruiken in productie.
# 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' Aanvallers kunnen deze eenvoudige samenvoeging omzeilen om door mappen te navigeren (../../app.py) en willekeurige bestanden schrijven of overschrijven. Veilige versie:
# 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' Educatieve opmerking: Gebruik door het framework geleverde helpers zoals beveiligde_bestandsnaam en extensies op de toegestane lijst afdwingen. Voeg invoer nooit handmatig samen in bestandspaden.
Exploitatie in Real Pipelines en microservices
Path traversal-aanvallen vinden niet alleen plaats op openbare eindpunten. Ze verschijnen vaak binnen CI/CD systemen, artefactopslagplaatsen of microservices die geüploade bestanden beheren. Een kwetsbaarheid voor het uploaden van bestanden in een build-artefactbeheerder kan er bijvoorbeeld voor zorgen dat een aanvaller buildscripts overschrijft of schadelijke bestanden in gedeelde runners injecteren.
⚠️Onveilig voorbeeld, alleen voor educatieve doeleinden. Niet gebruiken in productie.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $BESTANDSNAAM is niet gevalideerd, een vervaardigde ../../../etc/passwd waarde kan kritieke systeembestanden overschrijven tijdens de implementatie, een realistische padtraversal-aanval. Veilige versie:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" Educatieve opmerking: In pipelines, reinig alle dynamische padvariabelen. Beperk schrijfbewerkingen tot gecontroleerde mappen om te voorkomen dat het bestandssysteem ontsnapt tijdens builds of implementaties.
Paddoorkruising in uploadlogica voorkomen
Het beperken van padtraversal begint met sterke invoervalidatie en -isolatie. Behandel bestandsnamen en paden vanaf het begin als niet-vertrouwde invoer, vooral bij het verwerken van geüploade bestanden.
Best Practices
- Normaliseren en canoniseren alle paden voordat u ze gebruikt.
- Uploads beperken naar een speciale directory buiten de webroot.
- Toestemmingslijsten afdwingen voor bestandsextensies en MIME-typen.
- Gebruik tijdelijke mappen nooit opnieuw tussen sessies of gebruikers.
- Gebruik containeropslag voor geüploade bestanden indien mogelijk.
Mini preventieve checklist
- Valideer elke bestandsnaam met Pad.GetFileName() of gelijkwaardig.
- Volledige paden oplossen en directorygrenzen controleren.
- Pas extensies en MIME-toestaanlijsten toe.
- Gebruik aparte uploadmappen per gebruiker of sessie.
- Inclusief uploadscanning en validatie in CI/CD testen.
Educatieve opmerking: Elke handler voor het uploaden van bestanden is een potentiële aanvalsvector voor padtraversal. Bouw een diepgaande verdediging door alle code voor bestandsverwerking te valideren, isoleren en scannen.
Hoe Xygeni onveilige uploadstromen detecteert en blokkeert
Xygeni Code Security scant codebases en pipelineom padtraversatiepatronen te detecteren voordat ze de productie bereiken. Het markeert onveilige pad-samenvoeging, ontbrekende canonicalisatie en gevaarlijke bestandsbewerkingen in zowel code als CI/CD scripts.
Functioneel fragment, met controle-guardrail:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk Educatieve opmerking: Integreren Xygeni in uw pipeline Zorgt ervoor dat kwetsbaarheden bij het uploaden van bestanden en padtraversal-aanvallen automatisch worden gedetecteerd tijdens de buildvalidatie.
De kloof dichten: voorkom een aanval op uw volgende pad
Een bug in het enkelvoudige padtraject van een eindpunt voor het uploaden van bestanden kan aanvallers toegang geven tot het bestandssysteem van uw server. Controleer upload-handlers op onveilige samenvoegingen, normaliseer alle paden en vertrouw nooit door de gebruiker gecontroleerde bestandsnamen. Toevoegen tools voor het scannen op kwetsbaarheden als Xygeni Code Security aan jouw DevSecOps pipeline om padtraversal-aanvallen en kwetsbaarheden bij het uploaden van bestanden te detecteren voordat ze worden verzonden. Uit veiligheidsoverwegingen moet elk opgeslagen bestand worden behandeld als uitgevoerde code!






