psql's \gset allows overwriting specially treated variables

The \gset meta-command, which sets psql variables based on query results, does not distinguish variables that control psql behavior. If an interactive psql session uses \gset when querying a compromised server, the attacker can execute arbitrary code as the operating system account running psql. Using \gset with a prefix not found among specially treated variables, e.g. any lowercase string, precludes the attack in an unpatched psql.

The PostgreSQL project thanks Nick Cleaton for reporting this problem.

Version Information

Affected Version Fixed In Fix Published
13 13.1 Nov. 12, 2020
12 12.5 Nov. 12, 2020
11 11.10 Nov. 12, 2020
10 10.15 Nov. 12, 2020
9.6 9.6.20 Nov. 12, 2020
9.5 9.5.24 Nov. 12, 2020

For more information about PostgreSQL versioning, please visit the versioning page.

CVSS 3.0

Overall Score 7.5
Component client
Vector AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H

Reporting Security Vulnerabilities

If you wish to report a new security vulnerability in PostgreSQL, please send an email to

For reporting non-security bugs, please see the Report a Bug page.