Information!

Server-Side Request Forgery (SSRF)

Einleitung

Server-Side Request Forgery (SSRF) ist eine Sicherheitslücke, bei der ein Angreifer einen Server dazu bringt, Anfragen an andere Server zu senden, die der Angreifer kontrolliert oder die für den Angreifer von Interesse sind. Dies kann zu einer Vielzahl von Angriffen führen, einschließlich Datendiebstahl, Umgehung von Sicherheitsvorkehrungen und sogar Remote Code Execution (RCE).

SSRF kann sowohl gegen interne Dienste des betroffenen Unternehmens als auch gegen externe Systeme verwendet werden, um Informationen zu extrahieren oder schädliche Aktionen durchzuführen. Besonders problematisch wird SSRF, wenn Angreifer auf interne Dienste zugreifen, die normalerweise nicht von außen erreichbar sind. Oftmals nutzen Angreifer die Schwachstelle, um über den Server weitere Systeme anzugreifen, da der Server als vertrauenswürdiger Absender gilt.

Funktionsweise

Grundlegendes Konzept

SSRF tritt auf, wenn eine Webanwendung Eingaben von Benutzern akzeptiert und diese Eingaben verwendet, um HTTP-Anfragen an andere Server zu senden. Idealerweise sollten diese Anfragen auf vertrauenswürdige Quellen beschränkt sein. Wenn jedoch keine ausreichenden Validierungs- und Filtermechanismen vorhanden sind, kann ein Angreifer die URL so manipulieren, dass der Server Anfragen an unerwünschte Ziele sendet.

In vielen Fällen kann der Angreifer die Serveranfragen auf interne Systeme des Unternehmens lenken, die normalerweise durch Firewalls oder andere Sicherheitsmechanismen geschützt sind. Da die Anfrage von einem internen Server stammt, werden Sicherheitsüberprüfungen häufig umgangen.

Beispiel einer SSRF-Attacke

Ein typisches Szenario für eine SSRF-Attacke wäre eine Anwendung, die eine URL von einem Benutzer akzeptiert und deren Inhalt abruft, um ihn anzuzeigen. Ein Angreifer könnte diese URL so manipulieren, dass sie auf einen internen Dienst zeigt, der normalerweise nicht von außen zugänglich ist.

GET /fetch?url=http://internal-service.local

In diesem Fall könnte der Server die Anfrage an http://internal-service.local weiterleiten, wodurch der Angreifer Zugriff auf interne Daten erhält. Ein weiteres Beispiel könnte sein, dass der Angreifer den Server dazu bringt, sich selbst (über 127.0.0.1 oder localhost) anzufragen, was den Zugriff auf administrative Funktionen erlaubt, die normalerweise nur intern verfügbar sind.

Ein Angreifer könnte eine Anfrage wie die folgende verwenden, um auf administrative Funktionen zuzugreifen, die über das Netzwerk nicht direkt verfügbar sind:

POST /product/stock HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 118 stockApi=http://localhost/admin

Hierbei sendet der Server eine Anfrage an die interne /admin-Schnittstelle und gibt möglicherweise vertrauliche Daten zurück, die normalerweise nicht zugänglich wären.

Auswirkungen von SSRF

Datendiebstahl

Angreifer können SSRF nutzen, um auf sensible Daten zuzugreifen, die in internen Diensten gespeichert sind. Dies kann beispielsweise Konfigurationsdateien, Datenbankinhalte und andere vertrauliche Informationen umfassen. SSRF-Angriffe, die gegen interne Systeme gerichtet sind, können besonders verheerend sein, da diese Systeme oft schwächer gesichert sind.

Umgehung von Sicherheitsvorkehrungen

SSRF kann verwendet werden, um Sicherheitsvorkehrungen wie Firewalls und VPNs zu umgehen. Da der Angriff von einem internen Server aus durchgeführt wird, sehen die Anfragen legitim aus und werden nicht blockiert. Dies gibt Angreifern oft Zugriff auf ansonsten geschützte Systeme.

