Retour

Faille critique Drupal : retour sur 72 heures d'organisation chez Digital Garden

Publié le
27.05.2026

Le 18 mai 2026 à 23h35, un message dans notre canal Teams. Drupal annonce un patch highly critical pour le 20 mai, entre 17h et 23h UTC. Pas de détails sur la nature de la faille, ni sur les versions affectées dans le détail. Juste une certitude : Une petite vingtaine de sites Drupal hébergés, dont des plateformes sensibles (aéroport régional, plateforme ministérielle, industriels internationaux, institut hospitalier), allaient devoir être à jour, en sécurité, sans casse, dans la fenêtre la plus serrée possible.

Voici comment on s'est organisé. Pas comme un cas d'école, mais comme ça s'est vraiment passé : avec les arbitrages, les imprévus, les congés tombés au mauvais moment, et la décision finale qui n'a pas été la plus spectaculaire.

Pourquoi cette faille méritait une vraie organisation

Le SA-CORE-2026-004 (CVE-2026-9082) a fini par être noté 23/25 sur l'échelle de risque Drupal, le plus haut niveau possible. Une injection SQL exploitable par un utilisateur anonyme, sur n'importe quel site Drupal utilisant PostgreSQL, dans les versions ≥ 8.9. Et à partir du 22 mai, l'éditeur a confirmé que des tentatives d'exploitation étaient observées dans la nature.

Ce qui rend ce type d'incident particulier en 2026, ce n'est pas la faille en elle-même (il y en a chaque année). C'est la vitesse d'exploitation que l'IA permet désormais. Entre la divulgation publique et les premiers scans automatisés à grande échelle, il ne se passe plus des jours. Il se passe des heures. Parfois moins.

L'autre nouveauté, c'est que dans la même release, Drupal embarquait les correctifs Symfony et Twig publiés en coordination avec Fabien Potencier. Donc même les sites en MySQL ou MariaDB, non concernés par l'injection SQL principale, devaient être mis à jour pour récupérer les correctifs de dépendances. Aucun parc Drupal n'était à l'écart.

À retenir : la sévérité affichée d'une faille n'est qu'une partie de l'histoire. Ce qui détermine vraiment l'urgence, c'est le délai entre la publication du correctif et l'exploitation à grande échelle. Et ce délai se réduit à chaque release.

J-2 : la veille déclenche, l'équipe se prépare

Lundi 18 mai, 23h35. Le PSA-2026-05-18 tombe sur drupal.org. Il indique seulement la fenêtre de publication (mercredi soir) et le niveau critique. Pas la nature de la faille, pas les versions affectées en détail. Premier réflexe : poster le lien dans le canal Teams interne de l'équipe Drupal et donner le contexte. "Petite pépite explosive pour pimenter la semaine."

Mardi matin, échange à trois entre dev, archi et devops. Trois questions à clarifier avant d'embarquer l'équipe :

  1. Qu'est-ce qu'on connaît du périmètre ? Combien de sites Drupal en prod, sur quels hébergeurs, dans quels états ?
  2. Qui patche quoi ? Quelles sont les dernières releases Drupal & dépendances, on en est où en timeline de MAJ avec nos client ?
  3. Quels projets ont des features en cours de recette qu'on ne peut pas casser ?

