Server‑Side Request Forgery (SSRF) ist eine Schwachstelle, die es einem Angreifer ermöglicht, Netzwerk-Anfragen an beliebige Ziele zu stellen. Bei SSRF stammen diese Anfragen aus einem Server selbst, der normalerweise einen breiteren Zugriff hat als ein externer Client.
Dies kann es einem Angreifer ermöglichen, auf sensible Ressourcen zuzugreifen oder andere unbefugte Aktionen durchzuführen.
Angenommen, Ihre Anwendung verfügt über einen Endpunkt, der Bilder von einer angegebenen URL abruft:
GET /fetch-image?url=https://example.com/image.png
Der Server hat Zugang zum Intranet des Unternehmens. Wenn der Server den URL-Parameter, der ihm übergeben wird, nicht validiert, kann der Client sensible Daten extrahieren, indem er Intranet-URLs an die API übergibt:
fetch("https://example.org/fetch-image?url=http://localhost:443/admin/org.png");
Obwohl der Client nicht direkt auf http://localhost:443/ zugreifen konnte, kann der Server dies, und der Server leitet die Antwort an den Client weiter. Der Client muss keine HTTP-Anfragen stellen: Er könnte in der Lage sein, das file-Protokoll zu verwenden:
fetch("https://example.org/fetch-image?url=file:///etc/passwd");
In diesen Fällen könnte der Angreifer Zugang zu sensiblen Daten erhalten. Manchmal erhält der Angreifer nicht den Antwortkörper, aber in diesem Fall kann es dennoch zu Problemen kommen:
Durch das Erzwingen vieler Anfragen durch den Server kann ein Angreifer einen Denial of Service (DoS)-Angriff ausführen. Durch Untersuchen des vom Server zurückgegebenen Statuscodes oder der Zeit, die für die Ausführung von Anfragen benötigt wird, kann der Angreifer sensible Informationen über das Ziel ableiten. Angreifer können Weiterleitungen oder Weiterleitungsketten verwenden, um die Validierung zu umgehen. Zum Beispiel könnten sie eine Domain wie https://evilexample.org/redirect besitzen, und der gesamte Host führt lediglich eine Weiterleitung zu http://localhost:443/ oder anderen (internen) URLs durch, was potenziell die Eingabevalidierung umgeht.
fetch("https://example.org/fetch-image?url=https://evilexample.org/redirect");