LOXODATA

PostgreSQL 16.4 et autres correctifs

2024-08-09   1311 mots, 7 minutes de lecture

Le PGDG a publié une mise à jour de toutes les versions supportées de PostgreSQL. Il s’agit des versions 16.4, 15.8, 14.13, 13.16 et 12.20, ainsi que la troisième publication Bêta de PostgreSQL 17. Cette publication corrige une vulnérabilité de sécurité et près de 55 bogues repérés durant les derniers mois.

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 planifier une mise à jour vers une version plus récente et supportée de PostgreSQL. Se référer à notre politique de versionnement pour plus d’informations.

Problèmes de sécurité

CVE-2024-7348 : le remplacement de relations dans PostgreSQL lors de l’utilisation de pg_dump permet d’exécuter du code SQL arbitraire.

CVSS v3.1 Base Score: 8.8

Versions vulnérables et supportées : 12 - 16.

Un assaillant capable de créer et supprimer des objets non-temporaire pourrait injecter du code SQL qui serait exécuté par une session pg_dump concurrente avec les privilèges du rôle exécutant pg_dump (qui est souvent un super-utilisateur). L’attaque implique le remplacement d’une séquence ou d’un objet similaire avec une vue ou une table étrangère qui exécuterait du code malicieux. Pour se prémunir de cela, l’introduction d’un nouveau paramètre restrict_nonsystem_relation_kind permet de désactiver l’expansion de vues autres qu’internes ainsi que l’accès aux tables étrangères et apprend à pg_dump à le définir lorsqu’il est disponible. Notez que l’attaque est bloquée lorsque pg_dump et le serveur sauvegardé sont suffisamment récents pour avoir ce correctif.

Le projet PostgreSQL remercie Noah Misch pour avoir signalé ce problème.

Corrections des bogues et améliorations

Cette mise à jour corrige près de 55 bogues qui ont été signalé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.

  • empêche des résultats incorrects de plans “Merge Right Anti Join”, lorsque la relation interne est connue pour avoir une clé de jointure unique, la fusion pourrait alors se faire quand il y a des clés de jointure dupliquées dans la relation externe ;
  • empêche une boucle infinie dans VACUUM ;
  • corrige la configuration de l'élagage d’une partition pendant ALTER TABLE DETACH ... PARTITION CONCURRENTLY ;
  • corrige le comportement de fonctions stables utilisées comme argument d’un appel CALL ;
  • la fonction pg_sequence_last_value() retourne maintenant NULL plutôt que de remonter une erreur quand elle est appelée sur une séquence non tracée dans une instance secondaire et sur séquence temporaire d’une autre session ;
  • corrige l’analyse des opérateurs ignorés dans websearch_to_tsquery() ;
  • vérifie correctement la possibilité de mettre à jour les colonnes cibles des vues par INSERT ... DEFAULT ;
  • verrouille les séquences détenues lors de ALTER TABLE ... SET LOGGED|UNLOGGED ;
  • ne remonte par d’erreurs si un déclencheur AFTER en file d’attente n’existe plus ;
  • Corrige la sélection d’un index arbitral pour INSERT ... ON CONFLICT quand l’index souhaité a des expressions ou des prédicats, par exemple à travers une vue actualisable ;
  • refuse la modification d’une table temporaire d’une autre session avec ALTER TABLE ;
  • corrige la manipulation des statistiques étendues sur expressions dans CREATE TABLE ... LIKE STATISTICS ;
  • corrige l'échec du recalcul des sous-requêtes générées par les agrégats MIN() ou MAX() ;
  • désactive le caractère de soulignement dans les paramètres positionnés ;
  • empêche une défaillance lorsqu’une fonction JIT en ligne remonte une erreur ;
  • corrige la manipulation de sous-transactions d’une transaction préparée lors du démarrage d’une instance secondaire ;
  • empêche l’initialisation incorrecte d’un créneau de réplication logique ;
  • corrige une fuite mémoire dans le processus d’envoi des WAL de réplication logique quand la publication change pour une table partitionnée pour laquelle les partitions ont des types de données d’enregistrement qui diffèrent physiquement de la table ;
  • désactive la création de tickets de sessions TLS avec état avec OpenSSL ;
  • corrige la manipulation par PL/pgSQL de plages d’entier contenant des caractères de soulignement (par exemple, FOR i IN 1_001..1_002) ;
  • corrige l’incompatibilité entre PL/Perl et Perl 5.40 ;
  • plusieurs correctifs liés à des fonctions et déclencheurs récursifs en PL/Python ;
  • garantit le fait que pg_restore -l rapporte les tables dépendantes des entrées contenues correctement ;
  • pg_stat_statements passe maintenant un identifiant de requête pour les ordres utilitaires apparaissant dans des fonctions en langage SQL ;
  • corrige postgres_fdw lors d’une correspondance entre une table étrangère et une vue distante non triviale ;
  • postgres_fdw n’envoie plus la clause FETCH FIRST WITH TIES à un serveur distant.

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.

