🍽️REST

Representational State Transfer

Sites

Basic

Les APIs RESTful ont été conçues pour améliorer de nombreux défaut d'autres APIs plus anciennes telles que les APIs SOAP. Les APIs RESTful fonctionnent notamment entièrement sur le protocole HTTP rendant de ce fait beaucoup plus accessible son utilisations aux utilisateurs finaux. Les APIs RESTful utilisent principalement les méthodes HTTP GET, POST, PUT et DELETE.

Le design de ces APIs dépend de six contraintes:

  1. Une interface uniforme: l'interface de l'API est la même pour ordinateur, mobile et IoT.

  2. Client / Serveur: Les clients sont les visiteurs du site qui font leurs requêtes et le serveur donnent les informations demandées aux clients.

  3. Stateless: Les APIs REST ne stocke pas de données et ne fait référence à aucune transaction passée. Chaque transaction est effectuée à partir de rien, comme si c'était la première fois.

  4. Cachable: La réponse du fournisseur d'API doit indiquer si la réponse est cachable ou non, rendre les APIs REST cachable est un moyens de rendre les interactions plus rapides et moins couteuses en terme de ressources. Cela est principalement mis en place par des en-têtes types "Cache:" et "Miss:"

  5. Architecture en couche: Le client doit pouvoir demander des données à partir d'un endpoint sans connaître l'architecture du serveur sous-jacent.

  6. Code à la demande (optionnel): Permet d'envoyer du code à un client pour execution.

En-têtes intéressantes

Authorization

Il s'agit de l'en-tête utilisée par l'API pour vous identifier, elle fonctionne comme ceci:

Authorization: <type> <token/credentials>

#types:
#    Basic <base64 encoded credentials (username:password)> (facile à bruteforce)
#    Bearer <Token>
#    AWS-HMAC-SHA256 <secret key>

Content-Type

Il s'agit de l'en-tête utilisée pour indiquer le type de données transmises, les types les plus utilisés dans les APIs RESTful sont les types:

  • application/json

  • application/xml

  • application/x-www-form-urlencoded

Vulnérabilités

Classiques

Les API RESTful nécessites de procéder aux mêmes tests que pour d'autres APIs à savoir le Top 10 OWASP et autres vulnérabilités WEB.

🌐pagePentest Web

Checklist

Fuites d'information

IDOR

Exemples:

🎯pageIDOR

Broken user authentication

Exposition de données excessive

Exemple:

GET sur https://target.com/api/users/exemple donne:

}
 "user": {
"id": 1121,
"admin": false,
"username": exemple,
"multifactor": false
}
"sales_assoc": {
 "email": "exemple@target.com",
 "admin": true,
 "username": super_sales_admin,
 "multifactor": false
}

Manque de rate limit / ressources

Bruteforce fonction sensible avec burp suite ou autre et vérifier si les requêtes sont bloqués au bout de 100-200-300 requêtes...

Bypass:

  • Ajout de caractères spéciaux

  • mettre une lettre différente en maj à chaque requête

  • ...

🔓pageBypass

Broken Function Level Authorization

Mass assignment

Exemples:

POST /api/v1/register

}
    "username":"exemple",
    "email":"exemple@target.com"
}


POST /api/v1/register

}
    "username":"exemple",
    "email":"exemple@target.com",
    "admin":"true"
}
POST /api/v1/register

{
"username":"exemple",
"email":"exemple@target.com",
"password":"Password"
}

POST /api/v1/register

{
"username":"exemple",
"email":"exemple@target.com",
"org": "Company",
"password":"Password"
}

/api/v1/register

{
"username":"exemple",
"email":"exemple@target.com",
"password":"Password"
}

POST /api/v1/register

{
"username":"exemple",
"email":"exemple@target.com",
"mfa": "false",
"password":"Password"
}

Security misconfigurations

Fuites d'infos techniques

Générer des erreurs détaillées dans les APIs

  1. Envoyer une chaîne de caractères au lieu d'un nombre (et inversement).

  2. Enlever des paramètres essentiels au fonctionnement de la requête.

  3. Casser la structure JSON (supprimer un '}').

  4. Enlever des headers/cookies nécessaires au fonctionnement de la requête.

  5. Entrer un nombre très grand quand le nombre attendu doit être bas et inversement

  6. Entrer une valeur "null" (null, (null), %00, ou 0x00)

  7. Entrer des caractère spéciaux (!@#$%^&*();':''|,./?>)

  8. Utiliser des langages imprévus (漢, さ, Ж, Ѫ, Ѭ, Ѧ, Ѩ, Ѯ)

pageBrute force / Fuzzing

Exemples:

Headers:
X-Powered-By: Fuite d'info

Erreur verbeuses:
- leak de version
- leak de code source
- leak des techno utilisées
- leak d'IP interne
...
  • Manques de Headers de securité (X-XSS-Protection, X-Iframe-Options...)

  • HTTP méthode TRACE ou autre inutile au fonctionnement de l'API autorisée

  • Identifiants par défauts

  • Pas de HSTS

...

Injections

Exemples:

💉pageInjections

Improper Assets Management

API v1, v2, v3

Business Logic vulnerabilities

Exemples:

🛒pageFonctions d'achat et de facturationpageUpload features

Dernière mise à jour