Remote Code Execution (RCE)

In einigen Fällen kann SSRF zu Remote Code Execution führen. Dies ist möglich, wenn der angegriffene Dienst Schwachstellen aufweist, die ausgenutzt werden können, um schädlichen Code auszuführen. Besonders gefährlich sind SSRF-Angriffe, die auf Systeme abzielen, die vertrauliche administrative Funktionen bieten, da diese oft anfälliger für solche Ausnutzungen sind.

Schutzmaßnahmen

Input-Validierung

Eine der grundlegendsten Schutzmaßnahmen gegen SSRF ist die sorgfältige Validierung und Filterung von Benutzereingaben. URLs sollten nur auf vertrauenswürdige Domains beschränkt werden. Es ist ebenfalls wichtig, Techniken wie URL-Encoding und alternative IP-Darstellungen zu erkennen und abzufangen.

Verwendung von Whitelists

Eine Whitelist von erlaubten Domains kann dazu beitragen, SSRF-Angriffe zu verhindern. Nur Anfragen an vorab festgelegte, vertrauenswürdige Domains sollten zugelassen werden. Dabei sollte auf eine korrekte URL-Validierung geachtet werden, um Tricks wie URL-Fragmente oder alternative Hostdarstellungen zu verhindern.

Netzwerksegmentierung

Durch die Segmentierung des Netzwerks können interne Dienste besser geschützt werden. Kritische Dienste sollten in isolierten Netzwerken betrieben werden, die nicht direkt von Webservern aus zugänglich sind. Dadurch wird die Angriffsfläche für SSRF-Angriffe deutlich reduziert.

Einsatz von Web Application Firewalls (WAF)

Web Application Firewalls können helfen, SSRF-Angriffe zu erkennen und zu blockieren. Sie bieten eine zusätzliche Schutzschicht, indem sie verdächtige Anfragen filtern und blockieren. Dies ist besonders effektiv, wenn die WAF auf SSRF-spezifische Angriffsmuster abgestimmt ist.

Aktuelle Studien und Entwicklungen

Eine aktuelle Studie von Veracode aus dem Jahr 2022 zeigt, dass SSRF-Angriffe in den letzten Jahren zugenommen haben. Zudem haben Untersuchungen gezeigt, dass viele Unternehmen ihre Sicherheitsvorkehrungen gegen SSRF nicht ausreichend getestet haben, was die Notwendigkeit verdeutlicht, präventive Maßnahmen zu ergreifen.

Schutzmaßnahmen gegen SSRF

Server-Side Request Forgery (SSRF) ist eine schwerwiegende Sicherheitslücke, die bei unzureichenden Schutzmaßnahmen fatale Folgen haben kann. Viele moderne Webframeworks und Content-Management-Systeme (CMS) bieten jedoch native oder einfach zu integrierende Mechanismen, um sich gegen SSRF-Angriffe zu schützen. Im Folgenden werden wir konkrete Beispiele für Laravel-Anwendungen, Node.js-Systeme und CMS-Systeme wie CraftCMS, Statamic und WordPress durchgehen und die wichtigsten Schutzmaßnahmen aufzeigen.

Schutz von Laravel-Anwendungen

Laravel ist ein modernes PHP-Framework, das aufgrund seiner Flexibilität und umfassenden Features weit verbreitet ist. Da Laravel häufig in Webanwendungen mit serverseitigen Anfragen verwendet wird, ist es wichtig, geeignete Schutzmechanismen gegen SSRF zu implementieren.

1. Eingabevalidierung

Laravel bietet von Haus aus starke Validierungsfunktionen. Um SSRF zu verhindern, sollten externe URLs immer sorgfältig validiert werden. Die Validierung der URL kann über die filter_var()-Funktion oder Laravel's eigene Validierungsregeln erfolgen:

