LOXODATA

PostgreSQL 16.1 et autres correctifs

2023-11-10   1221 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.1, 15.5, 14.10, 13.13, 12.17 et 11.22. Cette publication corrige près de 55 bogues repérés durant les derniers mois.

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 “Mise à jour” pour plus de détails.

Annonce de fin de support pour PostgreSQL 11

Ceci est la dernière publication pour PostgreSQL 11. PostgreSQL 11 arrive au terme de son support et ne recevra plus de correctifs de sécurité ou de bogues. Si vous utilisez PostgreSQL 11 en production, nous vous encourageons à mettre à jour vers une version plus récente et supportée de PostgreSQL. Se référer à notre politique de version pour plus d’informations.

Problèmes de sécurité

CVE-2023-5868 : Divulgation mémoire dans les appels de fonctions d’aggrégation

CVSS v3 Base Score : 4.3

Versions affectées : 11 - 16. L'équipe de sécurité ne teste pas les versions non supportées, mais c’est un problème de longue date.

Certains appels à des fonctions d’aggrégation recevant en paramètre des arguments de type “unknown” peuvent divulguer des octets de mémoire du serveur depuis la fin de la valeur “unknown” jusqu’au prochain octet vide. Il est possible d’obtenir une valeur de type “unknown” par l’utilisation d’une chaîne littérale sans désignation de type. Nous n’avons pas confirmé ou évalué la viabilité des attaques qui pourraient profiter de la présence de données confidentielles dans les octets divulgués.

Le projet PostgreSQL remercie Jingzhou Fu pour avoir signalé ce problème.

CVE-2023-5869 : Dépassement de tampon lors d’un débordement d’entier dans une modification de tableau

CVSS v3 Base Score: 8.8

Versions affectées: 11 - 16. L'équipe de sécurité ne teste pas les versions non supportées, mais c’est un problème ancien.

Lors de la modification de certaines valeurs de tableaux SQL, des contrôles de débordement manquants permettent à des utilisateurs de bases de données authentifiés d'écrire des octets arbitraires dans une zone mémoire qui facilite l’exécution de code arbitraire. Les contrôles de débordement manquants permettent également aux utilisateurs authentifiés de la base de données de lire une large zone de la mémoire du serveur. Le correctif CVE-2021-32027 a couvert certaines attaques de cette description, mais il en a manqué d’autres.

Le projet PostgreSQL remercie Pedro Gallegos pour avoir signalé le problème.

CVE-2023-5870 : Le rôle ‘pg_cancel_backend’ peut signaler certains processus superutilisateur

CVSS v3 Base Score: 2.2

Versions affectées : 11 - 16. L'équipe de sécurité ne teste pas les versions non supportées, mais c’est un problème ancien.

La documentation stipule que le rôle ‘pg_cancel_backend’ ne peut signaler “un processus backend appartenant à un superutilisateur”. À l’inverse, il peut signaler des processus en tâche de fond, incluant l’exécuteur de la réplication logique. Il peut signaler les processus d’autovacuum et l’exécuteur d’autovacuum. Signaler les processus d’autovacuum et les deux exécuteurs ne permet pas d’exploiter quoi que ce soit. C’est pourquoi l’exploitation de cette vulnérabilté requiert une extension non supportée avec un processus de tâche de fond moins résilient. Par exemple, un processus de tâche de fond non légitime qui ne redémarre pas automatiquement se verra attribuer un refus de service eu égard de ce processus de tâche de fond.

Le projet PostgreSQL remercie Hemanth Sandrana et Mahendrakar Srinivasarao pour avoir signalé le 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.

  • Correction d’un problème où les index GiST avaient un comportement incorrect pendant une opération de “division de page” pouvant mener à des résultats incorrects dans des recherches d’index ultérieures. Merci de réindexer les index GiST après la mise à jour.
  • Correction d’un problème avec les index B-tree qui peuvent ne pas dédupliquer correctement des colonnes de type interval. Merci de réindexer tous les index B-tree incluant des colonnes de type interval après la mise à jour.
  • Amélioration de l’efficacité de l’indexation de valeurs de type date, timestamptz et timestamp dans des index BRIN. Bien que non nécéssaire, nous vous recommandons de réindexer après la mise à jour les index BRIN pouvant inclure ces types de colonnes.
  • Correction de l’insertion par lot dans des tables partitionnées.
  • Correction pour les tables partitionnées par hash avec plusieurs clés de partitionnement pendant les phases de génération et de pruning à l'éxécution pouvant entraîner des crashs dans certains cas.
  • Envoyer l’erreur correcte si pgrowlocks() est appliqué à une table partitionnée.
  • Correction d’une revalidation inconsistente de mise à jour concurentielle de lignes lors d’un MERGE avec le mode d’isolation READ COMMITTED.
  • Identifier correctement la table cible lors d’un UPDATE/DELETE/MERGE hérité même lorsque la table parente est exclue par contraintes.
  • Corrige la sur-allocation d’un tsvector construit.
  • Corrige la commande ALTER SUBSCRIPTION pour appliquer les changements avec l’option run_as_owner.
  • Plusieurs corrections pour la commande COPY FROM
  • Plusieurs corrections pour la gestion des lectures dégradées avec pg_control.
  • Corrige les erreurs “could not find pathkey item to sort” survenant lors de la planification de fonctions d’aggrégation avec les options ORDER BY ou DISTINCT.
  • Ajouter le temps des opérations d’extension de relation au temps d'écriture lorsque le paramètre track_io_timing est activé.
  • Suivre les dépendances de requêtes CALL en cache, et les replanifier au besoin.
  • Considérer les erreurs “out-of-memory” comme FATAL pendant la lecture des WAL.
  • Corrige la commande pg_dump pour exporter la nouvelle option run_as_owner des souscriptions.
  • Corrige la commande pg_restore pour inclure lors de restaurations sélectives les droits de niveau table et colonne pour les tables sélectionnées.
  • Ajout de la vérification dans la commande pg_upgrade de l’utilisation de types de données obsolètes abstime, reltime et tinterval.
  • Corrige la commande vacuumdb afin de prendre en compte l’exclusion de tables dans des schémas différents avec plusieurs option -N.
  • amcheck ne reportera plus les interruptions de suppression de page comme des corruptions.
  • Corrige les index btree_gin sur les colonnes de type interval afin de retourner correctement les données lors de l’utilisation des opérateurs < et <=.

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.

Nous recommandons de reindexer certains types d’index après la mise à jour, dont :

  • les index GiST
  • les index B-tree utilisant le type de données interval
  • les index BRIN utilisant les types de données date, timestamptz et timestamp

Avec PostgreSQL 12 et plus récent, vous pouvez utiliser la commande REINDEX CONCURRENTLY pour ne pas bloquer les écritures sur les index et tables affectés, par exemple :

REINDEX INDEX CONCURRENTLY your_index_name;

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.