Audit Sécurité Rapide

Client fictif · www.exemple.be

Exemple réel anonymisé : le nom du client, le domaine, les dates et les versions ont été modifiés.

40/100
Niveau D
8 risque(s) prioritaire(s) identifié(s)

Le site www.exemple.be obtient 40/100. Le point principal est son moteur Drupal 10, que le diagnostic associe à des avis de sécurité publiés. La version exacte n'a pas pu être confirmée et doit être vérifiée en priorité. Les autres constats relèvent du durcissement de configuration (en-têtes de sécurité, certificat, e-mail). Ils se corrigent rapidement et sans refonte.

Reconnaissance

CMSDrupal 10 : 44 avis de sécurité connus
Serveur webnginx/1.24.0
PHPPHP 8.2.20 détecté

Risques prioritaires

1

Cœur Drupal potentiellement non à jour

Critique
Constat
L'en-tête X-Generator annonce « Drupal 10 », ce qui correspond à 44 avis de sécurité connus (dont DRUPAL-CORE-2024-001 à 008 et DRUPAL-CORE-2025-001/002). La version mineure exacte n'est pas exposée, donc certains avis peuvent déjà être corrigés.
Impact
Si le site tourne sur une version vulnérable, un attaquant peut exploiter des failles publiques et documentées. Selon l'avis concerné, cela va de la fuite d'informations à la compromission de contenus ou de comptes.
Correctif
1) Identifier la version réelle avec `drush status` et lister les failles applicables avec `composer audit` et `drush pm:security`. 2) Sauvegarder la base et les fichiers, puis mettre à jour sur une préproduction avec `composer update "drupal/core-*" --with-all-dependencies`, suivi de `drush updatedb -y` et `drush cache:rebuild`. 3) Mettre à jour aussi les modules contrib signalés. 4) Déployer en production et vérifier la page Rapport d'état. 5) Viser la dernière version mineure 10.x encore supportée et planifier la migration vers Drupal 11. → Protection & Mises à jour
2

HSTS absent

Moyen
Constat
Le site ne renvoie pas d'en-tête Strict-Transport-Security.
Impact
Un visiteur sur un réseau non fiable (Wi-Fi public, par exemple) peut être intercepté lors d'une première connexion en HTTP, avant la redirection vers HTTPS.
Correctif
Dans le bloc server HTTPS de Nginx, ajouter `add_header Strict-Transport-Security "max-age=31536000" always;` puis recharger avec `nginx -t && systemctl reload nginx`. Avant d'ajouter `includeSubDomains`, vérifier que tous les sous-domaines de exemple.be sont servis en HTTPS. N'envisager le preload qu'ensuite. → Protection & Mises à jour
3

Certificat TLS proche de l'expiration

Faible
Constat
Le certificat TLS expire dans 16 jours.
Impact
Sans renouvellement, les navigateurs afficheront une alerte de sécurité bloquante et le site deviendra pratiquement inaccessible au public. Avec Let's Encrypt, le renouvellement automatique intervient normalement à 30 jours de l'échéance : il est donc peut-être en échec.
Correctif
Vérifier le mécanisme de renouvellement, par exemple avec `certbot renew --dry-run` et `systemctl list-timers | grep certbot`, ou auprès du fournisseur du certificat. Corriger l'erreur éventuelle, renouveler maintenant et ajouter une supervision d'expiration avec une alerte à J-21. → Protection & Mises à jour
4

DMARC en mode observation

Faible
Constat
L'enregistrement DMARC est en `p=none; sp=none` : aucune action n'est demandée aux serveurs destinataires en cas d'échec d'authentification.
Impact
Des tiers peuvent envoyer des e-mails frauduleux au nom de @exemple.be (hameçonnage ou fausses factures, par exemple) sans qu'ils soient filtrés. Cela nuit à la réputation de la marque.
Correctif
1) Analyser les rapports agrégés (rua) déjà collectés. 2) Vérifier que toutes les sources d'envoi légitimes (outil d'e-mailing, messagerie interne, outils tiers) sont alignées SPF/DKIM. 3) Passer à `p=quarantine; pct=25`, puis augmenter progressivement jusqu'à `pct=100`. 4) Terminer par `p=reject`, en faisant évoluer `sp` de la même manière.
5

Fichiers d'installation accessibles

