20 mei 2026 · 5 min leestijd · begrippen
SSRF (Server-Side Request Forgery) is een kwetsbaarheid in webapplicaties. Een aanvaller laat de server HTTP-verzoeken sturen naar adressen die hij zelf bepaalt. De applicatie haalt bijvoorbeeld een afbeelding op via een door de gebruiker opgegeven URL, en die URL wordt onvoldoende gevalideerd. Het resultaat: de aanvaller bepaalt waar de server requests heen stuurt.
OWASP omschrijft het kernachtig: “SSRF flaws occur whenever a web application is fetching a remote resource without validating the user-supplied URL.” In MITRE-termen is dit CWE-918. Sinds 2021 staat SSRF als zelfstandige categorie A10 in de OWASP Top 10.
Die URL kan van alles aanroepen. Vaak een intern systeem dat de aanvaller normaal niet kan bereiken. Soms een cloud-metadata-endpoint dat credentials prijsgeeft. Soms een externe service die de aanvaller wil misbruiken vanaf uw IP-adres. De kern blijft dezelfde: de server bezoekt een URL die hij niet had mogen bezoeken.
Stel, een applicatie biedt een functie waarbij een avatar-afbeelding via URL kan worden opgegeven:
# Normaal gebruik
curl -X POST https://app.example.com/api/profile/avatar \
-H "Authorization: Bearer ..." \
--data '{"image_url": "https://example.com/foto.jpg"}'
De server haalt die URL op en verwerkt het antwoord. Een aanvaller vervangt nu de waarde van image_url:
# SSRF: server haalt een door de aanvaller gekozen URL op
curl -X POST https://app.example.com/api/profile/avatar \
-H "Authorization: Bearer ..." \
--data '{"image_url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}'
De server stuurt vanaf zijn eigen positie een GET-request naar het AWS-metadata-endpoint, met de rechten en de netwerkpositie van die server. Het antwoord komt terug via de applicatie, vaak in een respons-body of foutmelding.
SSRF komt in twee hoofdvormen voor. Bij een reguliere SSRF ziet de aanvaller het antwoord van het verzoek rechtstreeks terug. Bij een blinde SSRF is dat antwoord niet zichtbaar; de aanvaller weet alleen dát het verzoek is uitgevoerd. Een blinde SSRF wordt bevestigd via een out-of-band callback. De aanvaller laat de server een verzoek doen naar een eigen logging-domein, bijvoorbeeld via Burp Collaborator. Komt die request binnen, dan is de kwetsbaarheid bewezen.
De impact varieert sterk per omgeving:
169.254.169.254, GCP op metadata.google.internal) die alleen vanaf de VM zelf bereikbaar is. Een werkende SSRF in een cloud-applicatie kan via dit endpoint geldige IAM-credentials, access tokens of service-account keys opleveren. De Capital One-breach in 2019 (ruim 100 miljoen klantgegevens) verliep via dit exacte patroon.http:// accepteren sommige HTTP-libraries ook file:// (bestanden lezen op de server), gopher:// (rauwe TCP-payloads versturen, klassieke Redis-RCE-vector) of dict:// (interactie met dict-servers). Deze schemes geven een breder aanvalsoppervlak dan alleen HTTP.Tijdens een webapplicatie pentest lopen wij systematisch elke plek langs waar een URL als invoer wordt geaccepteerd. De zichtbare kandidaten zijn webhook-configuratie en avatar-uploads. Er zijn ook minder voor de hand liggende plekken: import-functies vanuit externe URLs, OAuth-redirect-callbacks, PDF- of HTML-export, RSS- en feed-readers, en backend-integraties met derden.
Per kandidaat proberen we een vaste reeks payloads: interne IP-ranges, localhost, cloud-metadata endpoints, een eigen out-of-band server om blinde SSRF te bevestigen, en niet-HTTP schemes om filters te omzeilen. Reageert de server met content, een foutmelding of timing-verschillen die op een uitgevoerd verzoek wijzen? Dan demonstreren we welke interne systemen en gegevens via die weg bereikbaar zijn. Een werkende keten van SSRF naar cloud-credentials laten we werkend zien, niet enkel theoretisch.
OWASP’s eerste adviespunt is duidelijk: gebruik een positieve allowlist, geen denylist. Allowlist betekent dat de applicatie een vaste set toegestane URL-bestemmingen kent en al het andere weigert.
127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16). Validatie hoort op het IP-adres na DNS-resolutie, niet op de hostname-string.https:// (en eventueel http:// als dat strikt nodig is). Sta file://, gopher:// en dict:// niet toe; deze worden nooit gebruikt voor legitieme web-fetches.localhost.PUT-verzoek voordat hij credentials teruggeeft. De meeste SSRF-payloads zijn GET-verzoeken en komen daar niet doorheen.Op netwerkniveau helpt egress-filtering: laat applicatieservers alleen die externe en interne diensten bereiken die ze daadwerkelijk nodig hebben. Het loggen van zowel toegestane als geblokkeerde uitgaande verbindingen maakt SSRF-pogingen detecteerbaar in plaats van onzichtbaar.
localhost raken is al ongewenst. Komt een aanvaller via SSRF bij cloud-credentials of een interne database, dan stijgt het risico snel naar kritiek. De Capital One-breach in 2019 (ruim 100 miljoen klantgegevens) verliep precies via dit pad: SSRF naar het AWS-metadata-endpoint.
Kerberoasting kraakt offline service-account-wachtwoorden uit Kerberos TGS-tickets. Wij vinden er in een AD-pentest vrijwel altijd zwakke service-accounts mee.
NTLM is het oudere Microsoft challenge-response authenticatieprotocol in Windows-netwerken. Wij tonen waar het lekt in uw AD en hoe u het kunt uitfaseren.
Pass-the-Hash laat aanvallers met een NTLM-hash op Windows-systemen inloggen zonder het wachtwoord te kennen. Wij tonen het risico in uw AD-netwerk.