Paris, le 13 novembre 2020

Le PostgreSQL Global Development Group a annoncé la mise à jour de toutes les versions supportées de PostgreSQL, soit les versions 13.1, 12.5, 11.10, 10.15, 9.6.20, et 9.5.24. Cette mise à jour corrige trois problèmes de sécurité et plus de 65 bogues rapportés au cours des trois derniers mois.

visuel annonce

En raison de la nature de la CVE-2020-25695, il est conseillé de procéder à la mise à jour dès que possible.

Il s’agit de l’avant-dernière mise à jour de PostgreSQL 9.5, qui cessera d’être corrigée le 11 février 2021. Si vous utilisez PostgreSQL 9.5 dans un environnement de production, nous vous suggérons de planifier une mise à jour de version majeure.

Pour connaître la liste complête des modifications, vous pouvez vous référer aux notes de mise à jour.

Correctifs de sécurité

  • CVE-2020-25695 : plusieurs fonctionnalités peuvent échapper au bac à sable des “opérations restreintes par sécurité”.

Versions affectées : 9.5 - 13

L’équipe dédiée à la sécurité ne teste typiquement pas les versions non supportées, cependant ce problème est ancien.

Un attaquant disposant des permissions pour créer un objet non temporaire dans au moins un schéma peut exécuter de manière arbitraire des fonctions SQL de son choix en utilisant l’attribut SUPERUSER.

Bien qu’une mise à jour rapide de PostgreSQL soit la meilleure solution pour la plupart des utilisateurs, ceux qui ne sont pas en mesure de le faire peuvent contourner cette vulnérabilité en désactivant l’autovacuum et en n’exécutant pas manuellement ANALYZE, CLUSTER, REINDEX, CREATE INDEX, VACUUM FULL, REFRESH MATERIALIZED VIEW, ou une restauration depuis la sortie de la commande pg_dump. Les performances risquent de se dégrader rapidement si cette solution de contournement est appliquée.

La commande VACUUM sans l’option FULL peut être utilisée sans risque, il en va de même pour toutes les autres commandes si les objets ciblés appartiennent à un utilisateur de confiance.

Le projet PostgreSQL remercie Etienne Stalmans pour avoir signalé ce problème.

  • CVE-2020-25694 : les reconnexions peuvent provoquer une baisse du niveau de sécurité configuré dans certains outils.

Versions affectées : 9.5 - 13

L’équipe dédiée à la sécurité ne teste typiquement pas les versions non supportées, cependant ce problème est ancien.

Beaucoup d’outils fournis avec PostgreSQL ont des options qui permettent de créer de nouvelles connexions. Certaines de ces applications ne réutilisent que les paramètres de connexion de base (par exemple: host, user, port), en oubliant les autres. Dans le cas où l’oubli concerne un paramètre lié au niveau de sécurité (par exemple: channel_binding, sslmode, requirepeer, gssencmode), un attaquant peut utiliser cette opportunité pour réaliser une attaque dite man in the middle ou observer les transmissions sans qu’elles ne soient chiffrées.

Les applications concernées sont clusterdb, pg_dump, pg_restore, psql, reindexdb, et vacuumdb. La vulnérabilité se produit uniquement quand on utilise un de ces outils avec une chaîne de connexion qui contient un paramètre ayant trait à la sécurité.

Cette correction rectifie également la façon dont la commande \connect de psql réutilise les connexions. Désormais, tous les paramètres d’une chaîne de connexion précédente qui ne sont pas modifiés sont réutilisés.

Le projet PostgreSQL remercie Peter Eisentraut pour avoir signalé ce problème.

  • CVE-2020-25696 : la commande \ gset de psql permet d’écraser des variables dites “spéciales”.

Versions affectées : 9.5 - 13

L’équipe dédiée à la sécurité ne teste typiquement pas les versions non supportées, cependant ce problème est ancien.

La méta commande \ gset, qui permet à psql d’allouer des variables en fonction du retour d’une requête, ne distingue pas les variables qui permettent de contrôler le comportement de psql des autres. Si une session interactive utilise \ gset en exécutant une requête sur un serveur compromis, un attaquant peut exécuter des instructions arbitraires avec l’utilisateur du système d’exploitation qui exécute la session psql. Utiliser \ gset avec un préfixe qui ne correspond pas aux variables dites “spéciales”, comme par exemple une chaîne de caractères en minuscule, ne permet pas d’utiliser cette faille de sécurité sur une version de psql non patchée.

