High severity · published Aug 3, 2022
CVE-2022-31197
SQL Injection in ResultSet.refreshRow() with malicious column names in pgjdbc
8.0
CVSS
2.4%
EPSS
No
On KEV
Description
PostgreSQL JDBC Driver (PgJDBC for short) allows Java programs to connect to a PostgreSQL database using standard, database independent Java code. The PGJDBC implementation of the `java.sql.ResultRow.refreshRow()` method is not performing escaping of column names so a malicious column name that contains a statement terminator, e.g. `;`, could lead to SQL injection. This could lead to executing additional SQL commands as the application's JDBC user. User applications that do not invoke the `ResultSet.refreshRow()` method are not impacted. User application that do invoke that method are impacted if the underlying database that they are querying via their JDBC application may be under the control of an attacker. The attack requires the attacker to trick the user into executing SQL against a table name who's column names would contain the malicious SQL and subsequently invoke the `refreshRow()` method on the ResultSet. Note that the application's JDBC user and the schema owner need not be the same. A JDBC application that executes as a privileged user querying database schemas owned by potentially malicious less-privileged users would be vulnerable. In that situation it may be possible for the malicious user to craft a schema that causes the application to execute commands as the privileged user. Patched versions will be released as `42.2.26` and `42.4.1`. Users are advised to upgrade. There are no known workarounds for this issue.
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H
Attack vector
Network
Complexity
Low
Privileges
Low
User interaction
Required
Confidentiality
High
Integrity
High
Availability
High
Scope
Unchanged
Exploitation
Is it being used?
Exploit prediction (EPSS)2.4% · higher than 84% of CVEs
Exploited in the wildNo evidence yet
CISA KEVNot listed
Ransomware campaign useNot known
Affected products
Which versions
PG
pgjdbc · pgjdbc
>= 42.2.0, < 42.2.26; >= 42.3.0, < 42.4.1 · source: vendor
DL
Debian Linux · Debian
10.0 · source: NVD
FE
Fedora · Fedoraproject
35; 36 · source: NVD
PJ
Postgresql Jdbc Driver · Postgresql
before 42.2.26; 42.3.0 before 42.3.7; 42.4.0; 42.4.0; 42.4.1 · source: NVD
References
NVD
https://nvd.nist.gov/vuln/detail/CVE-2022-31197
CVE.org
https://www.cve.org/CVERecord?id=CVE-2022-31197
Patch
https://github.com/pgjdbc/pgjdbc/commit/739e599d52ad80f8dcd6efedc6157859b1a9d637
Exploit
https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-r38f-c4h4-hqq2
Mailing List
https://lists.debian.org/debian-lts-announce/2022/10/msg00009.html
lists.fedoraproject.org
https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/I6WHUADTZBBQLVHO4YG4XCWDGWBT4LRP/
lists.fedoraproject.org
https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/UTFE6SV33P5YYU2GNTQZQKQRVR3GYE4S/
lists.debian.org
https://lists.debian.org/debian-lts-announce/2024/12/msg00017.html
More from pgjdbc
7.5
CVE-2026-42198
pgjdbc: Unbounded PBKDF2 iterations in SCRAM authentication allows CPU exhaustion DoS
5.9
CVE-2026-107314
pgjdbc does not enforce requireAuth when the value excludes every authentication method
5.9
CVE-2026-54291
Silent channel-binding authentication downgrade via unsupported certificate algorithms
5.3
CVE-2026-107315
pgjdbc pads a value shorter than its declared length with bytes of earlier statements (rather than zeros)
4.2
CVE-2026-107313
pgjdbc stores bytes of earlier messages in place of a large value on GSS-encrypted connections
