LOXODATA

PostgreSQL 18.4 et autres correctifs

2026-06-01   2133 mots, 11 minutes de lecture

Le PGDG (PostgreSQL Global Development Group) a publié une mise à jour de toutes les versions supportées de PostgreSQL, incluant 18.3, 17.9, 16.13, 15.17 et 14.22.

Pour la liste complète des changements, se référer à la section Notes de publication.

Notification de la fin de vie de PostgreSQL 14

PostgreSQL ne recevra plus de correctif dès le 12 novembre 2026. Si vous utilisez PostgreSQL dans un environnement de production, nous vous suggérons de planifier une mise à jour vers une version supportée et mise à jour de PostgreSQL. Pour plus de détails, se référer à la Politique de version.

Problème de sécurité

  • CVE-2026-6472 : exécution de fonctions SQL arbitraires en utilisant CREATE TYPE.

Score CVSS: 5.4 MEDIUM (serveur PostgreSQL)

L’absence d’autorisation lors de la création d’un type (CREATE TYPE) dans PostgreSQL permet à un créateur d’objet de détourner d’autres requêtes utilisant search_path pour trouver des types définis par l’utilisateur, y compris les types définis par extension. Autrement dit, la victime peut exécuter des fonctions SQL arbitraires choisies par l’attaquant. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Jelte Fennema-Nio d’avoir reporté ce problème.

  • CVE-2026-6473 : exécution de code arbitraire avec les privilèges de l’utilisateur du système d’exploitation exécutant la base de données.

Score CVSS: 8.8 HIGH (serveur PostgreSQL)

Une vulnérabilité de dépassement de capacité d’entier présente dans plusieurs fonctionnalités du serveur PostgreSQL permet à un utilisateur de base de données non privilégié de provoquer un sous-dimensionnement de l’allocation mémoire et une écriture hors limites. Ceci peut entraîner l’exécution de code arbitraire avec les privilèges de l’utilisateur du système d’exploitation exécutant la base de données. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Anemone, A1ex, Xint Code, Jihe Wang, Jingzhou Fu, Pavel Kohout, Petr Simecek, www.aisle.com, Bruce Dang of Calif.io, et Sven Klemm d’avoir reporté ce problème.

Score CVSS: 4.3 MEDIUM (serveur PostgreSQL)

Une faille de sécurité dans la fonction timeofday() de PostgreSQL, utilisant un format de chaîne externe, permet à un attaquant de récupérer des portions de la mémoire du serveur grâce à des fuseaux horaires spécialement conçus. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Xint Code d’avoir reporté ce problème.

  • CVE-2026-6475 : écrasement de fichiers sans lien avec l’origine choisie par le superutilisateur.

Score CVSS: 8.8 HIGH (client)

L’utilisation de liens symboliques avec les commandes pg_basebackup (format simple) et pg_rewind de PostgreSQL permet à un superutilisateur d’origine d’écraser des fichiers locaux, comme /var/lib/postgres/.bashrc, et de détourner ainsi le compte système. Le démarrage du serveur après ces commandes implique toujours une confiance implicite accordée à ce superutilisateur, du fait de fonctionnalités telles que shared_preload_libraries. Par conséquent, cette attaque n’a d’incidence concrète que si une action est entreprise entre l’exécution de ces commandes et le démarrage du serveur, comme le déplacement des fichiers vers une autre machine virtuelle ou la création d’un instantané de cette dernière. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Valery Gubanov, XlabAI Team of Tencent Xuanwu Lab, Atuin Automated Vulnerability Discovery Engine, Zhanpeng Liu, Guannan Wang, et Guancheng Li d’avoir reporté ce problème.

  • CVE-2026-6476 : pg_createsubscriber est vulnérable aux injections SQL via le nom de l’abonnement.

Score CVSS: 7.2 HIGH (client)

Une injection SQL dans la fonction pg_createsubscriber de PostgreSQL permet à un attaquant disposant des droits pg_create_subscription d’exécuter des requêtes SQL arbitraires en tant que superutilisateur. L’attaque est exploitée lors de la prochaine exécution de pg_createsubscriber. Toutes les versions précédant les versions 18.4, 17.10 sont concernées.

Le projet PostgreSQL remercie Yu Kunpeng d’avoir reporté ce problème.

  • CVE-2026-6477 : les fonctions lo_* de la bibliothèque libpq de PostgreSQL permettent au superutilisateur du serveur d’écraser la mémoire de la pile du client.

Score CVSS: 8.8 HIGH (client)

