Links

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.
document.querySelector('form').submit()
Dans ce cas, la plupart des frameworks (Ex. : expressjs) récupèrent un objet :
{
grants: 'all'
}
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 :
<form
method="POST"
action="https://app.vulnerable.com/api/products/0/admins"
enctype="text/plain">
<input
name='{"email": "[email protected]", "grants": "all", "extra": "'
value='"}'>
</form>
2. Cela va alors envoyer le "body" suivant :
{"email": "[email protected]", "grants": "all", "extra": "="}
3. L’API va alors "parser" le contenu suivant :
{
grants: 'all',
extrat: '='
}
La vérification du media type des requêtes doit donc être rigoureuse.
Dernière mise à jour 3yr ago