â
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 :
<formmethod="POST"action="https://app.vulnerable.com/api/products/0/admins"enctype="text/plain"><inputname='{"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.