$request->validate([
    'url' => ['required', 'url', 'regex:/^https?:\/\/(www\.)?trusted-domain\.com/']
]);

2. Whitelisting von Domains

Stellen Sie sicher, dass externe Anfragen nur an vertrauenswürdige Domains gesendet werden, indem Sie Whitelisting verwenden. In Laravel können Sie dies leicht mit einer benutzerdefinierten Middleware implementieren:

if (!in_array(parse_url($url, PHP_URL_HOST), ['trusted-domain.com', 'api.trusted-domain.com'])) {
    abort(403, 'Unauthorized action.');
}

3. Verwendung von Guzzle mit Beschränkungen

Wenn Laravel's Guzzle HTTP-Client verwendet wird, um externe Anfragen zu senden, sollten Timeouts und Redirect-Handling eingeschränkt werden, um SSRF zu erschweren:

$response = Http::timeout(5)->withoutRedirecting()->get($url);

4. Netzwerksegmentierung

Kritische Dienste und interne Ressourcen sollten in separaten Netzwerken betrieben werden, die nicht direkt von der Webanwendung aus zugänglich sind. Dies kann über Firewalls und Sicherheitsgruppen in der Infrastruktur sichergestellt werden.

Schutz von Node.js-Systemen

Node.js ist ein weiteres häufig verwendetes Framework für Webanwendungen, das durch seine asynchrone Natur besonders leistungsfähig ist. SSRF kann jedoch auch hier zu erheblichen Problemen führen, weshalb Schutzmaßnahmen unerlässlich sind.

1. Einschränkung von HTTP-Requests mit Axios

In Node.js-Anwendungen wird häufig Axios für HTTP-Anfragen verwendet. Ähnlich wie in Laravel sollten Sie sicherstellen, dass externe URLs validiert und auf vertrauenswürdige Domains beschränkt werden:

const allowedHosts = ['trusted-domain.com', 'api.trusted-domain.com'];

const hostname = new URL(url).hostname;

if (!allowedHosts.includes(hostname)) {
  throw new Error('Unauthorized request');
}

axios.get(url)
  .then(response => console.log(response.data))
  .catch(error => console.log(error));

2. Verwendung von Request Libraries mit Vorsicht

Node.js-Anwendungen verwenden oft Libraries wie http oder https für Anfragen. Stellen Sie sicher, dass Anfragen keine Umleitungen (Redirects) zulassen und legen Sie Limits für Timeouts fest:

const options = {
  timeout: 5000,
  maxRedirects: 0
};

https.get(url, options, (res) => {
  // Handle response
});

3. Rate Limiting und Timeouts

Zusätzlich zur URL-Validierung sollte die Anzahl der Anfragen und die Dauer einer Verbindung begrenzt werden, um SSRF zu erschweren. Dies kann mithilfe von Libraries wie express-rate-limit erreicht werden:

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 Minuten
  max: 100 // max. 100 Anfragen pro IP in 15 Minuten
});

app.use(limiter);

Schutz von CMS-Systemen wie CraftCMS, Statamic und WordPress

Viele Content-Management-Systeme (CMS) wie CraftCMS, Statamic und WordPress sind besonders anfällig für SSRF, da sie oft externe API-Anfragen verarbeiten. Hier sind spezifische Schutzmaßnahmen für diese Systeme:

1. CraftCMS

CraftCMS unterstützt durch seine Architektur viele Sicherheitsfunktionen von Haus aus. Trotzdem sollten Entwickler sicherstellen, dass benutzerdefinierte Module und Plugins sichere Anfragen verwenden:

  • Verwenden Sie Craft's interne Funktionen für HTTP-Anfragen, da diese bereits Sicherheitsüberprüfungen enthalten.
  • Vermeiden Sie benutzerdefinierte HTTP-Anfragen, die unvalidierte Benutzereingaben verwenden, oder implementieren Sie strikte Eingabevalidierung.