Note à propos de PostgreSQL 17 Bêta

Cette publication marque la troisième publication bêta de PostgreSQL 17 et rapproche d’une étape la communauté de la disponibilité probablement vers la fin du troisième trimestre.

Dans l’esprit de la communauté PostgreSQL « open-source », nous vous encourageons fortement à tester les nouvelles fonctionnalités de PostgreSQL sur vos systèmes pour nous aider à éliminer les bogues et autres problèmes existants. Bien que nous ne recommandons pas l’utilisation de PostgreSQL 17 Bêta 3 dans des environnements de production, nous vous encourageons à trouver des moyens de tester les applications avec cette version.

Vos tests et retours aideront la communauté à s’assurer que la publication de PostgreSQL 17 maintiendra nos standards pour livrer une version fiable et stable de la base de données relationnelle « open-source » la plus avancée du monde. Merci de prendre connaissance du processus de publication et de comment vous pouvez contribuer : (https://www.postgresql.org/developer/beta/).

Mettre à jour vers PostgreSQL 17 Bêta 3

Afin de mettre à jour vers PostgreSQL 17 Bêta 3 à partir d’une publication antérieure de PostgreSQL, vous aurez besoin d’utiliser une stratégie similaire à la mise à jour entre versions majeures de PostgreSQL (par exemple : pg_upgrade ou pg_dump/pg_restore). Pour plus d’information, merci de prendre connaissance de la documentation sur la mise à jour.

Changements depuis la Bêta 2

Les corrections et changements dans PostgreSQL 17 Beta 3 incluent :

  • renommage du paramètre standby_slot_names vers synchronized_standby_slots :
  • plusieurs correctifs sur SQL/JSON ;
  • corrections de pg_combinebackup --clone ;
  • correction de pg_createsubscriber pour fonctionner avec un nom de base de données contenant un caractère espace ;
  • pg_createsubscriber supprime maintenant les souscriptions préexistantes lors de l’exécution sur une base de données cibles ;
  • amélioration de l’efficacité lors de la récupération d’information sur une souscription avec pg_upgrade ;
  • correction du comportement d’un repli TLS avec sslmode=prefer en erreur quand un serveur envoie une erreur pendant le processus de démarrage ;
  • documentation d’un cas d’erreur avec une sauvegarde incrémentale de pg_basebackup sur une instance secondaire lorsqu’il est exécuté immédiatement après la sauvegarde précédente.
  • Correction d’un problème où pg_upgrade --transaction-size peut faire qu’un processus d’arrière-plan (backend) consomme de la mémoire dans un ordre de grandeur de plus ;

Merci de se référer aux notes de publication pour la liste complète des nouveautés et changements, ainsi qu’aux items ouverts de PostgreSQL pour plus de détails sur les changements et correctifs.

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.