← Retour aux tutoriels

Drupal SA-CORE-2026-004 — injection SQL critique : patch d'urgence et détection

Réponse à SA-CORE-2026-004 (CVE-2026-9082, injection SQL hautement critique, exploitée activement) : application du correctif, détection d'exploitation et workflow d'urgence.

Procédure de réponse à l’advisory SA-CORE-2026-004 du cœur de Drupal, injection SQL classée hautement critique et activement exploitée.

Menace

SA-CORE-2026-004 (CVE-2026-9082, score 23/25) décrit une injection SQL hautement critique du cœur de Drupal, exploitée dans la nature au moment de la publication. Versions affectées : >= 8.9.0 < 10.4.10, >= 10.5.0 < 10.5.10, >= 10.6.0 < 10.6.9, >= 11.0.0 < 11.1.10, >= 11.2.0 < 11.2.12, >= 11.3.0 < 11.3.10. Versions corrigées : 11.3.10, 11.2.12, 11.1.10, 10.6.9, 10.5.10 et 10.4.10. Le vecteur concerne particulièrement les installations sur PostgreSQL.

Détection

Identification de la version installée et de son éligibilité au correctif :

drush status --field=drupal-version
composer show drupal/core-recommended --format=json | jq -r '.versions[0]'

Recherche de motifs d’injection SQL dans les logs du reverse proxy (paramètres encodés contenant des fragments SQL) :

grep -aiE "(union(\+|%20|\s)+select|information_schema|pg_sleep|;%20?select|0x[0-9a-f]{8})" /var/log/nginx/access.log
grep -aiE "\?.*=.*('|%27)(\s|%20)*(or|and)(\s|%20)*('|%27)?[0-9]" /var/log/nginx/access.log

Détection d’erreurs SQL renvoyées par PHP-FPM, indice de tentative ou de succès d’injection :

grep -aiE "(SQLSTATE|PDOException|syntax error at or near|DatabaseExceptionWrapper)" /var/log/php/drupal-error.log

Recherche de comptes ou de sessions créés hors période normale (post-compromission probable) :

drush sql:query "SELECT uid, name, FROM_UNIXTIME(created) FROM users_field_data WHERE created > UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY) ORDER BY created DESC;"
drush sql:query "SELECT COUNT(*), session FROM sessions GROUP BY session HAVING COUNT(*) > 50;"

Mitigation

Application immédiate du correctif via Composer puis exécution des mises à jour de base :

cd /var/www/drupal.exemple.fr
composer require drupal/core-recommended:11.3.10 drupal/core-composer-scaffold:11.3.10 --update-with-all-dependencies --no-interaction
drush updatedb -y
drush cache:rebuild
drush status --field=drupal-version

En l’absence de fenêtre de déploiement immédiate, mitigation temporaire au niveau WAF (ModSecurity, règles CRS 942xxx) en mode blocage, le temps d’appliquer le correctif officiel — cette mesure ne remplace pas le patch.

Sur compromission suspectée, rotation des secrets et invalidation globale des sessions :

drush eval 'Drupal::service("session_manager")->delete(0);'
drush sql:query "DELETE FROM sessions;"
install -o root -g www-data -m 0440 <(openssl rand -base64 55) /etc/drupal/hash_salt.key

Vérification

Confirmation que la version corrigée est en service et qu’aucune mise à jour de sécurité du cœur ne reste en attente :

drush status --field=drupal-version
drush pm:security 2>&1 | grep -i 'core' || echo "Aucune alerte de securite sur le coeur"

Le journal /admin/reports/dblog ou syslog ne doit plus présenter d’erreurs SQLSTATE post-correctif. La revue manuelle des comptes administrateurs (drush user:information --uid=<uid>) doit valider qu’aucun compte non légitime n’a été créé pendant la fenêtre d’exposition.

Vous avez un projet sur ces sujets ?

Nous contacter →