Server-Side Request Forgery (SSRF) verhindern
AI generated
OWASP
0x00
OWASP Top 10 · A10 Server-Side Request Forgery
Server-Side Request Forgery (SSRF) verhindern
Wenn der Server im Namen des Angreifers Anfragen stellt

Bei Server-Side Request Forgery bringt ein Angreifer den Server dazu, in seinem Namen Anfragen an interne Ressourcen zu stellen, etwa an Cloud-Metadaten-Endpunkte oder interne Admin-Panels. Wir zeigen typische Einfallstore und eine Allowlist-basierte Absicherung von Ziel-URLs.

13 Min. Lesezeit SSRF Allowlist-Validierung

1. Was ist Server-Side Request Forgery?

Server-Side Request Forgery, kurz SSRF, tritt auf, wenn eine Anwendung eine vom Nutzer beeinflussbare URL entgegennimmt und selbst eine HTTP-Anfrage an diese URL stellt. Typische Beispiele sind Webhook-Konfigurationen, Bildimporte per URL, PDF-Generatoren, die eine externe Seite rendern, oder Funktionen, die entfernte Dateien herunterladen. Die Schwachstelle gehört seit Jahren zu den OWASP Top 10 und gewinnt mit der Verbreitung von Cloud-Infrastruktur zusätzlich an Relevanz.

Der Server agiert dabei aus Sicht des Zielsystems als vertrauenswürdiger interner Client. Ein Angreifer, der die Ziel-URL kontrolliert, kann diese Anfrage nutzen, um Ressourcen anzusprechen, die von außen gar nicht erreichbar wären, etwa interne Netzwerksegmente, Datenbank-Admin-Oberflächen oder Cloud-Metadaten-Dienste.

2. Typische Einfallstore in Anwendungen

Am häufigsten entsteht SSRF über Funktionen, die explizit eine URL vom Client entgegennehmen: Ein Webhook-Ziel, ein Profilbild-Import per Link, eine URL-Vorschau-Funktion in einem Chat oder ein PDF-Renderer, der eine externe Seite als Vorlage lädt. Auch scheinbar harmlose Funktionen wie ein Link-Checker oder ein RSS-Feed-Import können SSRF ermöglichen, wenn die Ziel-URL nicht eingeschränkt wird. Selbst Funktionen, die nur mittelbar mit URLs arbeiten, etwa ein Dienst, der eine Domain auf Erreichbarkeit prüft, können missbraucht werden, um interne Adressen abzutasten.

Die abgesicherte Variante im folgenden Beispiel prüft den Host gegen eine feste Allowlist, erzwingt HTTPS, löst den Hostnamen selbst auf und lehnt private oder reservierte IP-Bereiche ab, um DNS-Rebinding-Tricks zu erschweren. Zusätzlich werden automatische Redirects deaktiviert, da ein Angreifer sonst über eine erlaubte URL auf eine interne Weiterleitung umleiten könnte.


<?php

declare(strict_types=1);

namespace App\Service;

use Symfony\Contracts\HttpClient\HttpClientInterface;

final class WebhookImageFetcher
{
    private const ALLOWED_HOSTS = [
        'images.trusted-partner.com',
        'cdn.mironsoft.de',
    ];

    public function __construct(
        private readonly HttpClientInterface $httpClient,
    ) {
    }

    // Verwundbar: Jede vom Client übergebene URL wird direkt angefragt
    public function fetchVulnerable(string $imageUrl): string
    {
        $response = $this->httpClient->request('GET', $imageUrl);

        return $response->getContent();
    }

    // Abgesichert: Nur explizit erlaubte Hosts dürfen angefragt werden
    public function fetchSecured(string $imageUrl): string
    {
        $host = parse_url($imageUrl, PHP_URL_HOST);
        $scheme = parse_url($imageUrl, PHP_URL_SCHEME);

        if ($scheme !== 'https' || $host === null || !\in_array($host, self::ALLOWED_HOSTS, true)) {
            throw new \InvalidArgumentException('URL host is not on the allowlist.');
        }

        $ip = gethostbyname($host);
        if ($this->isPrivateOrReservedIp($ip)) {
            throw new \InvalidArgumentException('Resolved IP is not publicly routable.');
        }

        $response = $this->httpClient->request('GET', $imageUrl, [
            'max_redirects' => 0,
        ]);

        return $response->getContent();
    }