Faible
Constat
Les fichiers /README.md, /core/INSTALL.txt, /core/UPDATE.txt, /core/COPYRIGHT.txt et /core/MAINTAINERS.txt répondent en 200.
Impact
Ces fichiers ne présentent pas de risque direct, mais ils confirment la technologie utilisée et peuvent aider à affiner la version de Drupal, ce qui facilite la préparation d'une attaque ciblée.
Correctif
Dans Nginx, ajouter `location = /README.md { return 404; }` et `location ~* ^/core/[^/]+[.]txt$ { return 404; }`, en veillant à ne pas bloquer /robots.txt. Une alternative est de les exclure du déploiement via la configuration `drupal-scaffold` / le script de build. → Protection & Mises à jour
6

Referrer-Policy absente

Faible
Constat
Le site ne définit pas d'en-tête Referrer-Policy.
Impact
Les URL complètes consultées (y compris les paramètres éventuels) peuvent être transmises aux sites tiers vers lesquels pointent les liens.
Correctif
Ajouter dans Nginx `add_header Referrer-Policy "strict-origin-when-cross-origin" always;`. Une autre option est de gérer cet en-tête avec les autres en-têtes de sécurité via le module Drupal Security Kit (seckit). → Protection & Mises à jour
7

Divulgation de la stack technique

Info
Constat
Les en-têtes `Server: nginx/1.24.0`, `X-Powered-By: PHP/8.2.20`, `X-Generator: Drupal 10` et `X-Drupal-Cache: HIT` exposent les technologies et leurs versions.
Impact
Cela ne crée pas de faille en soi, mais permet à un attaquant ou à un robot de cibler automatiquement les vulnérabilités correspondant à ces versions.
Correctif
Dans Nginx, ajouter `server_tokens off;`. Dans le php.ini de PHP-FPM, mettre `expose_php = Off`, puis redémarrer php-fpm. Dans le bloc PHP de Nginx, ajouter `fastcgi_hide_header X-Generator;`, `fastcgi_hide_header X-Drupal-Cache;` et `fastcgi_hide_header X-Drupal-Dynamic-Cache;`. Si un reverse proxy ou un cache est en frontal, utiliser `proxy_hide_header` à la place. Masquer ces en-têtes ne dispense pas des mises à jour. → Protection & Mises à jour
8

DNSSEC non activé

Info
Constat
Aucune signature DNSSEC n'a été détectée sur le domaine.
Impact
Le domaine est moins protégé contre la falsification de réponses DNS, qui pourrait rediriger des visiteurs ou des e-mails vers un serveur illégitime. Ce scénario reste peu probable.
Correctif
Activer DNSSEC chez l'hébergeur DNS ou le registrar (.be pris en charge par DNS Belgium), publier l'enregistrement DS, puis vérifier la chaîne de confiance avec un outil comme DNSViz.

Éléments relevés

Tout ce que le scan a observé, y compris les éléments simplement informatifs.

Critique Drupal 10 : 44 avis de sécurité connus
en-tête X-Generator : Drupal 10 (https://www.drupal.org) — OSV: DRUPAL-CORE-2024-001, DRUPAL-CORE-2024-003, DRUPAL-CORE-2024-004, DRUPAL-CORE-2024-006, DRUPAL-CORE-2024-007, DRUPAL-CORE-2024-008, DRUPAL-CORE-2025-001, DRUPAL-CORE-2025-002
Moyen HSTS absent
Faible Fichiers texte d'installation servis (fuite d'information)
200 sur /README.md, /core/INSTALL.txt, /core/UPDATE.txt, /core/COPYRIGHT.txt, /core/MAINTAINERS.txt
Faible Referrer-Policy absente
Faible Certificat TLS expire dans 16 jour(s)
expiration dans 16 jours
Faible DMARC en mode observation (p=none)
v=DMARC1; p=none; sp=none; rua=mailto:dmarc@exemple.be; ruf=mailto:dmarc@exemple.be; rf=afrf; pct=100; ri=86400
Info Serveur web : nginx/1.24.0
en-tête Server : nginx/1.24.0
Info PHP 8.2.20 détecté
en-tête X-Powered-By/Server : PHP 8.2.20
Info En-tête « x-powered-by » divulgue la stack
x-powered-by: PHP/8.2.20
Info En-tête « x-generator » divulgue la stack
x-generator: Drupal 10 (https://www.drupal.org)
Info En-tête « server » divulgue la stack
server: nginx/1.24.0
Info En-tête « x-drupal-cache » divulgue la stack
x-drupal-cache: HIT
Info DNSSEC non détecté