Wordt u aangevallen? Vraag hulp bij incidentrespons

info@angelforce.eu
Webbeveiliging

Veilige bestandsuploads ontwerpen en testen

Een checklist met maatregelen voor uploadfuncties, gebaseerd op de OWASP-cheatsheet, plus een tabel met tests voor elk upload-endpoint.

Ook beschikbaar in:EnglishTürkçeDeutschFrançaisEspañolItalianoPolskiEesti

Illustratie: Veilige bestandsuploads ontwerpen en testen

Een veilige uploadfunctie berust op meerdere maatregelen die samen worden toegepast, en de OWASP File Upload Cheat Sheet zet ze op een rij. Dit artikel loopt die lijst door, wijst de punten aan die makkelijk worden overgeslagen en vertaalt de lijst naar tests die u op elk upload-endpoint kunt uitvoeren.

Waartegen u zich verdedigt

De cheatsheet groepeert de dreigingen onder "malicious files". De eerste is een aanval op de software die het bestand verwerkt. Een aanvaller levert een bestand aan dat misbruik maakt van een kwetsbaarheid in de parser of de verwerkingsmodule. De cheatsheet noemt de ImageTrick-exploit en XXE als voorbeelden.

De tweede is phishing. De cheatsheet gebruikt een sollicitatieformulier als voorbeeld. De upload wordt dan een manier om een kwaadaardig bestand voor te leggen aan de mensen die het openen.

De derde is beschikbaarheid. ZIP-bommen, XML-bommen (de billion laughs-aanval) en simpelweg enorme bestanden kunnen de opslagruimte van de server vullen en de beschikbaarheid van de server schaden.

Valideer voordat u accepteert

De cheatsheet schrijft een volgorde voor: pas input validation toe voordat u de extensie valideert. Vervolgens werkt u met een allowlist.

  • Maak een lijst van toegestane extensies. Sta alleen de veilige extensies toe die de bedrijfsfunctie nodig heeft. Een formulier voor een profielfoto heeft geen reden om iets anders te accepteren dan enkele afbeeldingstypen.
  • Valideer het bestandstype. Vertrouw niet op de opgegeven Content-Type, want die kan worden vervalst. Valideer het bestandstype en de signature voordat u de upload accepteert.
  • Stel een maximale lengte voor bestandsnamen in en beperk waar mogelijk de toegestane tekens.
  • Stel een maximale bestandsgrootte in.

Als een bestand bij een van deze controles faalt, weigert u het.

Ga zorgvuldig om met naam en locatie

De cheatsheet adviseert om de door de gebruiker opgegeven bestandsnaam te vervangen door een naam die de applicatie zelf genereert. Doe dit bij elke upload, ongeacht het bestandstype.

Waar het bestand wordt opgeslagen is even belangrijk als wat het bestand is. Sla uploads waar mogelijk op een andere server op. Is dat niet mogelijk, sla ze dan op buiten de webroot.

Moeten bestanden openbaar bereikbaar zijn, gebruik dan een handler binnen de applicatie die een identifier koppelt aan een bestand (someid naar file.ext), in plaats van het opslagpad bloot te geven.

Twee andere punten uit de lijst vergeet u gemakkelijk:

  • Alleen geautoriseerde gebruikers mogen bestanden kunnen uploaden.
  • Bescherm de upload tegen CSRF-aanvallen.

Scan en verwerk wat u bewaart

Validatie controleert of een bestand er goed uitziet. De cheatsheet voegt een extra stap toe: laat het bestand, indien beschikbaar, door een antivirusengine of sandbox controleren om vast te stellen dat het geen kwaadaardige data bevat.

Overweeg voor geschikte documenttypen, zoals PDF en DOCX, CDR (Content Disarm & Reconstruct) als aanvullende verwerkingsstap.

De cheatsheet stelt ook dat alle gebruikte libraries veilig geconfigureerd en up-to-date moeten zijn. Omdat kwetsbaarheden in parsers een van de genoemde dreigingen zijn, is dit het punt dat u het best toewijst aan een met naam genoemde persoon, met een reviewdatum.

Test elk endpoint

