Aug 29, 2026·6 min read·128 visits
MariaDB Connector/J fails to enforce TLS/SSL when negotiating the PAM 'dialog' authentication plugin. An attacker with on-path network access or running a rogue database server can trigger an authentication switch to 'dialog' and harvest the database password in plaintext.
A transport-security omission in the MariaDB Connector/J driver allows remote on-path adversaries or rogue database servers to capture database credentials in cleartext. Under default configurations (sslMode=DISABLE), the driver fails to enforce encrypted channels when negotiating the Pluggable Authentication Module (PAM) 'dialog' plugin, resulting in cleartext transmission of sensitive passwords.
MariaDB Connector/J is the official Java Database Connectivity (JDBC) driver that enables Java applications to interface with MariaDB and MySQL database systems. The driver manages protocol-level communications, including connection establishment, capability negotiation, and authentication handshakes. Because these early connection phases occur before full application context is established, they present a critical attack surface.
This vulnerability, tracked as CVE-2026-55857, is classified under CWE-319 (Cleartext Transmission of Sensitive Information). The flaw lies in the driver's Pluggable Authentication Module (PAM) handler class, SendPamAuthPacketFactory, which maps to the server-side authentication plugin name dialog. While standard cleartext plugins (such as mysql_clear_password) strictly require an encrypted transport channel, the PAM handler failed to declare this requirement.
If the driver operates under its default configuration where sslMode is set to DISABLE and restrictedAuth is null, it establishes connections over unencrypted plain TCP. An adversary capable of intercepting or terminating these connections can manipulate the authentication sequence to downgrade the security profile, forcing the driver to transmit the user's cleartext password.
The root cause of this vulnerability lies in the design and implementation of the driver's authentication plugin validation framework. In MariaDB Connector/J, client-side authentication mechanisms are defined by classes implementing the AuthenticationPluginFactory interface. To safeguard sensitive data, this interface exposes validation properties that connection dispatchers query before transmitting credentials.
In modern 3.x branches, this is governed by the requireSecure() method, while older 2.x branches rely on the requireSsl() method. Both methods default to returning false unless explicitly overridden by the implementing subclass. The ClearPasswordPluginFactory (which implements mysql_clear_password) correctly overrides this property to return true, blocking unencrypted transmission.
However, the PAM handler subclass—SendPamAuthPacketFactory in 3.x and SendPamAuthPacket in 2.x—omitted this override and inherited the default false value. When a database server issues an AuthSwitchPacket demanding dialog authentication, the client's dispatcher (StandardClient.java) checks if the plugin requires a secure connection. Because the PAM handler's check evaluated to false, the dispatcher authorized the transaction over the unencrypted TCP socket, directly violating transport-layer security requirements for cleartext-transmitting credentials.
To resolve the vulnerability, the developers overridden the security requirements in the PAM plugin classes and strengthened the validation logic in the driver's central connection dispatcher.
In the modern 3.x branch, SendPamAuthPacketFactory.java was patched to override the requireSecure() method:
// Patched in SendPamAuthPacketFactory.java
@Override
public boolean requireSecure() {
return true;
}In the legacy 2.x branch, a similar patch was applied to SendPamAuthPacket.java to enforce secure transports:
// Patched in SendPamAuthPacket.java
@Override
public boolean requireSsl() {
// PAM ("dialog") sends the password to the server in clear text, exactly like
// mysql_clear_password. It must therefore only run over a secure channel (TLS, or a local
// unix socket - handled by the dispatcher).
return true;
}Additionally, the connection dispatcher within StandardClient.java was updated. Previously, the validation routine only checked if SSL capability was present on the client. The updated logic permits secure-required authentication only if TLS/SSL is active or if the connection is established over a local Unix domain socket (represented by UnixDomainSocket class), which is secure from remote network-level sniffing:
// Enforcement implementation in StandardClient.java
if (authPluginFactory.requireSecure()
&& !context.hasClientCapability(SSL)
&& !(socket instanceof UnixDomainSocket)) {
throw context
.getExceptionFactory()
.create(
"Cannot use authentication plugin "
+ authPluginFactory.type()
+ " if SSL is not enabled (a clear-text password plugin requires TLS or a"
+ " local unix socket).",
"08000");
}This two-pronged remediation ensures that any unencrypted TCP connection attempting to negotiate the dialog PAM auth mechanism is aborted immediately before the client can write credential bytes to the socket.
Exploiting CVE-2026-55857 requires the attacker to occupy an Adversary-in-the-Middle (AiTM) network position or redirect client traffic to an attacker-controlled rogue database server. The default parameters of the client application (sslMode=DISABLE and restrictedAuth=null) satisfy the primary exploitation prerequisites.
When the client application attempts to establish a connection, the adversary intercepts the TCP socket. After the initial handshake exchange, the attacker sends an AuthSwitchPacket indicating that the authentication process must switch to the dialog plugin.
Because the unpatched driver does not flag the dialog plugin as requiring a secure transport, the client dispatcher accepts the transition. The PAM plugin then serializes the user's database password and transmits it across the unencrypted TCP session. The attacker captures the cleartext payload, achieving complete credential disclosure.
The impact of a successful credential interception is critical. An attacker who harvests database passwords can gain unauthorized read, write, and administrative access to the backend databases. This can lead to database deletion, unauthorized data extraction, and the modification of records.
The vulnerability is assigned a CVSS v3.1 base score of 5.9 (Medium). Although the payload results in direct plaintext credential leakage (High Confidentiality Impact), successful exploitation requires an on-path network position or the ability to manipulate connection strings (High Attack Complexity).
If the database credentials are recycled across the organization (e.g., matching LDAP or Active Directory service accounts mapped to the database PAM backend), the disclosure of these credentials can serve as a primary vectors for broader lateral movement across the enterprise network.
The primary recommendation is to update the MariaDB Connector/J dependency within your application classpath to a patched release. The fix is backported across all actively maintained versions of the driver:
If an immediate dependency upgrade is not feasible, implement configuration-based mitigations to block the vulnerability. First, enforce strict SSL verification to prevent Adversary-in-the-Middle positioning:
sslMode=verify-full&serverSslCert=/path/to/trusted-ca.pemSecond, restrict the authentication mechanisms permitted by the client. By setting the restrictedAuth connection property, you can explicitly forbid the driver from negotiating the PAM 'dialog' plugin, neutralizing the switch-request attack vector:
restrictedAuth=mysql_native_password,caching_sha2_passwordCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
mariadb-connector-j mariadb-corporation | < 2.7.14 | 2.7.14 |
mariadb-connector-j mariadb-corporation | >= 3.0.0, < 3.3.5 | 3.3.5 |
mariadb-connector-j mariadb-corporation | >= 3.4.0, < 3.4.3 | 3.4.3 |
mariadb-connector-j mariadb-corporation | >= 3.5.0, < 3.5.9 | 3.5.9 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-319: Cleartext Transmission of Sensitive Information |
| Attack Vector | Network (AV:N) |
| Attack Complexity | High (AC:H) |
| CVSS Base Score | 5.9 (Medium) |
| Impact | High Confidentiality Loss (C:H) |
| Exploit Status | poc |
| CISA KEV Status | Not Listed |
The application transmits sensitive data in cleartext, which makes it vulnerable to interception and disclosure.
Nuxt versions prior to 4.6.2 suffer from a route rule bypass vulnerability caused by an architectural mismatch in case-sensitivity handling between the Nitro server runtime and the Vue page router. An unauthenticated remote attacker can bypass server-enforced route directives—such as redirects, security headers, and SSR controls—by altering character casing in HTTP request paths.
A heap-based buffer overflow vulnerability in Pillow PyPI binary wheels (versions 11.1.0 to 12.x) allows remote code execution or application crash via crafted JPEG 2000 files processed by the bundled libopenjp2 library.
CVE-2026-109618 (dubbed PHP2Shell) is a critical vulnerability in the PHP engine core resulting from improper out-of-memory exception handling via longjmp(). When request allocation fails mid-processing, non-local control flow bypasses cleanup procedures, leaving memory structures uninitialized or in a use-after-free state during request shutdown.
CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.
In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.
A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.