Table des matières
HTTP - Methods
Description
Les méthodes HTTP sont des verbes utilisés dans les requêtes HTTP pour indiquer l'action à effectuer sur une ressource. Les méthodes HTTP les plus courantes sont GET, POST, PUT et DELETE. Chacune de ces méthodes est utilisée dans différentes situations et peut être utilisée selon les besoins de l'application.
D'après la RFC 9110 :
- GET sert à obtenir une représentation de la ressource spécifiée. Par exemple, on récupérera des informations sur un utilisateur avec un GET (GET /api/v1/users/1234).
- POST sert à soumettre une nouvelle entité à la ressource spécifiée. Par exemple, on enregistrera un nouvel utilisateur sur une plateforme avec un formulaire soumis via un POST (POST /api/v1/users).
- PUT sert à remplacer les données de la ressource spécifiée avec les données de la requête. Par exemple, on mettra à jour les informations d'un utilisateur avec la méthode PUT (PUT /api/v1/users/1234)
- DELETE sert à supprimer la ressource spécifiée. Par exemple, on supprimera un utilisateur avec la méthode DELETE (DELETE /api/v1/users/1234)
Exemple d'une requête de type GET :
GET /example/page.html HTTP/1.1 <- Position de la méthode de type GET Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Cookie: sessionID=12345; username=john.doe
Réponse du serveur :
HTTP/1.1 200 OK Date: Thu, 31 Mar 2023 10:15:00 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 3456 Connection: keep-alive Server: Apache/2.4.41 (Ubuntu) X-Powered-By: PHP/7.4.3 <!DOCTYPE html> <html> <head> <title>Example Page</title> </head> <body> <h1>Welcome to the Example Page</h1> <p>This is an example page.</p> </body> </html>
On notera que toutes les APIs et toutes les applications ne respectent pas nécessairement la RFC.
Les services web exposent parfois involontairement des ressources qui ne devraient pas être accessibles, mais qui le sont via la modification de la méthode HTTP sur l'appel vers la ressource.
Prérequis d'exploitation
Pour exploiter cette vulnérabilité, il est nécessaire d’avoir accès à une application qui ne filtre pas correctement les méthodes HTTP autorisées.
Connaissances nécessaires
- Connaissance de base du fonctionnement du protocole HTTP ;
- Maîtrise de la notion de méthode HTTP.
Outils nécessaires
- Outils de modification et/ou d’interception de requêtes (Burp, Curl).
Flux d'exécution
Explorer
Naviguer sur l’application pour récupérer les endpoints et/ou pages de l’application pour en déterminer les méthodes HTTP utilisées pour l'accès, la modification, la création et la suppression des données.
Expérimenter
Pour chacune des requêtes identifiées, envoyer la même requête, mais en utilisant une méthode différente. L'objectif ici est de potentiellement remarquer un comportement particulier de l'application.
Exploiter
Conséquences potentielles
Une exploitation réussie de ce type de vulnérabilité peut permettre :
- Le contournement de certains mécanismes de contrôle d'accès ;
- L'accès à des ressources sensibles et/ou à un espace privé de l'application.
Contre-mesures
Les contre-mesures suivantes peuvent être mises en œuvre :
- Configurer le serveur web pour n'autoriser que les méthodes HTTP que vous souhaitez utiliser. Par exemple, autoriser uniquement les méthodes GET et POST et bloquer les autres méthodes ;
- Utiliser des contrôles d'accès basés sur les rôles et les autorisations pour limiter l'accès aux différentes ressources et fonctionnalités de votre application ;
- Utiliser un pare-feu applicatif pour bloquer les requêtes HTTP non autorisées ou suspectes.
Comment cela fonctionne
Les scénarios suivants peuvent être joués via l’exploitation de cette vulnérabilité :
- L'utilisation de la méthode DELETE dans une requête HTTP pour supprimer une ressource sur le serveur ;
- L'utilisation de la méthode PUT dans une requête HTTP pour mettre à jour une ressource sur le serveur sans avoir l'autorisation adéquate.
Exemple 1
Voici une configuration Apache potentiellement vulnérable aux modifications de méthodes HTTP :
<Directory /var/www/html> AllowOverride None Require all granted </Directory>
Cette configuration permet aux utilisateurs de l'application de faire des requêtes HTTP avec n'importe quelle méthode. Par conséquent, quelqu'un pourrait essayer d'envoyer une requête HTTP avec une méthode telle que DELETE ou PUT pour essayer de supprimer ou de modifier des données sur le serveur serveur.
Voici une nouvelle version de la configuration Apache :
<Directory /var/www/html> AllowOverride None <Limit GET POST> Require all granted </Limit> </Directory>
Cette configuration permet uniquement les méthodes GET et POST, ce qui signifie que toutes les autres méthodes seront bloquées. Cette limitation peut aider à protéger un serveur contre les modifications non autorisées via les méthodes HTTP.
Exemple 2
Un attaquant identifie une ressource protégée par le cookie de session sur le site “vulnerable.org”. La ressource retourne les informations d'un utilisateur si celui-ci est authentifié via l'accès en GET à /api/v1/user/{userid}/info L'attaquant a le userid 1234, mais souhaite obtenir les infos de l'utilisateur ayant l'id 5678 :
$ curl -X GET vulnerable.org/api/v1//user/5678/info -i > < HTTP/2 401 > [...] > Forbidden
En modifiant la méthode HTTP utilisée, l'attaquant accède aux données d'un autre utilisateur :
$ curl -X POST vulnerable.org/api/v1//user/5678/info -i > < HTTP/2 200 > [...] > username: victim > [...]
CWEs
-
- The server contains a protection mechanism that assumes that any URI that is accessed using HTTP GET will not cause a state change to the associated resource. This might allow attackers to bypass intended access restrictions and conduct resource modification and deletion attacks, since some applications allow GET to modify state.
References
URL :