C.S.R.F. & Media Type
L’une des erreurs classiques est d’accepter des media types autres que application/*json (header Content-Type).
Sans aucune autre erreur de configuration C.O.R.S., l’acceptation du media typeapplication/x-www-form-urlencoded permet à l’attaquant de créer un formulaire et de déclencher une simple requête POST.
1
document.querySelector('form').submit()
Copied!
Dans ce cas, la plupart des frameworks (Ex. : expressjs) récupèrent un objet :
1
{
2
3
grants: 'all'
4
}
Copied!
Il ne faut donc activer que le parser JSON.
… mais supposons qu’il soit activé sur tous les "media types" et plus particulièrement text/plain pour simplifier la vie des développeurs "client-side".
1. L’attaquant n’a plus qu’à adapter légèrement le formulaire précédent :
1
<form
2
method="POST"
3
action="https://app.vulnerable.com/api/products/0/admins"
4
enctype="text/plain">
5
<input
6
name='{"email": "[email protected]", "grants": "all", "extra": "'
7
value='"}'>
8
</form>
Copied!
2. Cela va alors envoyer le "body" suivant :
1
{"email": "[email protected]", "grants": "all", "extra": "="}
Copied!
3. L’API va alors "parser" le contenu suivant :
1
{
2
3
grants: 'all',
4
extrat: '='
5
}
Copied!
La vérification du media type des requêtes doit donc être rigoureuse.
Dernière mise à jour 2yr ago
Copier le lien