CVE-2026-54291: PostgreSQL JDBC Driver Channel Binding Downgrade Vulnerability
pgjdbc, the official PostgreSQL JDBC driver, contains a flaw in versions 42.7.4 through 42.7.11 where connections explicitly configured to require channel binding security (channelBinding=require) can be silently downgraded to a weaker authentication method. An attacker positioned to intercept TLS traffic can force this downgrade by presenting a certificate with an unsupported signature algorithm, causing the driver to drop the man-in-the-middle protection that channel binding provides. The vulnerability stems from incomplete validation: the driver checks only that the server advertises a secure mechanism but fails to reject empty or missing channel-binding data. Version 42.7.12 and later fix this issue.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 5.9 MEDIUM · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N
- Weaknesses (CWE)
- CWE-636, CWE-757
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-07-06 / 2026-07-09
NVD description (verbatim)
pgjdbc is an open source postgresql JDBC Driver. In releases 42.7.4 through 42.7.11, channelBinding=require connections can be silently downgraded from SCRAM-SHA-256-PLUS with channel binding to plain SCRAM-SHA-256 without it, losing the man-in-the-middle protection the setting is meant to guarantee. An attacker who can intercept the TLS connection can trigger the downgrade with a certificate whose signature algorithm has no tls-server-end-point channel-binding hash, because the bundled com.ongres.scram:scram-client returns an empty byte array instead of failing and pgJDBC ScramAuthenticator checks only that the server advertised a PLUS mechanism, without rejecting the empty binding or checking that the negotiated mechanism uses channel binding. This issue is fixed in version 42.7.12.
3 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability affects the SCRAM authentication path in pgjdbc. When channelBinding=require is set, the driver should enforce SCRAM-SHA-256-PLUS with channel binding, which binds the authentication handshake to the TLS connection's cryptographic parameters. However, the bundled scram-client library returns an empty byte array instead of failing when a certificate signature algorithm lacks a tls-server-end-point channel-binding hash. The ScramAuthenticator in pgjdbc only validates that the server advertised a PLUS mechanism (SCRAM-SHA-256-PLUS) but does not reject the empty binding or verify that the negotiated mechanism actually uses channel binding. This allows silent downgrade to plain SCRAM-SHA-256, which lacks the connection-binding guarantee. An attacker with network-level access (TLS interception capability) can exploit this by crafting a malicious certificate to trigger the empty-binding condition.
Business impact
For organizations relying on pgjdbc with channelBinding=require to protect database connections against interception, this vulnerability undermines a critical security control. Affected deployments lose man-in-the-middle protection without user awareness—the downgrade is silent, so administrators and developers may not realize their security posture has degraded. In environments where PostgreSQL is accessed over untrusted networks or where certificate-based authentication is a primary defense layer, this creates material risk of credential compromise or query tampering. The silent nature of the failure makes detection and forensic analysis harder than an obvious authentication failure would be.
Affected systems
PostgreSQL JDBC Driver (pgjdbc) versions 42.7.4 through 42.7.11 are affected. Any application using pgjdbc in this version range with channelBinding=require configured in the connection string is vulnerable. Systems not explicitly setting this parameter are not affected, as the default behavior does not require channel binding. Verify your pgjdbc version in your application's dependency tree or class path.
Exploitability
Exploitation requires network-level access to intercept or manipulate TLS traffic between the client and PostgreSQL server (MITM position). The attacker must also craft a TLS certificate with a signature algorithm that lacks a tls-server-end-point channel-binding hash. This is not trivial but is feasible in scenarios where an attacker controls network routing, operates a malicious proxy, or compromises network infrastructure. The attack is passive from the driver's perspective—no user interaction is needed. CVSS 5.9 (Medium) reflects the network access requirement and conditional impact (integrity without availability or confidentiality loss in the base scenario).
Remediation
Upgrade pgjdbc to version 42.7.12 or later. This is a direct, version-specific fix with no configuration workarounds. If immediate upgrade is not feasible, applications that do not require channel binding should remove or set channelBinding=prefer (the default) rather than channelBinding=require, though this sacrifices the intended protection. For sensitive deployments, network segmentation and trusted network paths reduce the feasibility of MITM attacks independent of the driver fix.
Patch guidance
Pgjdbc 42.7.12 is the fixed version. Check your Maven pom.xml, Gradle build file, or equivalent dependency manager for the current version and update to 42.7.12 or any subsequent stable release. If you use a downstream distribution (e.g., through Spring Boot's dependency management or a Linux package manager), verify that the updated version is available and apply it. Test the upgrade in a non-production environment first to confirm compatibility with your PostgreSQL server version and application code.
Detection guidance
Review your application's pgjdbc dependency: extract the version from your build artifacts, class path, or dependency list (e.g., grep for org.postgresql:postgresql or check java -version + jar -tf output). Check connection strings or configuration files for channelBinding=require settings. Monitor for authentication errors or connection drops if an attacker is actively exploiting this; however, the silent downgrade means normal operation may persist even under attack. If forensic analysis is needed, enable JDBC driver logging (loglevel=DEBUG) on test systems to observe negotiated mechanisms and channel-binding headers, though production logging of credentials should follow your security policy.
Why prioritize this
Although CVSS is Medium (5.9), this vulnerability warrants prompt attention because: (1) it silently downgrades security, making it invisible to operators; (2) it requires explicit, often manually-configured, channelBinding=require settings, suggesting it affects security-conscious deployments; (3) pgjdbc is widely used in enterprise Java applications; (4) the fix is version-specific and non-disruptive. Organizations that have intentionally set channelBinding=require should treat this as a configuration-integrity issue and prioritize patching within their normal update cycles.
Risk score, explained
CVSS 5.9 rates this as Medium severity. The network-accessible attack vector and conditional prerequisite (attacker MITM position) prevent a higher base score. However, the integrity impact is high (potential for undetected query manipulation or credential interception), and the silent nature of the downgrade compounds operational risk. For organizations with strict network segmentation or where PostgreSQL is accessed over private networks, risk is lower; for those accessing databases over the internet or untrusted networks, effective risk is elevated despite the CVSS score.
Frequently asked questions
Do I need to set channelBinding=require to be affected?
Yes. The vulnerability only manifests when channelBinding=require is explicitly set in the pgjdbc connection string. The default is channelBinding=prefer, which does not enforce channel binding and is not vulnerable to this downgrade. If you have not explicitly configured channelBinding=require, this CVE does not affect your security posture.
What exactly is channel binding, and why does losing it matter?
Channel binding cryptographically ties the SCRAM authentication handshake to the properties of the underlying TLS connection. It prevents an attacker who intercepts TLS from replaying or modifying the authentication exchange, even if they possess a valid credential or certificate. Without it, an attacker in a MITM position can modify queries or access data. Organizations that require channelBinding=require typically operate in zero-trust or untrusted-network environments where this protection is essential.
Can I work around this without upgrading pgjdbc immediately?
If you must delay the upgrade, you can reduce immediate risk by: (1) switching channelBinding=require to channelBinding=prefer (removing the enforcement), which trades protection for availability but is not vulnerable; (2) restricting network access to PostgreSQL servers via firewall rules or VPN, raising the bar for MITM attacks; (3) enforcing certificate pinning or mutual TLS at a higher layer. However, these are mitigations, not fixes. Upgrade to 42.7.12 as soon as practical.
How can I verify that my PostgreSQL JDBC driver is vulnerable?
Check your application's dependency list: run mvn dependency:tree or equivalent for your build tool, and search for org.postgresql:postgresql or similar. If the version is 42.7.4 through 42.7.11 and you have channelBinding=require in your connection string (in code or configuration), you are vulnerable. If the version is 42.7.12 or later, or if you do not set channelBinding=require, you are not affected.
This analysis is provided for informational purposes and is based on the publicly disclosed CVE details and vendor advisory. Organizations should verify patch availability and compatibility with their specific PostgreSQL server version and application dependencies before deploying updates. Actual risk depends on network topology, exposure of database endpoints, and explicit configuration of channelBinding=require. Testing in non-production environments is strongly recommended prior to patching production systems. For the most current guidance, consult the official PostgreSQL JDBC driver repository and security advisories. Source: NVD (public-domain), retrieved 2026-08-15. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-53852MEDIUMOpenClaw Scope Containment Bypass in Device Re-Pairing
- CVE-2026-55568MEDIUMGuzzle HTTPS Proxy Cleartext Credential Exposure
- CVE-2026-6092MEDIUMWolfSSL Encrypt-then-MAC Downgrade Vulnerability
- CVE-2026-49317LOWIndian Motorcycle Scout Bobber + Tech Infotainment PIN Bypass
- CVE-2026-49318LOWIndian Motorcycle Scout Bobber + Tech PIN Bypass Vulnerability
- CVE-2026-53837LOWOpenClaw Mattermost Event Handler Policy Bypass Vulnerability
- CVE-2026-54762HIGHTraefik Kubernetes Auth Bypass via Unresolved Secrets
- CVE-2026-54780LOWCoreWCF WS-Security Digest Algorithm Bypass