Comment on page
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 type
application/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 :
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 :
La vérification du media type des requêtes doit donc être rigoureuse.
Dernière mise à jour 4yr ago