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 :

{
email: 'pwned.by@attacker.io',
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": "pwned.by@attacker.io", "grants": "all", "extra": "'
value='"}'>
</form>

2. Cela va alors envoyer le "body" suivant :

{"email": "pwned.by@attacker.io", "grants": "all", "extra": "="}

3. L’API va alors "parser" le contenu suivant :

{
email: 'pwned.by@attacker.io',
grants: 'all',
extrat: '='
}

La vĂ©rification du media type des requĂȘtes doit donc ĂȘtre rigoureuse.