Paris, le 10 mai 2024

Le PostgreSQL Global Development Group a publié une une mise à jour pour toutes les versions supportées de PostgreSQL, c’est à dire les versions 16.3, 15.7, 14.12, 13.15 et 12.19. Cette version corrige une faille de sécurité et plus de 55 bugs signalés au cours des derniers mois. Voici notre traduction.

Une faille de sécurité a été trouvée dans les vues systèmes pg_stats_ext et pg_stats_ext_exprs, autorisant potentiellement des utilisateurs authentifiés à lire des données pour lesquelles ils n’ont pas les droits suffisants. La correction de cette faille corrige seulement les nouvelles installations de PostgreSQL, spécifiquement celles qui sont créées avec l’outil initdb une fois que cette correction est appliquée. Si vous avez déjà installé PostgreSQL et que vous êtes concernés par cette faille, merci de suivre les instructions dans la section « Mise à jour » pour les étapes de correction.

Note sur la fin de vie de PostgreSQL 12

PostgreSQL 12 ne recevra plus de correctifs à partir du 14 novembre 2024. Si vous utilisez PostgreSQL 12 dans un environnement de production, nous vous suggérons de préparer une mise à jour vers une version supportée de PostgreSQL. Merci de voir notre politique de versions pour plus d’informations.

Failles de sécurité

Faille de sécurité CVE-2024-4317 : Restreindre la visibilité des enregistrements de pg_stats_ext et pg_stats_ext_exprs au propriétaire de la table

Score CVSS v3 : 3.1

Versions supportées vulnérables : PostgreSQL 14 à 16

Des autorisations manquantes dans les vues internes pg_stats_ext et pg_stats_ext_exprs permettent à un utilisateur sans droit de la base de données de lire les valeurs les plus courantes ainsi que d’autres statistiques provenant des commandes CREATE STATISTICS d’autres utilisateurs. Les valeurs les plus courantes pourraient révéler certaines valeurs de colonne ou de résultats de fonctions qu’un utilisateur n’aurait pas pu obtenir autrement. Ce correctif ne corrige que les nouvelles installations de PostgreSQL, nommément celles qui sont créées avec l’outil initdb une fois le correctif appliqué. Si vous avez déjà une installation de PostgreSQL et que vous êtes concernés par la faille de sécurité, merci de suivre les instructions de la section « Mise à jour » pour les étapes de correction.

Le projet PostgreSQL remercie Lukas Fittl pour avoir remonté le problème.

Correctifs et améliorations

Cette mise à jour corrige 55 problèmes rapportés ces derniers mois. Ceux ci-dessous concernent PostgreSQL 16. Certains peuvent affecter d’autres versions supportées.

  • Corrige un problème sur INSERT avec plusieurs lignes dans la clause VALUES quand une colonne cible est un domaine sur un tableau ou un type composite.
  • Nécessite le droit SELECT sur la table cible lors de l’utilisation de MERGE avec DO NOTHING.
  • D’après le standard SQL, renvoie une erreur sur une ligne cible de MERGE joint plus d’une ligne cible lors d’une modification.
  • Corrige l’élagage incorrect d’une partition contentant la valeur NULL quand une table est partitionnée sur une colonne boolénne et qu’une requête a une clause IS NOT.
  • ALTER FOREIGN TABLE ... SET SCHEMA déplace les séquences possédées dans le nouveau schéma.
  • CREATE DATABASE reconnaît désormais le mot-clé STRATEGY peu importe la casse.
  • Corrige la façon dont EXPLAIN compte les pages du heap pendant les parcours bitmap heap afin de compter toutes les pages accédées et pas seulement celles avec des lignes visibles.
  • Évite un deadlock pendant la suppression des tables temporaires orphelines.
  • Plusieurs corrections de VACUUM, dont une qui réduit le nombre d’I/O inutiles.
  • Plusieurs corrections dans le planificateur de requêtes.
  • Ajoute des optimisations pour certaines opérations quand une installations a plusieurs milliers de rôles.
  • Corrige une confusion pour des procédures en langage SQL qui retournent une seule colonne de type composite.
  • Corrige des erreurs d’arrondis et de débordements dans date_bin().
  • Détecte des débordements d’entier quand on ajoute ou soustrait un intervalle à un timestamp.
  • Corrige plusieurs situations de concurrence (race conditions) dans la réplication logique, par exemple pour déterminer si une opération de synchronisation de table est requise.
  • Déconnecte si le socket d’une nouvelle session ne peut plus être mis en mode non bloquant.
  • L’outil initdb -c ne fait plus attention à la casse des noms de paramètre.
  • Corrige comment PL/pgSQL analyse les commentaires sur une seule ligne (commentaires du style --).

Mise à jour

Toutes les mises à jour de PostgreSQL sont cumulatives. Comme pour les autres versions mineures, les utilisateurs n’ont pas besoin de sauvegarder et recharger leur base de données, ni d’utiliser pg_upgrade pour appliquer la mise à jour. Vous pouvez simplement arrêter PostgreSQL et mettre à jour ses binaires.

Pour les installations existantes impactées par la faille CVE-2024-4317 et pour lesquels il faut remédier à la faille, vous devez suivre les étapes suivantes :

  • Trouver le script SQL fix-CVE-2024-4317.sql dans le répertoire share de votre installation PostgreSQL (par exemple dans /usr/share/postgresql/), ou le télécharger du dépôt git de PostgreSQL à partir d’une des URL ci-dessous. Vous devrez utiliser le script correspondant à votre version majeure :
  • PostgreSQL 16
  • PostgreSQL 15
  • PostgreSQL 14

À partir des URL ci-dessus, vous pouvez cliquer sur le lien indiquant « raw » pour télécharger une version que vous pouvez copier, puis coller.

Assurez qu’il s’agit du script adéquat pour votre version majeure de PostgreSQL. Si vous ne voyez pas de fichier, c’est que soit votre version n’est pas concernée (seules PostgreSQL 14, 15 et 16 le sont), soit votre version mineure est trop ancienne pour avoir le correctif.

Dans chaque base de l’instance, exécutez le script fix-CVE-2024-4317.sql en tant que superutilisateur. Par exemple, dans psql, pour le fichier placé dans /usr/share/postgresql/, cette commande ressemblerait à ceci :

\i /usr/share/postgresql/fix-CVE-2024-4317.sql

Vous devez exécuter ce script dans les bases template0 et template1, pour que la faille ne réapparaisse pas dans les bases que vous créerez plus tard. Pour corriger template0, vous devez autoriser les connexions temporairement. Vous pouvez le faire en exécutant la commande suivante :

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;

Après l’exécution du script fix-CVE-2024-4317.sql dans les bases template0 et template1, vous devez révoquer l’acceptation de connexions dans template0. Vous pouvez le faire en exécutant la commande suivante :

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;

Les utilisateurs qui ont ignoré une ou plusieurs versions mineures peuvent avoir des étapes supplémentaires après mises à jour. Merci de lire les notes de versions pour ces versions précédentes.

Voir les notes de version pour les détails.

Liens


DALIBO

DALIBO est le spécialiste français de PostgreSQL®. Nous proposons du support, de la formation et du conseil depuis 2005.