2. Statamic

Da Statamic auf dem Laravel-Framework basiert, gelten hier viele der gleichen Schutzmaßnahmen wie für Laravel-Anwendungen. Nutzen Sie die in Laravel verfügbaren Sicherheitsfeatures:

  • Verwenden Sie Laravel's Validierung und Guzzle für sichere Anfragen.
  • Schränken Sie externe Anfragen auf vertrauenswürdige Domains ein und implementieren Sie eine Netzwerksegmentierung für interne Ressourcen.

3. WordPress

WordPress ist eines der am weitesten verbreiteten CMS und daher oft Ziel von SSRF-Angriffen. Es gibt jedoch zahlreiche Maßnahmen, um WordPress-Installationen zu schützen:

  • Validierung von URLs: Plugins, die Anfragen an externe Dienste senden, sollten immer sichere URL-Validierung verwenden. WordPress bietet die Funktion wp_http_validate_url() zur URL-Validierung:

    $url = $_POST['url'];
    
    if (!wp_http_validate_url($url)) {
        wp_die('Ungültige URL');
    }
    
  • Firewall und WAFs: Web Application Firewalls (WAFs) wie Cloudflare oder Sucuri bieten Schutzschichten, die verdächtige Anfragen blockieren können.

  • Vermeidung von Plugins aus unsicheren Quellen: Vermeiden Sie unsichere Plugins, die nicht von vertrauenswürdigen Entwicklern stammen oder deren Sicherheitspraktiken unklar sind.

Allgemeine Schutzmaßnahmen für alle Systeme

1. Verwendung von Content-Security-Policies (CSP)

Content-Security-Policies bieten eine zusätzliche Sicherheitsschicht, um SSRF-Angriffe zu verhindern, indem sie festlegen, welche externen Ressourcen eine Anwendung laden darf.

2. Logging und Monitoring

Durch effektives Monitoring und detaillierte Logs können verdächtige Anfragen frühzeitig erkannt und blockiert werden. Integrieren Sie Sicherheitswarnungen für SSRF-Muster in Ihre Monitoring-Tools.

3. Verwendung einer Web Application Firewall (WAF)

Wie bereits erwähnt, bieten WAFs wie ModSecurity und Cloudflare spezifische Schutzregeln gegen SSRF-Angriffe. Diese Regeln erkennen verdächtige Anfragen und blockieren sie automatisch.

Sicherung Ihrer digitalen Präsenz mit unserer Agentur

Warum Sie uns wählen sollten

Bei mindtwo haben wir uns auf die Entwicklung sicherer, skalierbarer Webanwendungen spezialisiert. Unsere Expertise umfasst die strategische Konzeption, UX/UI Design, Entwicklung und Vermarktung, sowie den laufenden technischen Support und die Weiterentwicklung Ihrer Webanwendungen.

Maßgeschneiderte Sicherheitslösungen

Wir bieten maßgeschneiderte Sicherheitslösungen, die speziell auf Ihre Bedürfnisse zugeschnitten sind. Unser Team von Experten führt gründliche Sicherheitsanalysen durch und implementiert robuste Schutzmaßnahmen gegen SSRF und andere Bedrohungen.

Starten Sie Ihr Projekt mit uns

Sind Sie bereit, Ihre digitale Präsenz auf das nächste Level zu heben? Stellen Sie eine Projektanfrage und lassen Sie uns gemeinsam sicherstellen, dass Ihre Webanwendungen nicht nur leistungsfähig, sondern auch sicher sind.

Können wir weiterhelfen?

Sie haben ein spannendes Projekt und möchten mit uns zusammenarbeiten? Kontaktieren Sie uns jetzt!

Kostenloses Erstgespräch

Zurück zum Lexikon

Erstgespräch vereinbaren

Vereinbaren Sie einen unverbindlichen und kostenlosen Beratungstermin und stellen Sie uns Ihr Projekt vor.

mindtwo Management