    private function isPrivateOrReservedIp(string $ip): bool
    {
        return filter_var(
            $ip,
            FILTER_VALIDATE_IP,
            FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
        ) === false;
    }
}

3. Cloud-Metadaten-Endpunkte als Hauptziel

Ein besonders beliebtes SSRF-Ziel sind Cloud-Metadaten-Dienste, die unter einer festen Link-lokalen Adresse wie 169.254.169.254 erreichbar sind und ohne Authentifizierung Instanz-Informationen ausliefern, teilweise inklusive temporärer Zugangsdaten für die Cloud-API. Kann ein Angreifer den Server dazu bringen, diese Adresse anzufragen und die Antwort zurückzugeben, erhält er potenziell weitreichenden Zugriff auf die gesamte Cloud-Infrastruktur, etwa auf Speicher-Buckets, Datenbanken oder sogar auf die Fähigkeit, weitere Serverinstanzen zu steuern.

Aus diesem Grund gehört die explizite Sperrung link-lokaler und privater IP-Bereiche zu den wichtigsten Maßnahmen gegen SSRF, unabhängig davon, ob die Anwendung überhaupt in einer Cloud-Umgebung mit Metadaten-Dienst läuft, da sich Angriffsziele im Lauf der Infrastruktur-Lebenszeit ändern können. Viele große Anbieter haben inzwischen zusätzliche Schutzmechanismen wie IMDSv2 eingeführt, die einen Token-basierten Zugriff erzwingen und einfache SSRF-Anfragen erschweren, ersetzen aber keine saubere Validierung auf Anwendungsebene.

4. Warum eine reine Blockliste nicht ausreicht

Eine Blockliste, die bekannte interne IP-Bereiche wie 127.0.0.1 oder 10.0.0.0/8 ausschliesst, wirkt auf den ersten Blick ausreichend, lässt sich aber auf vielfältige Weise umgehen: durch alternative IP-Schreibweisen wie Oktalzahlen oder Dezimalnotation, durch DNS-Rebinding, bei dem ein Hostname zunächst auf eine erlaubte IP und nach der Prüfung auf eine interne IP aufgelöst wird, oder durch offene Redirects auf erlaubten Domains.

Eine Allowlist bekannter, vertrauenswürdiger Ziel-Hosts umgeht diese Probleme grundsätzlich, weil nur explizit freigegebene Ziele überhaupt in Frage kommen. Wo eine feste Allowlist fachlich nicht möglich ist, etwa bei frei wählbaren Webhook-Zielen von Kunden, muss zusätzlich die aufgelöste IP-Adresse unmittelbar vor der eigentlichen Anfrage geprüft werden, um DNS-Rebinding zu verhindern. Wichtig ist dabei, dieselbe aufgelöste IP-Adresse für die Prüfung und für die eigentliche Anfrage zu verwenden, statt zweimal getrennt aufzulösen, da sonst erneut ein Zeitfenster für Rebinding entsteht.

5. Netzwerkseitige Absicherung

Neben der Validierung auf Anwendungsebene sollte der Server, der externe Anfragen ausführt, netzwerkseitig so segmentiert werden, dass er interne Systeme wie Datenbanken, Admin-Panels oder Cloud-Metadaten-Dienste gar nicht erst erreichen kann. Eine dedizierte Egress-Firewall-Regel für den ausführenden Dienst reduziert den Schaden selbst dann, wenn eine Anwendungslücke übersehen wurde. Dieses Prinzip der Verteidigung in mehreren Schichten ist besonders wichtig, weil Anwendungslogik sich im Laufe eines Projekts ständig ändert, während eine grundlegende Netzwerksegmentierung stabiler bleibt.

In containerisierten Umgebungen bietet sich zusätzlich ein separater, stark eingeschränkter Netzwerk-Namespace für Dienste an, die externe URLs verarbeiten, sodass ein erfolgreicher SSRF-Angriff bestenfalls ins Leere läuft, weil das Zielsystem aus diesem Namespace ohnehin nicht erreichbar ist. Ergänzend lohnt sich eine regelmäßige Überprüfung der Firewall-Regeln, da neue Dienste im Laufe der Zeit gerne mit zu großzügigen Standardregeln ausgestattet werden.

