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.
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 permissionBYPASSRLS
. -
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 depg_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 indexBRIN
existants, vous devriez pouvoir corriger le problème avec unREINDEX
sur l’index. -
Corrige le retour de la commande
EXPLAIN
pour avoir une imbrication correcte des marqueursXML
pour les plans “tri incrémental”. -
Plusieurs corrections de fuites de mémoire, dont une qui touche aux stratégies
RLS
, l’utilisation deCALL
en Pl/pgSQL, le traitement du signalSIGHUP
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
depsql
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
- PostgreSQL (402) ,
- release (84) ,
- mineure (31) ,
- sécurité (55) ,
- 13 (24) ,
- 12 (29) ,
- 11 (26) ,
- 10 (32) ,
- 9 (57) ,
- update (46)