Vulnérabilités des headers HTTP
Vulnérabilités de sécurité liées aux headers HTTP
Notions théoriques
Les headers HTTP sont des métadonnées envoyées avec chaque requête et réponse HTTP. Ils contiennent des informations comme le type de contenu, les paramètres de cache, l’authentification et bien plus encore. Cependant, une mauvaise configuration de ces headers peut entraîner des vulnérabilités de sécurité exploitables par des attaquants.
Headers HTTP et sécurité
Certains headers HTTP sont essentiels pour la sécurité des applications web. Voici quelques headers à bien configurer :
- Strict-Transport-Security (HSTS) : Oblige le navigateur à utiliser HTTPS, empêchant les attaques de type Man-in-the-Middle.
- X-Frame-Options : Empêche l'affichage du site dans une iframe pour éviter les attaques de Clickjacking.
- X-Content-Type-Options : Empêche le navigateur d’interpréter un fichier différemment de son type déclaré, réduisant les risques d’attaques MIME sniffing.
- Content-Security-Policy (CSP) : Définit quelles sources de contenu sont autorisées, bloquant les attaques XSS (Cross-Site Scripting).
- Referrer-Policy : Contrôle quelles informations de l’URL source sont envoyées lors d’une navigation, limitant les fuites d’informations sensibles.
Vulnérabilités liées aux headers HTTP
Une mauvaise configuration ou l'absence de ces headers peut exposer un site à des attaques :
- Sans HSTS, un attaquant peut intercepter des requêtes HTTP et injecter du contenu malveillant.
- Sans X-Frame-Options, un site peut être intégré dans une iframe malveillante pour tromper l’utilisateur et voler ses identifiants.
- Sans CSP, un attaquant peut injecter du JavaScript malveillant, modifiant le comportement du site.
- Sans X-Content-Type-Options, un fichier peut être interprété comme un script malveillant, exécuté à l’insu de l’utilisateur.
Exemple pratique
Vérifier et ajouter des headers de sécurité sur un serveur NGINX
Nous allons voir comment vérifier les headers HTTP d’un site et les configurer sur un serveur NGINX.
Étape 1 : Vérifier les headers HTTP d’un site web
Sur un terminal Linux ou Windows (PowerShell), tapez :
curl -I https://example.com
Cela affichera les headers HTTP de la réponse. Si des headers de sécurité comme X-Frame-Options ou Content-Security-Policy sont absents, le site est potentiellement vulnérable.
Étape 2 : Ajouter des headers de sécurité dans NGINX
Modifiez la configuration de NGINX :
server {
listen 80;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
add_header Referrer-Policy "no-referrer";
location / {
root /var/www/html;
index index.html;
}
}
Étape 3 : Redémarrer NGINX
sudo systemctl restart nginx
Étape 4 : Vérifier que les headers sont bien appliqués
curl -I http://example.com
Les headers de sécurité devraient maintenant apparaître dans la réponse.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif
Configurer un serveur NGINX sous Debian pour ajouter des headers de sécurité et tester leur efficacité depuis une machine attaquante sous Windows.