De cheatsheet bevat maatregelen, geen testcases. Elke rij hieronder is onze eigen afleiding uit de checklist, en de derde kolom laat zien van welk punt de test is afgeleid. Voer de tests uit op elk upload-endpoint, inclusief beheertools en endpoints die voor één enkele klant zijn toegevoegd.

TestHoe een geslaagde test eruitzietGrondslag
Upload een scriptbestand dat is hernoemd naar een toegestane extensieGeweigerd na validatie van het bestandstypeAfgeleid: valideer het bestandstype
Verstuur een niet-toegestaan bestand met een toegestane Content-TypeWordt nog steeds geweigerdAfgeleid: vertrouw de Content-Type-header niet
Verstuur een zeer lange bestandsnaamGeweigerd, of vervangen door een gegenereerde naamAfgeleid: maximale lengte bestandsnaam, gegenereerde bestandsnamen
Upload een bestand boven de maximale grootteGeweigerdAfgeleid: maximale bestandsgrootte
Vraag het opgeslagen bestand op door het pad te radenAlleen bereikbaar via de handlerAfgeleid: opslaglocatie, handler met mapping
Upload zonder sessie of zonder CSRF-tokenGeweigerdAfgeleid: geautoriseerde gebruikers, CSRF-bescherming
Upload een ZIP- of XML-bom in een testomgevingDe dienst blijft beschikbaarAfgeleid: dreiging voor beschikbaarheid

Als bredere referentie beschrijft de OWASP Web Security Testing Guide zichzelf als de belangrijkste cybersecurity-testbron voor webapplicatieontwikkelaars en beveiligingsprofessionals. De OWASP Application Security Verification Standard biedt genummerde eisen om tegen te toetsen. Als u een van beide aanhaalt in een ticket of rapport, vermeld dan de versie, bijvoorbeeld v5.0.0-1.2.5, omdat identifiers tussen versies van de standaard kunnen veranderen.

Waar u kunt beginnen

  1. Maak een lijst van elk endpoint dat een bestand accepteert, inclusief beheertools, importfuncties en oude plugins.
  2. Bepaal per endpoint de toegestane extensies, de maximale bestandsgrootte en de maximale lengte van de bestandsnaam, en pas input validation toe vóór de extensiecontrole.
  3. Vervang door gebruikers opgegeven bestandsnamen door gegenereerde namen. Verplaats de opslag naar een aparte server of buiten de webroot, en lever openbare bestanden via een handler die ID's koppelt aan bestandsnamen.
  4. Voeg validatie van bestandstype en signature toe, een antivirus- of sandboxstap, en CDR voor de documenttypen die u accepteert. Controleer of parsing-libraries up-to-date en veilig geconfigureerd zijn.
  5. Zet de testtabel om in gescripte controles en voer die uit vóór elke release. Wilt u een externe beoordeling van het resultaat, dan kan onze pentestdienst de endpoints testen, en onze ondersteuning bij veilige softwareontwikkeling kan helpen als de functie nog in de ontwerpfase zit. De OWASP-richtlijnen voor bestandsuploads dienen in beide gevallen als reviewchecklist.

Hoe wij kunnen helpen

Penetratietesten

Wij vallen uw netwerken, applicaties en medewerkers aan zoals een echte tegenstander dat zou doen, en laten zien hoe u elk gat dicht.

Neem contact op
AngelForce-team

Geschreven door het AngelForce-team: securityconsultants met CEH-, LPT Master- en CISA-certificering die systemen van organisaties in heel Europa en Turkije testen, bewaken en beschermen.

Geschreven met hulp van AI op basis van de openbare bronnen hieronder, en vóór publicatie gecontroleerd door het team van AngelForce.

Bronnen

  1. cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
  2. owasp.org/projects/asvs
  3. owasp.org/projects/web-security-testing-guide

Artikelen over Webbeveiliging

Vertel ons wat u wilt beschermen

Beschrijf uw omgeving en wat u wilt bereiken. Wij antwoorden per e-mail.

Neem contact op
info@angelforce.eu

AngelForce OÜ · Tallinn, Estland