Offre Durée limitée : -10% sur tout le site* avec le code WELCOME10

CVE-2026-118539 : faille critique Drupal Commerce exploitée, 42 000 boutiques en danger

Publié le 30 octobre 2026 9 min de lecture 7 sections

Ce qui s'est passé le 28 octobre 2026

Le 28 octobre 2026, l'équipe de sécurité de Drupal a publié l'avis SA-CONTRIB-2026-254 pour signaler une faille classée Highly Critical (score de risque 21/25 sur l'échelle Drupal) dans le module Commerce Core, le socle e-commerce de référence du CMS Drupal (source : Drupal.org). Cette publication faisait partie d'une vague de 38 correctifs de sécurité couvrant 21 modules contribués, dont près d'une douzaine classés critiques (source : SecurityWeek).

La vulnérabilité, identifiée sous le numéro CVE-2026-118539, est un contournement de contrôle d'accès (access bypass, CWE-862) qui touche des routes et des champs d'entités insuffisamment protégés dans le module. Plus de 42 000 sites web utilisent Commerce Core pour administrer leur boutique en ligne, ce qui en fait l'un des modules e-commerce les plus déployés parmi les CMS open source.

La faille est exploitée activement : Drupal le confirme dans l'avis sans détailler le mode opératoire exact ni le nombre de boutiques déjà compromises. Pour les administrateurs qui hébergent un site Drupal Commerce sur un serveur VPS Linux ou un serveur dédié, la mise à jour est urgente : un attaquant non authentifié peut exploiter la faille sans condition particulière de configuration.

Versions touchées et versions corrigées

Deux branches de Commerce Core sont concernées. Le tableau ci-dessous résume les versions vulnérables et les correctifs à appliquer sur votre serveur.

BrancheVersions vulnérablesVersion corrigée
Commerce Core 3.x3.0.0 à 3.3.123.3.13
Commerce Core 8.x-2.xToutes les versions avant 2.418.x-2.41

Si votre site Drupal utilise une version de Commerce Core inférieure à ces seuils, il est exposé. Connectez-vous en SSH à votre serveur VPS ou dédié et vérifiez la version installée avec la commande Composer suivante depuis le terminal :

composer show drupal/commerce | grep versions

Avec Drush, la commande équivalente est :

drush pm:list --filter=commerce --fields=name,version --format=table

Sur un serveur administré via un panel comme Plesk, vous pouvez également ouvrir un terminal depuis l'interface web du panel pour exécuter ces commandes sans client SSH séparé.

Nature de la faille : contournement d'accès

CVE-2026-118539 est classée comme un contournement de contrôle d'accès (access bypass, CWE-862 : Missing Authorization). Concrètement, certaines routes HTTP et certains champs d'entités du module Commerce Core ne vérifient pas correctement les permissions de l'utilisateur qui les interroge. Un attaquant non authentifié peut envoyer des requêtes HTTP vers ces routes pour accéder à des données ou modifier des enregistrements auxquels il ne devrait pas avoir accès.

L'avis de sécurité précise que l'exploitation peut avoir un impact financier direct pour le propriétaire de la boutique : manipulation de commandes, modification de données transactionnelles dans les bases de données, exposition potentielle d'informations privées stockées dans la base MySQL ou MariaDB du CMS. L'avis ne mentionne ni exécution de code à distance ni prise de contrôle total du serveur, mais un accès non autorisé aux commandes d'une boutique en ligne reste une compromission grave pour tout site e-commerce.

La faille a été rapportée par Dan Puccetti, Marcus Johansson et Robert Snyder, et ne nécessite aucune authentification pour être exploitée. Toutes les configurations du module sont vulnérables, que le site utilise le mode standard avec panier et formulaire de paiement ou les API découplées.

Procédure de mise à jour

La mise à jour se fait via Composer depuis un terminal connecté en SSH à votre VPS Linux ou votre serveur dédié. Avant toute opération, effectuez un backup complet de votre base de données MySQL (ou PostgreSQL si votre installation Drupal utilise ce moteur) et de vos fichiers.

Pour sauvegarder la base de données avant la mise à jour :

mysqldump -u root -p drupal_commerce > /root/backup-drupal-$(date +%F).sql

Sauvegardez également le répertoire du site et le fichier de config Composer :

sudo tar czf /root/backup-drupal-files-$(date +%F).tar.gz /var/www/drupal

Pour une stratégie de sauvegarde complète avec chiffrement et envoi vers un serveur distant, consultez notre guide chiffrer les sauvegardes d'un serveur Linux.

Appliquez ensuite le correctif. Pour la branche 3.x :

cd /var/www/drupal
composer require drupal/commerce:^3.3.13 --update-with-dependencies
drush updatedb
drush cache:rebuild

Pour la branche 8.x-2.x :

cd /var/www/drupal
composer require drupal/commerce:^2.41 --update-with-dependencies
drush updatedb
drush cache:rebuild

Vérifiez que la version installée correspond bien au correctif :

composer show drupal/commerce | grep versions

Après la mise à jour, redémarrer le serveur web est recommandé pour vider les caches de l'interpréteur PHP :

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx  # ou apache2

Sur une distribution Debian ou Ubuntu, les noms de service peuvent varier selon la version de PHP installée. Adaptez php8.2-fpm à votre version.

Si votre site utilise un processus de déploiement automatisé (CI/CD), mettez à jour le fichier composer.lock dans votre dépôt et déclenchez un déploiement vers le serveur de production. Pour les administrateurs qui gèrent les mises à jour de sécurité automatiquement sur leur VPS, consultez notre guide automatiser les mises à jour de sécurité sur Ubuntu.

Auditer les commandes passées

L'avis Drupal recommande explicitement d'auditer les commandes de votre boutique pour détecter des manipulations survenues avant l'application du correctif. Voici les points à vérifier dans l'interface d'administration (admin) de Drupal Commerce ou directement en base de données :

  • Montants incohérents : commandes dont le total ne correspond pas aux prix catalogue, remises appliquées sans code promotionnel valide, frais de livraison ramenés à zéro.
  • Changements de statut anormaux : commandes passées directement en statut "complétée" ou "expédiée" sans passage par le processus de paiement normal.
  • Adresses de livraison modifiées : vérifiez si des commandes légitimes ont vu leur adresse de destination changée après la validation du paiement.
  • Comptes clients suspects : créations de comptes massives sur une courte période, commandes passées par des comptes sans historique.

Pour identifier les commandes suspectes directement dans la base MySQL, vous pouvez exécuter un script SQL ciblé. Par exemple, pour lister les commandes modifiées récemment dont le statut a changé sans action admin normale :

mysql -u root -p drupal_commerce -e "SELECT order_id, mail, total_price__number, state, changed
FROM commerce_order
WHERE changed > UNIX_TIMESTAMP('2026-10-20')
ORDER BY changed DESC
LIMIT 100;"

Adaptez le nom de la base de données et la date de début selon votre config. Si votre installation utilise PostgreSQL au lieu de MySQL, la syntaxe de la requête diffère légèrement pour la conversion de date.

En complément, examinez les journaux d'accès de votre serveur web (Apache ou Nginx) pour repérer des requêtes HTTP inhabituelles vers les routes de Commerce Core. Sur un VPS Linux, les journaux se trouvent généralement dans /var/log/apache2/access.log ou /var/log/nginx/access.log. Un script grep permet de filtrer les requêtes suspectes :

sudo grep -i "commerce" /var/log/nginx/access.log | grep -v "200\|301\|302" | tail -50

Pour une analyse plus poussée des journaux système, consultez notre guide sur l'analyse des logs avec journalctl.

Environnement serveur pour Drupal Commerce

Le choix de l'hébergement impacte directement la capacité à réagir face à une faille comme CVE-2026-118539. Drupal Commerce est un CMS exigeant en ressources : chaque page produit sollicite PHP, la base de données MySQL (ou PostgreSQL) et le serveur web simultanément.

ComposantMinimum recommandéPourquoi
RAM4 GoPHP-FPM et MySQL consomment de la mémoire à chaque requête ; en dessous, les pics de trafic provoquent des erreurs 502.
Stockage SSD40 GoLa base de données, les fichiers uploadés et les backups locaux occupent de l'espace disque ; un disque SSD réduit la latence des requêtes SQL.
PHP8.1+Commerce Core 3.x requiert PHP 8.1 minimum. Les versions antérieures ne reçoivent plus de correctifs de sécurité.
Base de donnéesMySQL 8.0+ / MariaDB 10.6+Drupal supporte aussi PostgreSQL 14+, mais MySQL reste le moteur le plus testé avec Commerce Core.

Sur un hébergement web mutualisé, l'accès SSH est souvent restreint et les scripts Composer ne peuvent pas toujours s'exécuter librement. Un hébergement mutualisé ne permet généralement pas de redémarrer PHP-FPM, de configurer le firewall du serveur ni d'exécuter sudo. Pour un site e-commerce en production, un serveur VPS ou un serveur dédié offre le contrôle nécessaire : accès root, choix de la distribution (Debian, Ubuntu), possibilité de configurer chaque service (DNS, SMTP pour les emails transactionnels, pare-feu) et liberté d'installer les scripts de maintenance et de backup que le site exige.

Si vous administrez plusieurs sites web Drupal, un panel d'administration comme Plesk simplifie la gestion des noms de domaine, des bases de données MySQL, des certificats TLS et des adresses IP dédiées depuis une interface unique. Pour les sites critiques, l'infogérance ou un serveur dédié avec virtualisation (conteneurs LXC ou machines virtuelles) permet d'isoler chaque site dans son propre environnement virtuel.

Sécuriser une installation Drupal sur un VPS

Au-delà de cette mise à jour ponctuelle, la sécurité d'un site Drupal Commerce hébergé sur un VPS ou un serveur dédié repose sur plusieurs pratiques complémentaires. Un hébergeur fournit l'infrastructure, mais c'est l'admin du serveur qui configure les protections applicatives.

  • Mises à jour régulières : abonnez-vous aux avis de sécurité de Drupal (drupal.org/security) et appliquez les correctifs dès leur publication. Configurez un script cron pour vérifier automatiquement les mises à jour disponibles avec composer outdated drupal/*.
  • Accès SSH sécurisé : désactivez l'authentification par mot de passe et utilisez des clés SSH. Consultez notre guide sécuriser SSH sur VPS Linux pour les étapes détaillées.
  • Firewall et Fail2ban : configurez le pare-feu (UFW ou nftables) pour limiter les ports ouverts au strict nécessaire et protégez les services exposés contre les attaques par force brute. Notre guide sécuriser un VPS Ubuntu avec UFW et Fail2ban détaille la configuration complète.
  • Sauvegardes testées : une sauvegarde récente et vérifiée est la seule garantie de pouvoir restaurer un site compromis dans un état sain. Planifiez un backup quotidien de la base MySQL et des fichiers, avec envoi sur un serveur distant via rsync.
  • Droits fichiers : les répertoires sites/default/files ne doivent pas être exécutables. Les fichiers de configuration (settings.php) doivent être en lecture seule (permissions 444). Utilisez sudo chown www-data:www-data pour que seul le processus du serveur web puisse lire les fichiers sensibles.
  • Restreindre l'accès admin : limitez l'accès à /admin par adresse IP dans la config du serveur web (Nginx ou Apache). Cela empêche tout accès à l'interface d'administration depuis une adresse IP non autorisée.
  • Configurer SMTP : utilisez un relais SMTP authentifié pour les emails transactionnels (confirmations de commande, notifications d'expédition) plutôt que la fonction mail() de PHP, qui finit souvent en spam.
  • DNS et nom de domaine : configurez les enregistrements SPF, DKIM et DMARC pour le nom de domaine de votre boutique. Ces enregistrements DNS protègent contre l'usurpation d'identité dans les emails envoyés aux clients.

Pour un guide complet sur les premiers réglages de sécurité, consultez sécuriser un serveur dédié : premiers réglages.

FAQ

Comment vérifier la version de Commerce Core installée sur mon site Drupal ?

Connectez-vous en SSH à votre VPS ou serveur dédié et exécutez composer show drupal/commerce | grep versions depuis la racine du projet Drupal. Avec Drush, la commande drush pm:list --filter=commerce --fields=name,version --format=table affiche le même résultat. Si la version est inférieure à 3.3.13 (branche 3.x) ou 8.x-2.41 (branche 2.x), votre site est vulnérable.

Un attaquant peut-il exécuter du code sur mon serveur via CVE-2026-118539 ?

L'avis de sécurité SA-CONTRIB-2026-254 ne mentionne pas d'exécution de code à distance. La faille est un contournement de contrôle d'accès (access bypass) qui permet de manipuler des commandes et d'accéder à des données transactionnelles sans autorisation. Cela reste une compromission grave pour une boutique en ligne, mais le risque de prise de contrôle complète du serveur n'est pas établi par cet avis.

Mon site Drupal n'utilise pas Commerce Core. Suis-je concerné ?

Non. CVE-2026-118539 affecte exclusivement le module Commerce Core (drupal/commerce). Si votre site Drupal n'utilise pas ce module pour la vente de produits ou services, cette faille ne vous concerne pas. Vérifiez avec composer show drupal/commerce : si la commande renvoie une erreur, le module n'est pas installé.

Suffit-il de mettre à jour Commerce Core ou faut-il aussi mettre à jour Drupal core ?

La faille se situe dans le module Commerce Core, pas dans Drupal core. Mettre à jour Commerce Core vers la version 3.3.13 ou 8.x-2.41 suffit pour corriger cette vulnérabilité précise. Drupal core doit néanmoins rester à jour indépendamment, car d'autres avis de sécurité peuvent concerner le noyau.

Comment auditer les commandes de ma boutique pour détecter des manipulations ?

Dans l'interface d'administration Drupal, examinez les commandes passées entre la date de première exploitation possible et la date de mise à jour. Cherchez des montants incohérents (totaux ne correspondant pas aux prix catalogue), des remises appliquées sans code promotionnel, des changements de statut anormaux (commandes directement en statut complétée sans paiement) et des modifications d'adresses de livraison après paiement. Vous pouvez aussi vérifier directement dans la base MySQL avec une requête SQL filtrant les commandes modifiées récemment.

La mise à jour Commerce Core nécessite-t-elle une interruption de service ?

En pratique, non. La commande composer require met à jour les fichiers du module, drush updatedb applique les éventuelles migrations de base de données et drush cache:rebuild vide le cache. Ces opérations durent quelques secondes. Si vous souhaitez éviter tout risque, passez le site en mode maintenance le temps de la mise à jour avec drush state:set system.maintenance_mode 1.

Quel type d'hébergement choisir pour un site Drupal Commerce en production ?

Un serveur VPS Linux ou un serveur dédié avec accès root est recommandé. L'hébergement mutualisé limite l'accès SSH, ne permet pas d'exécuter sudo ni de configurer le firewall ou le serveur SMTP. Pour un site e-commerce, il faut au minimum 4 Go de RAM, un stockage SSD rapide et la possibilité de configurer MySQL, PHP-FPM et le pare-feu indépendamment. Un panel comme Plesk simplifie l'administration des bases de données et des noms de domaine.

Faut-il sauvegarder la base de données avant de mettre à jour Commerce Core ?

Oui, toujours. Avant toute mise à jour d'un module critique, effectuez un backup de la base MySQL (ou PostgreSQL) avec mysqldump et sauvegardez les fichiers du site avec tar. En cas de problème, vous pourrez restaurer l'état précédent. Envoyez aussi le backup sur un serveur distant avec rsync ou une solution de sauvegarde chiffrée.

Comment configurer les alertes de sécurité Drupal sur mon serveur ?

Créez un script exécuté par cron qui vérifie quotidiennement les mises à jour avec composer outdated drupal/* et envoie un email via le relais SMTP si des correctifs sont disponibles. Vous pouvez aussi vous abonner aux flux RSS de drupal.org/security et configurer une notification dans votre panel d'administration serveur.