web-dev-qa-db-fra.com

XSS en lien canonique est-il possible?

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).

enter image description here

Il est visible dans le code source mais javascript ne s'est pas exécuté.

enter image description here

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?

13
Rahul

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).

12
tim