L’utilisation de la fonction intrinsèquement dangereuse PQfn(..., result_is_int=0, ...) dans les fonctions lo_export(), lo_read(), lo_lseek64() et lo_tell64() de la bibliothèque PostgreSQL permet à l’administrateur du serveur d’écraser la mémoire tampon de la pile du client avec une réponse de taille arbitraire. À l’instar de gets(), PQfn(..., result_is_int=0, ...) stocke des données de longueur arbitraire, déterminée par le serveur, dans une mémoire tampon de taille indéterminée. Étant donné que les commandes lo_export de psql et pg_dump appellent toutes deux lo_read(), l’administrateur du serveur peut écraser la mémoire de la pile de pg_dump ou de psql. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Yu Kunpeng d’avoir reporté ce problème.

  • CVE-2026-6478 : PostgreSQL divulgue les mots de passe hachés MD5 via un canal de synchronisation caché.

Score CVSS: 6.5 MEDIUM (serveur PostgreSQL)

Une faille de sécurité dans la comparaison des mots de passe hachés MD5 lors de l’authentification PostgreSQL permet à un attaquant de récupérer les identifiants utilisateur nécessaires à l’authentification. Ceci n’affecte pas les mots de passe scram-sha-256, utilisés par défaut dans toutes les versions prises en charge. Cependant, certaines bases de données actuelles peuvent contenir des mots de passe hachés MD5 provenant de mises à niveau depuis PostgreSQL 13 ou une version antérieure. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Joe Conway d’avoir reporté ce problème.

  • CVE-2026-6479 : L’initialisation SSL/GSS de PostgreSQL provoque un déni de service via une récursion non contrôlée.

Score CVSS: 7.5 HIGH (serveur PostgreSQL)

Une récursion incontrôlée dans la négociation SSL et GSS de PostgreSQL permet à un attaquant capable de se connecter à un socket AF_UNIX de PostgreSQL d’obtenir un déni de service soutenu. Si SSL et GSS sont désactivés, un attaquant peut réaliser la même opération en accédant à une socket TCP de PostgreSQL. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Calif.io en collaboration avec Claude and Anthropic Research d’avoir reporté ce problème.

  • CVE-2026-6575 : la fonction pg_restore_attribute_stats de PostgreSQL accepte des valeurs qui entraînent une lecture au-delà de la fin du tableau de statistiques lors de la planification de la requête.

Score CVSS: 4.3 MEDIUM (serveur PostgreSQL)

La fonction pg_restore_attribute_stats() de PostgreSQL présente une vulnérabilité de lecture au-delà du buffer. En effet, elle accepte des valeurs de tableau de longueur non concordante, ce qui provoque une lecture au-delà de la fin d’un tableau lors de la planification de la requête. Ceci permet à un responsable de table d’inférer des valeurs en mémoire au-delà de cette fin de tableau. Les versions 18 précédant la version 18.4 sont concernées.

Le projet PostgreSQL remercie Jeroen Gui d’avoir reporté ce problème.

  • CVE-2026-6637 : refint permet le dépassement de tampon de pile et l’injection SQL.

Score CVSS:8.8 HIGH (module contrib)

Une vulnérabilité de type dépassement de tampon de pile dans le module « refint » de PostgreSQL permet à un utilisateur de base de données non privilégié d’exécuter du code arbitraire avec les privilèges de l’utilisateur du système d’exploitation exécutant la base de données. Une attaque distincte est possible si l’application déclare une colonne contrôlée par l’utilisateur comme clé primaire en cascade « refint » et autorise les mises à jour de cette colonne par l’utilisateur. Dans ce cas, une injection SQL permet au fournisseur de valeur de mise à jour de la clé primaire d’exécuter du code SQL arbitraire avec les privilèges de l’utilisateur de la base de données effectuant la mise à jour. Toutes les versions précédant les versions 18.4, 17.10, 16.14, 15.18, et 14.23 sont concernées.

Le projet PostgreSQL remercie Nikolay Samokhvalov d’avoir reporté ce problème.

  • CVE-2026-6638 : REFRESH PUBLICATION est vulnérable aux injections SQL via le nom de la table.

Score CVSS: 3.7 LOW (serveur PostgreSQL)

Une injection SQL dans la réplication logique PostgreSQL (commande ALTER SUBSCRIPTION ... REFRESH PUBLICATION) permet au créateur d’une table abonnée d’exécuter des requêtes SQL arbitraires avec les identifiants de publication de l’abonnement. L’attaque prend effet lors de la prochaine mise à jour (REFRESH PUBLICATION). Les versions 16, 17 et 18 précédant les versions 18.4, 17.10, 16.14 sont concernées.

Le projet PostgreSQL remercie Pavel Kohout, Aisle Research d’avoir reporté ce problème.

Corrections de bogues et améliorations

