
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).