La réponse à la première question existait déjà : nos référentiels internes (Projet Sentinel puisé depuis la configuration Apache/PHP, le README des repos hosting pour l'inventaire, les documentations, etc.. ) listent tous les environnements, leurs versions, leurs serveurs. C'est ce qui nous a permis, en quelques heures, de générer un fichier de suivi structuré : un onglet par projet, avec hébergeur, état, priorité, planning, responsable MAJ, CDP en charge de la communication client, et version PHP / Drupal de chaque environnement.

Ce fichier n'est pas une feuille Excel improvisée. C'est la matérialisation d'un inventaire tenu à jour en continu. Sans cet inventaire, on aurait perdu une journée à reconstituer le périmètre. Avec, on a pu attaquer le mardi midi.

J-1 : priorisation, communication, anticipation

Le mardi 19 mai à 16h30, le mail "Alerte Sécurité" part sur tout le canal Teams Agence. L'objectif : aligner toute l'équipe (dev, CDP, hébergement) sur le même niveau d'information.

Quelques points qui me paraissent importants dans ce message :

  • Reconnaître ce qu'on ne sait pas. "On ne connaît pas encore la nature de la faille, ni la forme du patch." Mieux vaut le dire que de surjouer une maîtrise qu'on n'a pas.
  • Replacer la situation dans un contexte plus large. Les derniers mois ont vu se multiplier les packages vérolés sur npm, des dépendances Python ou React compromises, des supply chain attacks. On avait trouvé des moyens d'automatiser les choses mais ici le sujet est trop transverse pour passer en automatique.
  • Nommer le facteur IA. Les attaquants exploitent de plus en plus vite. Ce qu'on aurait pu se permettre de patcher en 48h il y a 3 ans doit l'être en quelques heures aujourd'hui.

En parallèle, on remplit le fichier de suivi avec une priorisation de 1 à 5, où 1 est le plus critique. Les sites prio 1 et 2 sont ceux à forte exposition publique, à fort trafic, ou portant des enjeux régaliens (un site ministériel, l'aéroport, des industriels grand public). Pour eux, on monte une cellule rapprochée avec des points plus fréquents et une planification de déploiement renforcée.

La communication client part dès le mardi soir, gérée par les Chefs de Projet identifiés dans le fichier. Le ton est sobre, factuel : on rappelle qu'un patch critique va sortir, qu'on a anticipé, qu'on tient au courant. Pas de panique, pas de pitch commercial. Juste de l'information utile.

Côté technique, on commence dès le mardi à monter les versions mineures sur certains projets en retard. L'idée est simple : plus on est proche de la dernière version mineure avant la divulgation, plus on a de chances que le patch s'applique sans frottement. C'est de l'anticipation pure, qui ne coûte presque rien en effort, et qui économise plusieurs heures le jour J.

Jour J : patcher vite, mais patcher juste

Mercredi 20 mai. Dans l'après-midi, Fabien Potencier publie sur le compte Drupal Security un message qui confirme que les dépendances Symfony et Twig sont déjà disponibles et qu'on peut commencer à mettre à jour avant le patch Drupal. On embraie immédiatement sur cette partie.

Vers 18h UTC, le SA-CORE-2026-004 est publié officiellement avec les versions corrigées : 10.4.10, 10.5.10, 10.6.9, 11.1.10, 11.2.12, 11.3.10. La nature de la faille devient claire : injection SQL ciblant PostgreSQL uniquement.

C'est là que la discipline de l'anticipation paie. Pour les projets sur lesquels on avait déjà préparé les branches release, le passage à la version corrigée se fait par un composer update ciblé et une revue rapide.

Le déploiement suit un parcours non négociable :

  1. Préproduction d'abord, validation technique et fonctionnelle
  2. Production ensuite, après feu vert, fenêtre planifiée
  3. Hotfix dédié si le projet a une release en cours pour ne pas embarquer de feature non testée

Sur certains projets en cours de recette (un simulateur en pré-prod sur une plateforme client, des features non encore mergées sur master ailleurs), on a fait des branches hotfix/sa-core-2026-05-20 à part, qui n'embarquent que le patch. Le merge des features se fera après, sur un cycle normal. C'est moins élégant mais c'est ce qui évite d'introduire un effet de bord en production sous pression.

Au total : preprod patchée dans la journée du 20-21 mai, prod déployée entre le 21 et le 22 mai matin. Aucune régression remontée. Aucune anomalie post-déploiement.

Vite, oui. Mais avec intelligence : la nouvelle équation IA

Une partie du REX me paraît intéressante à partager, parce qu'elle dépasse le cas Drupal.

On parle beaucoup de l'accélération que l'IA apporte aux attaquants et c'est vrai, c'est mesurable, on le voit dans les délais d'exploitation post-divulgation. Mais il y a un autre phénomène qui monte en parallèle : la compromission de la chaîne d'approvisionnement logicielle. Et la semaine de notre patch Drupal en a fourni deux illustrations particulièrement nettes.

Le 11 mai, 84 versions malveillantes ont été publiées sur 42 packages @tanstack/* en six minutes, dont @tanstack/react-router (12 millions de téléchargements hebdomadaires). Une attaque qui portait des certificats de provenance SLSA valides, donc indétectable par les contrôles cryptographiques classiques. Aucun token npm volé, aucun compte mainteneur phishé : les attaquants ont exploité une chaîne de failles GitHub Actions pour s'insérer dans le pipeline de publication.

Neuf jours plus tard, le 20 mai (le même jour que notre patch Drupal), GitHub a confirmé l'exfiltration d'environ 3 800 dépôts internes après qu'un employé ait installé une extension VS Code malveillante. Même groupe d'attaquants présumé que pour TanStack. Le vecteur d'attaque, cette fois, c'était l'outil de développement lui-même.

Conséquence pratique : la pression pour patcher vite coexiste avec l'obligation de patcher prudemment. Un composer update ou un npm install lancé sans réflexion peut désormais embarquer du code malveillant si une dépendance transitive a été compromise. C'est exactement le piège qu'on doit éviter.

Quelques principes qu'on essaie de tenir :

  • Toujours figer ce qui est utile. Composer.lock, package-lock.json, ce sont des garde-fous. Ne pas les contourner sous pression.
  • Auditer ce qu'on installe. Snyk, GitHub Advisories, Sonarqube, l'audit Composer natif. Quand un PKSA ((Package Security Advisory)  apparaît, on regarde s'il concerne nos versions. On n'ignore pas par défaut.
  • Privilégier les patchs ciblés. Mettre à jour le core Drupal sur la branche corrective, pas faire un update global qui déclenche des montées de version transitive non testées.
  • Maintenir la double validation. Preprod systématique, même quand on est sous pression. Surtout quand on est sous pression.

Patcher en 6h sans avoir cassé une prod, c'est du travail. Patcher en 6h en ayant introduit une régression non détectée, c'est un incident qui aurait pu être évité.

Ce que cette gestion a révélé sur nous

Après coup, l'analyse technique a confirmé qu'aucun de nos clients n'utilisait PostgreSQL sur ses sites Drupal. La faille principale ne nous concernait pas directement. Mais les mises à jour Symfony et Twig embarquées, elles, étaient pertinentes pour tout le parc.

On aurait pu se dire, dès qu'on a su que la faille était PostgreSQL-only, qu'il n'y avait pas urgence. Ce n'est pas le choix qu'on a fait, pour deux raisons :

  1. L'information de la nature de la faille n'est arrivée qu'après le patch. Au moment où on s'organisait, on devait considérer le scénario du pire.
  2. Les correctifs amont Symfony / Twig justifiaient à eux seuls la mise à jour. Et puis, monter en version courante un site Drupal qui était sur une mineure ancienne, c'est toujours du temps gagné pour la suite.

Ce qu'on garde de cet épisode, ce n'est pas tant l'exploit technique du déploiement rapide : beaucoup d'agences savent faire ça. C'est plutôt la chaîne complète : veille en amont, inventaire à jour, fichier de pilotage instantané, priorisation transparente, communication client structurée, anticipation pré-patch, exécution sécurisée, communication post-déploiement. Et la capacité d'une équipe (dev, archi, devops, CDP, direction) à s'aligner sans friction, à prendre chacun son périmètre avec discernement, et à adapter cette chaîne quand quelqu'un est en congé, quand un hébergeur partenaire prend du temps à répondre, ou quand une feature en recette complique le merge

C'est ce qu'on appelle, en interne, le service de veille sécurité intégré à la TMA. Ce n'est pas une option commerciale, c'est la condition de fonctionnement de toute infrastructure web qu'on prend en charge. Quand un PSA highly critical tombe un jour, on est content que toute cette organisation soit déjà en place.

Pour aller plus loin

Si la question de la sécurité des sites en production vous intéresse, ces sujets connexes ont été couverts sur ce blog :

Si votre site Drupal n'est pas couvert par une veille sécurité active, ou si vous voulez challenger votre dispositif actuel, parlons-en. On sera direct sur ce qu'on voit, et sur ce qu'on ferait à votre place.

D’autres articles à découvrir