HTML5 et attaques XSS [Content Security Policy (CSP)]

Dans les nouveautés développés dans le HTML5, une fonctionnalité plutôt sympa contre les XSS, le Content Security Policy (CSP).
Celle-ci consiste à n’autoriser que les scripts provenants de sources que vous aurez déclarées (liste blanche).

Je ne vais pas expliquer ici ce que sont les attaques XSS, il y a pas mal de pages sur Google qui l’expliquent.
Il faut simplement retenir que le but de ces attaques utilisent des vulnérabilités sur des pages afin de faire executer du code par le navigateur.
Ceci permet en envoyant par exemple une URL à un visiteur, URL avec une adresse reconnue, de faire executer du code sur le navigateur de ce visiteur.

Voici ce que cela peux donner sur le formulaire suivant avec de simple GET sans traitement sur les paramètres du formulaires  :

XSS_Content-Security-Policy

 

XSS_Content-Security-Policy_exemple

On peux alors envoyer un script qui va afficher une alerte sur le navigateur :

XSS_Content-Security-Policy2

ou charger des éléments extérieurs à la page – Exemple ici une image.
Ceci permet donc d’executer du code extérieur à la page, comme celui-ci est executé par le navigateur, on peux donc potentiellement avoir accès à ses données, comme les cookies ou les données saisies dans le formulaire. XSS_Content-Security-Policy3
Comme expliqué dans l’introduction, Content Security Policy permet en autre d’interdire les scripts extérieures et donc la fuite de données.
Ci-dessous un .htaccess qui interdit les scripts autres que malekal.com :

# Don’t allow any pages to be framed by my site or any others
# Defends against CSRF. Current only support by Firefox 4 but the
# other browser will add support soon.
Header set X-Frame-Options DENY# Only allow JavaScript from the same domain to be run.
# Also, don’t allow inline JavaScript to run.
Header set X-Content-Security-Policy « allow ‘self’; script-src *malekal.com report-uri /report_XSS; »
Header set X-Webkit-CSP: « default-src ‘self’ script-src ‘*malekal.com’; »# Turns on IE 8 XSS prevention tools
Header set X-XSS-Protection « 1; mode=block »

# Don’t send out the Server header. This way no one knows what
# version of Apache and PHP I am using and try to exploit it.
Header unset Server

Lorsque l’on se connecte à la page, on constate dans le header de la réponse du serveur, les éléments X-CONTENT-SECURITY-POLICY et la configuration.
En testant, effectivement l’image injectée ne se charge plus.

XSS_Content-Security-Policy4

Notez que dans le cas de Google Chrome, ce dernier implémente déjà des protections XSS.
Pour les désactiver, vous devez lancer Chrome avec les paramètres suivants : chrome.exe –args –disable-xss-auditor

La page suivante décrit assez bien les possibilités de cette fonction : http://www.html5rocks.com/en/tutorials/security/content-security-policy/?redirect_from_locale=de
Notamment, il est possible dans le cas d’une attaque XSS, de faire envoyer par le navigateur le contenu au serveur pour y être stocké.

Vous trouverez les compatibilités selon les versions des navigateurs sur la page :  http://caniuse.com/contentsecuritypolicyXSS_Content-Security-Policy5

Une fonctionnalité assez sympa qui devrait permettre de bien limiter la casse pour ces attaques !

Merci à @matparisot pour l’info!

Comment lire d'autres tutoriels de malekal.com ?

Si le site vous a aidé, svp, débloquez les bloqueurs de publicités, n'hésitez pas non plus à partager l'article ou le site sur les réseaux sociaux.

Pour pouvoir lire plus d'articles et tutoriels, utilisez le menu en haut du site. Plein d'articles et tutos utiles vous attendent !

Besoin d'aide ?

Posez votre question ou soumettez votre problème sur le forum malekal.com pour obtenir une aide efficace : Aller sur le forum malekal.com
(Visited 189 times, 1 visits today)

3 thoughts on “HTML5 et attaques XSS [Content Security Policy (CSP)]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *