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.
| 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.
| Overall Score | 7.5 |
|---|---|
| Component | client |
| Vector | AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H |
If you wish to report a new security vulnerability in PostgreSQL, please send an email to security@postgresql.org.
For reporting non-security bugs, please see the Report a Bug page.