Lors d'un pentestage régulier de mon site, j'ai découvert que je pouvais fermer les guillemets doubles dans une balise de lien canonique et entrer un onerror attribut avec un simple javascript alert (1).
Il est visible dans le code source mais javascript ne s'est pas exécuté.
J'ai également essayé avec onload événement mais même résultat.
Existe-t-il un moyen pour un attaquant d'utiliser différentes charges utiles pour exécuter javascript?
Vous pouvez tilisez la même astuce que pour les entrées hidden
:
<link rel="canonical" accesskey="X" onclick="alert(1)" />
Sous Linux, utilisez ALT + SHIFT + X pour déclencher la charge utile. À mon humble avis, il suffit de signaler le problème et de le résoudre, mais cela nécessite une interaction improbable de l'utilisateur.
En dehors de cela, je ne vois aucun moyen d'exploiter cela dans un navigateur moderne sans code supplémentaire.
Alors que la balise link
prend en charge l'attribut onload
, elle ne se déclenche que lorsque quelque chose est correctement chargé, par exemple:
<link rel="stylesheet" href="http://localhost/test.css" onload="alert(1)">
Si votre injection était <link href="[user input]" rel="canonical">
, Alors vous pourriez l'exploiter via http://somedomain/somecsssfile.css" rel="stylesheet" onload="alert(1)
.
La spécification WHATWG définit que l'attribut first doit être utilisé, il est donc peu probable qu'un navigateur utilise le second, donc cela ne fonctionnera pas pour votre cas.
J'ai essayé tous les autres attributs d'événement, et aucun déclencheur sur un chargement de page normal.
Ce article de blog indique que cela serait exploitable sous IE7 et IE8 en injectant un attribut style
qui utilise ensuite une expression pour exécuter JavaScript.
S'il y a du code JavaScript supplémentaire qui traite les éléments de manière non sécurisée, cela pourrait également devenir exploitable (voir ici pour un exemple intéressant).