LOXODATA

PostgreSQL 16.3 et autres correctifs

2024-05-14   1141 mots, 6 minutes de lecture

Le PGDG a publié une mise à jour de toutes les versions supportées de PostgreSQL. Il s’agit des versions 16.3, 15.7, 14.12, 13.15 et 12.19. Cette publication corrige une vulnérabilité de sécurité et près de 55 bogues repérés durant les derniers mois.

Une vulnérabilité de sécurité a été relevée sur les vues systèmes pg_stats_ext et pg_stats_ext_exprs qui autoriserait les utilisateurs de base de données authentifiés de consulter des données dont les permissions leur interdiraient l’accès. Ce correctif ne concerne que les nouvelles installations de PostgreSQL effectuées avec l’utilitaire initdb après application du correctif. Si vous possédez une installation existante de PostgreSQL et souhaitez en savoir plus sur la correction de ce problème, se référer aux instructions de la section Mise à jour pour la marche à suivre.

Cette publication inclut des correctifs sur les index. Il peut s’avérer nécessaire de réindexer certains index. Se référer à la section Notes de publication pour plus de détails.

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

Fin de support de PostgreSQL 12

La version 12 de PostgreSQL ne recevra plus aucun correctif à partir du 14 novembre 2024. Si vous utilisez une version 12 de PostgreSQL en production, nous vous recommandons de procéder à une mise à jour vers une version plus récente de PostgreSQL. Se référer à notre politique de versionnement pour plus d’informations.

Problèmes de sécurité

CVE-2024-4317 : Restreindre la visibilité des vues pg_stats_ext et pg_stats_ext_exprs au propriétaire de la table

CVSS v3.1 Base Score: 3.1

Versions affectées : 14 - 16.

Une autorisation manquante dans les vues systèmes pg_stats_ext et pg_stats_ext_exprs permet à un utilisateur de base de données sans permissions de lire les valeurs les plus communes et d’autres statistiques avec la commande CREATE STATISTICS émanant d’autres utilisateurs. Les valeurs les plus communes peuvent révéler des valeurs de colonnes ou les résultats de fonctions qu’il n’aurait normalement pu consulter ou éxecuter.

Ce correctif ne concerne que les nouvelles installations de PostgreSQL effectuées avec l’utilitaire initdb après application du correctif. Si vous possédez une installation existante de PostgreSQL et souhaitez en savoir plus sur la correction de ce problème, se référer aux instructions de la section Mise à jour pour la marche à suivre.

Le projet PostgreSQL remercie Lukas Fittl pour avoir reporté ce problème.

Corrections des bogues et améliorations

Cette mise à jour corrige près de 55 bogues qui ont été reportés depuis ces derniers mois. Les problèmes listés ci-dessous affectent la version 16 de PostgreSQL. Certaines peuvent aussi affecter d’autres versions supportées de PostgreSQL.

  • Corrige un problème sur la commande INSERT avec une clause multi-lignes VALUES où une colonne cible est un domaine sur un tableau ou un type composite;
  • Obliger le privilège SELECT sur la table cible lors de l’utilisation de la commande MERGE ... DO NOTHING;
  • Selon le standard SQL, remonter une erreur si la ligne cible dans la commande MERGE joint plus d’une ligne source durant une modification;
  • Corrige un pruning incorrect d’une partition NULL lorsque la table est partitionnée sur une colonne booléenne et que la requête possède une clause IS NOT booléenne également;
  • Déplace toutes les séquences detenues dans le nouveau schéma avec la commande ALTER FOREIGN TABLE ... SET SCHEMA;
  • La commande CREATE DATABASE reconnait désormais les mots-clés STRATEGY indépendemmant de la casse;
  • Corrige le compte de pages heap pendant un bitmap heap scan retourné par la commande EXPLAIN afin de montrer toutes les pages comptées, et non seulement les pages avec des tuples visibles;
  • Prévenir un deadlock pendant la suppression de tables temporaires orphelines;
  • Plusieurs correctifs pour la commande VACUUM, dont un pouvant réduire des I/O non nécessaires;
  • Plusieurs correctifs portant sur le planificateur de requêtes;
  • Apporter des optimisations sur certaines opérations où l’installation de PostgreSQL possède plusieurs milliers de rôles;
  • Corrige des confusions sur des procédures en langage SQL qui retourne une colonne simple de type composite;
  • Corrige une mauvaise approximation et risques d’overflow sur la fonction date_bin;
  • Détection de débordement d’entier lors de l’ajout ou soustraction d’un interval depuis/vers une estampille temporelle;
  • Corrige plusieurs race conditions avec la réplication logique, incluant la détermination de la nécessité ou non d’une opération de synchronisation de table;
  • Déconnexion d’un nouveau socket de session cliente si ce dernier ne peut être mis en mode non-bloquant;
  • Vérification des noms de paramètres indifféremment de la casse avec la commande initdb -c;
  • Corrige la manière dont PL/pgSQL interprète les commentaires sur une ligne (commentaires avec la syntaxe --) situés après une expression;

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.

Pour des installations existantes de PostgreSQL impactées par la CVE-2024-4317 souhaitant corriger cette dernière, vous devrez suivre les étapes suivantes :

Depuis les URLs suivantes, vous pouvez cliquer sur l’URL raw pour télécharger une version qu’il est possible de copier/coller.

Assurez-vous d’utiliser le script correspondant à votre version majeure de PostgreSQL. Si vous ne trouvez pas ce fichier, soit votre version n’est pas vulnérable (seulement les versions 14, 15 et 16 sont affectées), soit votre version mineure est trop ancienne pour posséder ce correctif.

  • Sur chaque base de données de votre cluster, éxecuter le script SQL fix-CVE-2024-4317.sql en tant que superutilisateur. Par exemple, avec psql, exécuter la commande suivante avec le fichier situé sous /usr/share/postgresql/ :
\i /usr/share/postgresql/fix-CVE-2024-4317.sql
  • Vous devez également jouer ce script sur les bases de données template0 et template1 ou sinon les nouvelles bases de données créées hériteront de cette vulnérabilité. Pour corriger la base de données template0, il est nécessaire au préalable d’autoriser les connexions sur cette dernière. Vous pouvez utiliser la commande suivante pour ce faire :
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;

Après avoir exécuté le script SQL fix-CVE-2024-4317.sql sur les bases template0 et template1, vous devriez supprimer l’autorisation de connexion sur la base template0. Avec la commande suivante :

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;

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 list publique pgsql-www@lists.postgresql.org.