Paris, le 9 août 2024

Le PostgreSQL Global Development Group a publié une mise à jour pour toutes les versions supportées de PostgreSQL, c’est-à-dire les versions 16.4, 15.8, 14.13, 13.16 et 12.20, ainsi que la troisième version bêta de PostgreSQL 17. Cette version corrige une faille de sécurité et plus de 55 bugs signalés au cours des derniers mois. Voici notre traduction.

visuel annonce

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é

  • CVE-2024-7348 : PostgreSQL relation replacement during pg_dump executes arbitrary SQL

Score CVSS v3 : 8.8

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

Un attaquant capable de créer et de supprimer des objets non temporaires pouvait injecter du code SQL qui serait exécuté par une session pg_dump concurrente avec les privilèges du rôle qui exécute pg_dump (qui est souvent un superuser). L’attaque consiste à remplacer une séquence ou un objet similaire par une vue ou une table étrangère qui exécutera du code malveillant. Pour éviter cela, introduction d’un nouveau paramètre serveur restrict_nonsystem_relation_kind qui peut désactiver l’expansion des vues ainsi que l’accès aux tables étrangères. pg_dump sait désormais le faire lorsque le paramètre est disponible. Notez que l’attaque n’est empêchée que si pg_dump et le serveur à partir duquel la sauvegarde est faite sont suffisamment nouveaux pour avoir cette correction.

Le projet PostgreSQL remercie Noah Misch pour avoir signalé ce 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.

  • Éviter des résultats incorrects des plans “Merge Right Anti Join” dans le cas où la relation interne est connue pour avoir des clés de jointure uniques, et où la jointure pourrait mal se comporter lorsqu’il y a des clés de jointure dupliquées dans la relation externe.
  • Suppression d’une boucle infinie dans VACUUM.
  • Correction de la configuration d’élagage des partitions lors d’un ALTER TABLE DETACH ... CONCURRENTLY.
  • Correction du comportement des fonctions stables utilisées comme argument d’une instruction CALL.
  • pg_sequence_last_value() renvoie désormais NULL au lieu de provoquer une erreur lorsqu’elle est appelée sur des séquences non journalisées sur des serveurs secondaires et sur des séquences temporaires d’autres sessions.
  • Correction des opérateurs ignorés avec websearch_to_tsquery().
  • Vérifier correctement la possibilité de mise à jour des colonnes de vue ciblées par INSERT ... DEFAULT.
  • Verrouiller les séquences possédées pendant ALTER TABLE ... SET LOGGED|UNLOGGED.
  • Ne pas renvoyer d’erreur si un déclencheur AFTER mis en file d’attente n’existe plus.
  • Corriger la sélection arbitraire d’un index pour INSERT ... ON CONFLICT lorsque l’index souhaité contient des expressions ou des prédicats, à travers, par exemple, une vue à mettre à jour.
  • Refuser de modifier une table temporaire d’une autre session avec ALTER TABLE.
  • Correction de la manipulation des statistiques étendues sur les expressions dans CREATE TABLE... LIKE STATISTICS.
  • Correction de l’impossibilité de recalculer les sous-requêtes générées à partir des agrégats MIN() ou MAX().
  • Refuser l’utilisation de tiret bas dans les paramètres de position.
  • Eviter un arrêt brutal lorsqu’une fonction intégrée JIT renvoie une erreur.
  • Correction du traitement des sous-transactions des transactions préparées lors du démarrage d’un serveur hot standby.
  • Prévention de l’initialisation incorrecte de slot de réplication logique.
  • Correction d’une fuite de mémoire dans le processus WAL sender de réplication logique lors de la publication de modifications dans une table partitionnée dont les partitions ont des types de lignes physiquement différents de ceux de la table.
  • Désactive la création de tickets de session TLS stateful par OpenSSL.
  • Correction de la façon dont PL/pgSQL gère les plages d’entiers contenant des tirets bas (par exemple, FOR i IN 1_001..1_002).
  • Correction d’une incompatibilité entre PL/Perl et Perl 5.40.
  • Plusieurs corrections liées aux fonctions PL/Python récursives et aux déclencheurs.
  • Assure que pg_restore -l rapporte correctement les entrées dépendantes de la table des matières.
  • pg_stat_statements transmet désormais un identifiant de requête pour les requêtes utilitaires (non-SELECT/INSERT/UPDATE) qui apparaissent dans les fonctions en langage SQL.
  • Correction de postgres_fdw lors de la mise en correspondance d’une table étrangère avec une vue distante non triviale.
  • postgres_fdw n’envoie plus de clause FETCH FIRST WITH TIES à un serveur distant.

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.

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.