6. Sicherer Umgang mit der Antwort

Auch die Antwort einer SSRF-anfälligen Anfrage muss sorgfältig behandelt werden. Wird der komplette Response-Body ungefiltert an den Client zurückgegeben, kann ein Angreifer interne Systeme regelrecht durch die eigene Anwendung hindurch auslesen, auch wenn die Anfrage selbst durch eine Allowlist eingeschränkt ist.

Sinnvoll sind eine Begrenzung der maximalen Antwortgröße, ein Timeout für die Anfrage sowie eine Prüfung des Content-Type, damit etwa ein Bildimport tatsächlich nur Bilddaten akzeptiert und keine beliebigen Textinhalte durchreicht. Wird die Antwort anschließend weiterverarbeitet, etwa in einer Bildbibliothek, sollte auch diese Verarbeitung isoliert erfolgen, um Folgeschwachstellen in der Bildverarbeitung selbst auszuschließen.

7. Code-Review-Checkliste für SSRF

Bei jedem Code-Review sollte gezielt nach Funktionen gesucht werden, die eine URL, einen Hostnamen oder eine IP-Adresse aus Nutzereingaben entgegennehmen und für eine eigene HTTP-Anfrage verwenden. Für jede dieser Funktionen ist zu prüfen, ob eine Allowlist existiert, ob Redirects kontrolliert werden und ob private IP-Bereiche ausgeschlossen sind.

Besonders im Blick behalten sollte man Bibliotheken von Drittanbietern, etwa für PDF-Generierung oder URL-Vorschauen, da diese häufig eigene HTTP-Clients mitbringen, die Redirects und interne Adressen standardmäßig nicht einschränken. Ein Blick in die Konfigurationsoptionen dieser Bibliotheken lohnt sich, da viele davon durchaus eine eigene Allowlist oder eine Option zum Blockieren interner Adressen anbieten, die aber oft nicht standardmäßig aktiviert ist.

8. Häufige Fehler bei der Absicherung

Ein häufiger Fehler ist, nur die ursprünglich vom Nutzer eingegebene URL zu prüfen, aber nicht die tatsächlich aufgelöste IP-Adresse, wodurch DNS-Rebinding weiterhin möglich bleibt. Ein weiterer Fehler ist, Redirects unverändert zu folgen, sodass eine zunächst erlaubte URL auf eine interne Adresse umleiten kann.

Auch das voreilige Vertrauen in interne Netzwerkkomponenten ist riskant: Selbst wenn ein Reverse Proxy grundsätzlich vorgeschaltet ist, sollte die Anwendung selbst keine ungeprüften Anfragen an beliebige Ziele stellen, da nicht jede Komponente in der Kette zwingend konsistent konfiguriert ist.

9. Best Practices und Checkliste

Jede Funktion, die eine externe URL anfragt, sollte auf eine feste Allowlist erlaubter Hosts und Schemata prüfen, die aufgelöste IP-Adresse unmittelbar vor der Anfrage validieren und automatische Redirects deaktivieren oder streng kontrollieren.

Ergänzend gehören eine Begrenzung von Antwortgröße und Timeout, eine netzwerkseitige Segmentierung des ausführenden Dienstes sowie eine gezielte Prüfung von Drittanbieter-Bibliotheken mit eigenem HTTP-Client zu einer robusten SSRF-Absicherung.

Einfallstor Beispiel Risiko Gegenmaßnahme
Webhook-URL Kunde konfiguriert Ziel-URL frei Zugriff auf interne Dienste Allowlist plus IP-Validierung
Bildimport per URL Profilbild von externem Link laden SSRF über Bild-Endpunkt Content-Type-Prüfung, Allowlist
PDF-Generator Rendert externe Seite als Vorlage Zugriff auf Cloud-Metadaten Interne IP-Bereiche sperren
Link-Vorschau / RSS-Import Ziel-URL aus Nutzereingabe DNS-Rebinding IP-Prüfung direkt vor der Anfrage