Le projet PostgreSQL remercie Nick Cleaton pour avoir signalé ce problème.

Corrections de bogues et améliorations

Cette mise à jour corrige également plus de 65 bogues qui ont été rapportés dans les mois précédents. Certains d’entre eux affectent uniquement la version 13, mais peuvent également concerner les autres versions supportées.

Ces corrections incluent :

  • Corrige le protocole de réplication en s’assurant que deux évènements de type “terminaison de commande” sont attendus pour START_REPLICATION.

  • S’assure que fsync est appelé pour les caches SLRU maintenus par PostgreSQL. Cela empêche de potentielles pertes de données dues à un crash du système d’exploitation.

  • Corrige l’utilisation de ALTER ROLE pour les utilisateurs ayant la permission BYPASSRLS.

  • ALTER TABLE ONLY ... DROP EXPRESSION n’est pas autorisé sur les tables partitionnées quand il y a des tables enfants.

  • S’assure que ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER ne s’applique pas sur les tables enfants.

  • Corrige ALTER TABLE ... SET NOT NULL sur les tables partitionnées pour éviter des risques potentiels de verrou mortel lors de l’exécution de pg_restore en parallèle.

  • Corrige la gestion des expressions dans CREATE TABLE LIKE avec l’héritage.

  • DROP INDEX CONCURRENTLY n’est pas autorisé sur les tables partitionnées.

  • Autorise LOCK TABLE à fonctionner sur une vue qui s’auto-référence au lieu de produire une erreur.

  • Plusieurs corrections d’erreurs sur la collecte des statistiques et la progression du reporting pour REINDEX CONCURRENTLY.

  • S’assure que les colonnes de type GENERATED sont mises à jour quand une colonne dont elle dépend est mise à jour par une règle ou une vue modifiable.

  • Supporte le partitionnement de type HASH avec des colonnes de type tableaux de chaînes de caractères comme clé de partitionnement.

  • Autorise la méthode jsonpath .datetime() à accepter l’horodatage au format ISO 8601.

  • Pendant un arrêt de type smart, s’assure que les processus en tâche de fond ne sont pas arrêtés tant que tous les processus de premier plan ne sont pas terminés. Cela corrige un problème concernant l’exécution des requêtes parallélisées.

  • Plusieurs corrections sur le planificateur de requêtes et l’optimiseur.

  • S’assure que les données sont dé-toastées avant d’être insérées dans les index BRIN. Cela se manifeste par des messages d’erreurs du type “missing chunk number 0 for toast value NNN”. Si vous avez des erreurs similaires avec des index BRIN existants, vous devriez pouvoir corriger le problème avec un REINDEX sur l’index.

  • Corrige le retour de la commande EXPLAIN pour avoir une imbrication correcte des marqueurs XML pour les plans “tri incrémental”.

  • Plusieurs corrections de fuites de mémoire, dont une qui touche aux stratégies RLS, l’utilisation de CALL en Pl/pgSQL, le traitement du signal SIGHUP sur des paramètres de configuration qui ne peuvent pas être rechargés sans redémarrage et un cas particulier liés aux accès indexés sur les partitions.

  • libpq permet désormais l’utilisation de lignes de taille arbitraire dans le fichier .pgpass.

  • Sous Windows, psql peut désormais lire le retour de commandes de type guillemet oblique en mode texte, et non en mode binaire, pour qu’il puisse gérer correctement les nouvelles lignes.

  • Quand la commande \ connect de psql réutilise des paramètres de connexion, s’assure que tous les paramètres d’une précédente chaîne de connexion non remplacés sont réutilisés.

  • S’assure que pg_dump collecte les informations sur les colonnes à propos des tables de configuration des extensions, ce qui évite des crashs lorsque l’on spécifie l’option --insert.

  • S’assure que les commandes pg_restore parallélisées traitent les clés étrangères référençant des tables partitionnées dans le bon ordre.

  • Plusieurs corrections sur contrib/pgcrypto, dont un problème de fuite de mémoire.

Cette mise à jour contient également une actualisation des données tzdata en version 2020d relatives aux modifications de la loi sur l’heure d’été à Fidji, au Maroc, en Palestine, au Yukon Canadien, sur l’île Macquarie, et la Station Casey en Antarctique ; plus des corrections historiques pour la France, la Hongrie, Monaco, et la Palestine.

Liens


DALIBO

DALIBO est le spécialiste français de PostgreSQL. Nous proposons du support, de la formation et du conseil depuis 2005.