LOXODATA

PostgreSQL 10.4 et autres correctifs

2018-05-14   993 mots, 5 minutes de lecture

2018-05-10 Publication de mises à jour de sécurité

Le PostgreSQL Global Development Group a publié une mise à jour de sécurité pour toutes les versions supportées du système de gestion de base de données PostgreSQL. Les mises à jour incluent les versions 10.4, 9.6.9, 9.5.13, 9.4.18 et 9.3.23.

L’objectif de cette publication est de corriger une faille de sécurité ainsi que plusieurs bogues rapportés ces 3 derniers mois. Il est conseillé aux utilisateurs de faire la mise à jour le plus tôt possible.

La section « Mise à jour » présente les étapes post-installation des correctifs de sécurité et de « volatilité incorrecte et marquage de sécurité pour la parallélisation ».

PostgreSQL a changé son système de numérotation avec la publication de la version 10.0. En conséquence, une mise à jour de 10.0, 10.1, 10.2 ou 10.3 vers 10.4 est considérée comme une mise à jour mineure.

Problème de sécurité

Une vulnérabilité a été fermée par cette publication :

  • CVE-2018-1115: Liste de contrôle d’accès à la fonction pg_logfile_rotate() trop permissive.

La section « Mise à jour » ci-dessous présente les étapes post-installation.

Corrections de bogues et améliorations

Cette mise à jour corrige également plus de 50 bogues rapportés au cours des derniers mois. Certains n’affectent que la version 10, mais beaucoup affectent toutes les versions supportées.

Ces corrections comprennent :

  • Correction du marquage incorrect de volatilité (volatility) et sécurisation de la parallélisation (parallel-safety) sur plusieurs fonctions internes pour assurer les optimisations du planificateur de requête ;
  • Plusieurs corrections sur le partitionnement, incluant de potentiels plantages tout en autorisant TRUE et FALSE à être utilisés comme bornes de partitions ;
  • Correction lorsque une nouvelle valeur de TOAST pouvait être assignée à un TOAST OID mort mais pas encore effacé (dead-but-not-yet-vacuumed), qui se traduit par une erreur du type “unexpected chunk number 0 (expected 1) for toast value nnnnn” ;
  • Correction sur “CREATE TABLE … LIKE” avec une colonne identité en bigint sur une plateforme 32 bits ;
  • Correction de la fuite mémoire lors de l’exécution d’une requête qui effectue des jointures de hashage (hash-join) de façon répétée ;
  • Correction de plusieurs plantages de requêtes utilisant GROUPING SET ;
  • Evite l'échec de l’interruption lors d’annulation de requête (query-cancel) ou fin de session (session-termination) lors du commit d’un transaction préparée (prepared transaction) ;
  • Réduction du verrouillage lors de la planification d’un worker d’autovacuum, ce qui prévient la perte potentielle de l’accès concurrent des workers ;
  • Correction d’une exécution éventuellement ralentie de REFRESH MATERIALIZED VIEW CONCURRENTLY ;
  • Plusieurs corrections concernant les plans d’exécution utilisant les parcours d’index seuls (index-only scans).
  • Evite les verrous d’interblocage (deadlocks) lors de commandes concurrentes de CREATE INDEX CONCURRENTLY sous isolation de transaction SERIALIZABLE ou REPEATABLE READ.
  • Plusieurs corrections pour les index SP-GiST, incluant une recherche en fonction des collations sur les colonnes de texte
  • Correction de plusieurs bogues relatifs au comptage du nombre de tuples dans les index partiels GiST, SP-GiST et Bloom.
  • Plusieurs corrections pour le décodage logique et la réplication
  • Correction de la mauvaise mise entre quotes (misquoting) des valeurs des variables de liste GUC (e.g. local_preload_libraries, session_preload_libraries, shared_preload_libraries, temp_tablespaces)
  • Plusieurs corrections pour pg_stat_activity
  • Plusieurs corrections pour ecpg
  • Correction de pg_recvlogical pour assurer la compatibilité avec les versions antérieures à PostgreSQL 10.
  • Plusieurs corrections pour pg_rewind

Cette mise à jour contient également la publication 2018d de tzdata, avec des mises à jour pour la Palestine et l’Antarctique (base Casey), auxquelles viennent s’ajouter des corrections historiques pour le Portugal et ses colonies, tout comme Enderbury, la Jamaïque, les îles Turques-et-Caïques, et l’Uruguay.

Mise à jour

Toutes les mises à jour sont cumulatives. Comme les autres publication mineures, pour les utilisateurs il n’est pas nécessaire de faire de dump suivi d’un rechargement des données ou d’utiliser pg_upgrade pour appliquer cette mise à jour (cependant pour cette publication, référez-vous aux notes sur « la volatilité et le marquage de sécurité de la parallélisation ») ; il suffit alors simplement d’arrêter PostgreSQL et de mettre à jour les binaires.

Les utilisateurs ayant sauté une ou plusieurs mises à jour, peuvent avoir besoin d’effectuer des étapes additionnelles après la mise à jour. Veuillez vous référer aux notes des précédentes versions pour plus de détails.

Étapes post-installation pour CVE-2018-1115

Si « adminpack » est installé, dans les versions 9.6 ou 10, l’administrateur de base de données devra alors effectuer les commandes suivantes dans toutes les base de données dans lesquelles adminpack a été installé :

ALTER EXTENSION adminpack UPDATE;

Étapes post-installation pour le marquage des fonctions

Fonctions qui doivent être marquées « volatile »

  • cursor_to_xml
  • cursor_to_xmlschema
  • query_to_xml
  • query_to_xml_and_xmlschema
  • query_to_xmlschema

Fonctions qui doivent être marquées « parallel-unsafe »

  • binary_upgrade_create_empty_extension,
  • brin_desummarize_range
  • brin_summarize_new_values
  • brin_summarize_range
  • cursor_to_xml
  • cursor_to_xmlschema
  • gin_clean_pending_list
  • pg_import_system_collations
  • ts_rewrite
  • ts_stat

Si vous utilisez des fonctions parmi celles ci-dessus, vous pouvez mettre à jour le marquage d’une des manières suivantes :

Option 1 : Mettre à jour le marquage manuellement dans la table “pg_proc” de toutes les bases de données utilisant ces fonctions. Pour réaliser cela, exécuter les commandes suivantes en tant que super-utilisateur :

/* Functions that should be marked "volatile" */
ALTER FUNCTION pg_catalog.cursor_to_xml(refcursor, int, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.cursor_to_xmlschema(refcursor, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xml_and_xmlschema(text, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xmlschema(text, boolean, boolean, text) VOLATILE;
/* Functions that should be marked "parallel-unsafe" */
ALTER FUNCTION pg_catalog.binary_upgrade_create_empty_extension(text, text, bool, text, _oid, _text, _text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.brin_desummarize_range(regclass, bigint) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.brin_summarize_new_values(regclass) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.brin_summarize_range(regclass, bigint) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.cursor_to_xml(refcursor, int, boolean, boolean, text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.cursor_to_xmlschema(refcursor, boolean, boolean, text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.gin_clean_pending_list(regclass) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.pg_import_system_collations(regnamespace) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_rewrite(tsquery, text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_rewrite(tsquery, tsquery, tsquery) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_stat(text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_stat(text, text) PARALLEL UNSAFE;

Option 2 : Lancer pg_upgrade dans une version contenant le marquage correct des données (version 10.4 et supérieure).

Liens