Mironsoft

Security-Audits, OWASP-konforme Härtung und sichere Architektur

Anwendungen, die einem echten Angriffsversuch tatsächlich standhalten?

Wir prüfen bestehende Anwendungen auf klassische OWASP-Schwachstellen, unsichere Authentifizierung und fehlende Input-Validierung und bauen daraus eine Architektur, die Angriffsflächen strukturell reduziert statt nur einzelne Symptome zu flicken.

Security-Audit

OWASP Top 10, Auth-Flows und Input-Validierung systematisch auf Schwachstellen prüfen.

Sichere Architektur

Rate-Limiting, Verschlüsselung und Zugriffskontrollen von Grund auf richtig aufbauen.

Incident-Vorbereitung

Logging, Monitoring und Reaktionsprozesse für den Ernstfall etablieren.

10. Zusammenfassung

SSRF

Ursache

Server fragt vom Angreifer kontrollierte URLs im eigenen Namen an.

Erkennung

Code-Review auf Funktionen mit nutzergesteuerten URLs.

Fix

Allowlist erlaubter Hosts plus IP-Validierung vor der Anfrage.

Prävention

Netzwerksegmentierung, Redirect-Kontrolle, Antwortlimits.

11. FAQ: SSRF

1Was ist Server-Side Request Forgery?
SSRF bezeichnet eine Schwachstelle, bei der ein Server dazu gebracht wird, im Namen eines Angreifers Anfragen an Ziele zu stellen, die von außen normalerweise nicht erreichbar wären.
2Warum sind Cloud-Metadaten-Endpunkte so ein beliebtes Ziel?
Weil sie ohne Authentifizierung erreichbar sind und teilweise temporäre Zugangsdaten für die Cloud-API ausliefern, was einem Angreifer weitreichenden Zugriff auf die Infrastruktur verschaffen kann.
3Reicht es, bekannte interne IP-Bereiche zu blockieren?
Nein, eine reine Blockliste lässt sich durch DNS-Rebinding, alternative IP-Schreibweisen oder offene Redirects umgehen. Eine Allowlist erlaubter Ziele ist deutlich robuster.
4Was ist DNS-Rebinding im Kontext von SSRF?
Dabei löst ein Hostname bei der ersten Prüfung auf eine erlaubte IP auf und kurz danach, bei der eigentlichen Anfrage, auf eine interne IP, wodurch eine reine Host-Prüfung umgangen wird.
5Warum sollten Redirects bei SSRF-relevanten Anfragen deaktiviert werden?
Weil eine zunächst erlaubte URL per Redirect auf eine interne Adresse umleiten kann, wodurch eine Allowlist-Prüfung am Anfang der Anfrage wirkungslos wird.
6Betrifft SSRF nur Funktionen mit sichtbarem URL-Feld?
Nein, auch indirekte Funktionen wie PDF-Generatoren, die externe Seiten rendern, oder Importfunktionen für RSS-Feeds können SSRF ermöglichen, wenn die Ziel-URL nicht eingeschränkt wird.
7Welche Rolle spielt Netzwerksegmentierung bei SSRF?
Sie begrenzt den Schaden, falls eine Anwendungslücke übersehen wurde, indem der ausführende Dienst interne Systeme wie Datenbanken oder Metadaten-Dienste netzwerkseitig gar nicht erst erreichen kann.
8Muss die Antwort einer externen Anfrage besonders behandelt werden?
Ja, eine ungefilterte Rückgabe des kompletten Response-Bodys kann interne Systeme durch die eigene Anwendung hindurch auslesbar machen, deshalb sind Größenlimits und Content-Type-Prüfung wichtig.
9Sind Drittanbieter-Bibliotheken ein besonderes Risiko?
Ja, viele Bibliotheken für PDF-Generierung oder URL-Vorschauen bringen eigene HTTP-Clients mit, die Redirects und interne Adressen standardmäßig nicht einschränken.
10Wie testet man eine Anwendung auf SSRF?
Indem gezielt Funktionen mit URL-Eingaben auf interne Adressen, Metadaten-Endpunkte und Redirect-Ketten getestet werden, idealerweise in einer isolierten Testumgebung mit kontrollierten internen Zielen.