Drupal — gestion des Security Advisories et workflow de patch d'urgence
Processus de veille sur les SA Drupal, anticipation des PSA, et chaîne de déploiement d'un correctif d'urgence reproductible avec Composer et Drush.
Organisation de la veille de sécurité Drupal et procédure de déploiement d’un correctif d’urgence reproductible.
Contexte
L’équipe de sécurité Drupal publie deux types de communications : les Security Advisories (SA) accompagnés d’un correctif disponible immédiatement, et les Public Service Announcements (PSA) annonçant une publication future. PSA-2026-05-18 a annoncé une publication hautement critique (risque 20/25) pour le 20 mai 2026, avec la mention que des exploits peuvent apparaître en quelques heures. Le workflow doit permettre d’appliquer un correctif dans la fenêtre de publication.
Détection
Vérification programmatique des mises à jour de sécurité en attente sur toutes les instances :
drush pm:security --format=json
drush pm:security-php --format=json
Surveillance des flux officiels (à intégrer dans un collecteur RSS ou un job de supervision) :
curl -s https://www.drupal.org/security/rss.xml | xmllint --xpath '//item/title/text()' -
curl -s https://www.drupal.org/security/psa/rss.xml | xmllint --xpath '//item/title/text()' -
Cartographie des versions de toutes les instances gérées, pour évaluer rapidement l’exposition lors d’une SA :
for site in /var/www/*/; do
echo -n "$site : "
drush --root="$site/web" status --field=drupal-version 2>/dev/null || echo "N/A"
done
Mitigation
Chaîne de patch d’urgence reproductible. Sauvegarde préalable de la base et du code avant toute opération :
cd /var/www/drupal.exemple.fr
drush sql:dump --gzip --result-file=/var/backups/drupal-$(date +%F-%H%M).sql
git -C /var/www/drupal.exemple.fr stash list
composer config --no-plugins allow-plugins.composer/installers true
Application du correctif via la version fixée par l’advisory, jamais via une contrainte large :
composer require drupal/core-recommended:10.6.9 --update-with-all-dependencies --no-interaction --no-progress
drush updatedb -y
drush cache:rebuild
Pour les correctifs distribués sous forme de patch (cas des branches non maintenues recevant des fichiers de patch), application via cweagans/composer-patches :
{
"extra": {
"patches": {
"drupal/core": {
"SA-CORE-XXXX-YYY": "patches/sa-core-xxxx-yyy.patch"
}
}
}
}
composer install --no-interaction
git apply --check patches/sa-core-xxxx-yyy.patch
Procédure de rollback en cas de régression fonctionnelle après le correctif :
git -C /var/www/drupal.exemple.fr reset --hard HEAD~1
composer install --no-interaction
drush sql:cli < /var/backups/drupal-<horodatage>.sql
drush cache:rebuild
Vérification
Validation que la version corrigée est en service et qu’aucune alerte de sécurité ne subsiste :
drush status --field=drupal-version
drush pm:security
Test fonctionnel non régressif minimal post-déploiement (code HTTP et présence d’un marqueur de page) :
curl -s -o /dev/null -w '%{http_code}\n' https://drupal.exemple.fr/
drush eval 'print \Drupal::state()->get("system.maintenance_mode") ? "MAINTENANCE\n" : "LIVE\n";'
Le journal des opérations de déploiement (horodatage du dump, version cible, code HTTP final) doit être conservé pour audit.
Vous avez un projet sur ces sujets ?
Nous contacter →