Cette publication corrige plus de 60 bogues reportés ces derniers mois. Les problèmes listés ci-dessous concernent PostgreSQL. Certains d’entre eux peuvent aussi concerner d’autres versions de PostgreSQL.

  • correction du fait que des requêtes pourraient retourner des résultats incorrects lors de l’utilisation d’une collation non-déterministe avec un index unique ;
  • correction de la perte de défferabilité d’un déclencheur de clé étrangère. Préalablement à ce correctif, une clé étrangère définie en tant que DEFERRABLE INITIALLY DEFERRED se serait comportée comme NOT DEFERRABLE après avoir été définie NOT ENFORCED puis ENFORCED. Si vous avez une clé étrangère avec ce problème, après l’installation de cette mise à jour, vous pouvez corriger cela en passant l’état à NOT ENFORCED puis à nouveau ENFORCED ;
  • amélioration de la capacité du planner d’appliquer l’élagage des partitions à plus de cas ;
  • correction de la suppression des self-join afin de prendre en compte les colonnes booléennes, par exemple ON t1.boolcol ;
  • correction de plusieurs problèmes concernant les colonnes générées virtuelles, incluant le fait que INSERT ... ON CONFLICT fonctionne lorsque EXCLUDED référence une colonne générée virtuelle ;
  • reporte une erreur de sérialisation lorsque MERGE rencontre une ligne mise à jour simultanément dans les modes d’isolation « repeatable read » ou « serializable » ;
  • correction de la commande CREATE TABLE ... LIKE ... INCLUDING STATISTICS pour les cas où la table source a eu une ou plusieurs colonnes supprimées ;
  • correction de WITHOUT OVERLAPS pour permettre les domaines ;
  • désactive la construction d’un type composite avec lui-même via un type multirange ;
  • correction de résultats parfois incorrects lorsque array_agg(anyarray) est exécuté en parallèle ;
  • prévention de la fragmentation lors de la restauration d’une sauvegarde incrémentale ;
  • prévention du blocage de la promotion d’une instance secondaire à cause d’un processus de synchronisation de slot de réplication logique bloqué ;
  • correction de la colonne pid de la vue système pg_aios pour afficher NULL à la place de 0 lorsqu’une entrée n’est pas propriétaire du processus ;
  • correction de cas où la vue pg_stat_replication montre un lag NULL quand bien même la réplication est active ;
  • affichage correcte d’alias de variables d’un JOIN lorsqu’elles sont utilisées dans un GROUP BY ;
  • en cas d’échec du processus de démarrage, arrête proprement les autres processus enfants avant d’arrêter le postmaster ;
  • correction d’une erreur d’exécution concurrente pouvant entraîner une boucle d’arrêt-démarrage lorsqu’une instance secondaire suit les journaux de log (WAL) dans une instance primaire d’une version mineure plus ancienne ;
  • prévient l’attente infinie de l’arrêt d’un processus walsender lorsque la réplication logique est active ;
  • s’assure que l’écriture de la FSM persiste pendant une restauration. Ceci pourrait avoir des conséquences sur les performances sur une instance secondaire après une promotion ;
  • corrections de bogues lors de la décompression de sauvegardes et dans le code de lecture des fichiers Tar utilisé par pg_basebackup et pg_verifybackup ;
  • rétabli le fait que pg_dumpall n’évite pas les droits de rôle de «grantor» suspendu, comme avant PostgreSQL 16. Émission d’un message d’avertissement à propos du «grantor» manquant si le serveur est pls récent que PostgreSQL 16 ;
  • correction de pg_upgrade pour utiliser la version correcte du protocole lors de la connexion à de plus vieux serveurs ;
  • correction de la sorte de pg_overexplain lors de l’utilisation de l’option RANGE_TABLE ;
  • correction d’une défaillance de postgres_fdw à cause d’un nettoyage prématuré d’une connexion en échec.

Cette publication met aussi à jour les fichiers de données des fuseaux horaires à la publication 2026b, dans laquelle la Colombie-Britannique (America/Vancouver) sera toute l’année à UTC-07 (dans les faits, DST) à partir de novembre 2026. Cette publication prend en compte le fait que leur abréviation de fuseau sera MST à partir de ce moment (quoique ça pourrait changer). Il y a aussi une correction historique pour la Moldavie, qui a utilisé l’heure EU DST en transition depuis 2022.

Mise à jour

Toutes les publications de mises à jour de PostgreSQL sont cumulatives. Comme pour les autres mises à jour mineures, il n’est pas nécessaire d’extraire et de recharger les bases de données ni d’utiliser pg_upgrade pour appliquer cette mise à jour ; il suffit simplement d’arrêter PostgreSQL et de mettre à jour les binaires.

Les utilisateurs ayant sauté une ou plusieurs mises à jour peuvent avoir besoin d’étapes additionnelles après la mise à jour. Les notes de publication des versions précédentes fournissent les détails.

Pour plus de détails, se référer à la note de publication de versions.

Liens

Si vous avez des corrections ou suggestions sur cette annonce de publication, merci de les envoyer à la mailing liste publique pgsql-www@lists.postgresql.org.