Aug 29, 2026·5 min read·2 visits
MariaDB Connector/R2DBC before 1.4.1 fails to verify if TLS or Unix socket encryption is active before using clear-text password authentication plugins, allowing network attackers to intercept plaintext credentials.
A security vulnerability in the MariaDB Connector/R2DBC client driver allows credential theft during the database authentication phase. The client driver does not gate clear-text password authentication plugins on transport encryption, making it possible for on-path attackers or hostile database servers to intercept passwords.
The MariaDB Connector/R2DBC is a reactive, non-blocking Java driver used to communicate with MariaDB and MySQL databases. It manages connection handshakes, including protocol negotiation and authentication flows. The driver exposes an attack surface during the initial connection setup where authentication plugins are executed.
The vulnerability occurs because the client-side driver does not evaluate the encryption state of the underlying network transport before running clear-text password authentication plugins, such as mysql_clear_password or dialog (PAM). This behavior violates standard transport security practices by permitting sensitive authentication credentials to be sent without encryption over plain TCP connections.
An attacker capable of manipulating network traffic or hosting a rogue database server can exploit this omission. By issuing an authentication method switch request, the attacker can force the client to transmit the user's plain-text password across the wire, compromising the credentials.
The root cause of this flaw is an architectural gap in the AuthenticationPlugin interface of the org.mariadb:r2dbc-mariadb driver. Prior to version 1.4.1, this interface lacked the native capability to check if transport-level security was active before executing an authentication flow.
Under standard database protocols, a database server can send an AuthSwitchRequest packet (type 0xFE) to request a change of authentication mechanism. The client is designed to dynamically load the requested plugin and process the handshake. When a server requested mysql_clear_password or dialog, the driver loaded the corresponding ClearPasswordPluginFlow or PamPluginFlow without verifying if the connection was secure.
Because the driver lacked a security boundary gating these plugins, it proceeded to invoke the plugin's next() method over plain TCP. The plugin then retrieved the raw, unhashed password from the driver's configuration and transmitted it onto the wire, leading to credential disclosure.
The vulnerability was resolved by introducing a security validation contract within the AuthenticationPlugin interface and implementing enforcement inside the handshake flow.
The patch introduced the requireSecure() default method to the AuthenticationPlugin interface:
public interface AuthenticationPlugin {
AuthenticationPlugin create();
/**
* Whether this authentication plugin requires a secure connection (TLS or a local unix socket).
* Plugins that transmit the password in clear text return true.
*/
default boolean requireSecure() {
return false;
}
ClientMessage next(
MariadbConnectionConfiguration configuration,
byte[] seed,
...The clear-text authentication plugins, including ClearPasswordPluginFlow and PamPluginFlow, were updated to override this method and return true:
@Override
public boolean requireSecure() {
return true;
}The AuthenticationFlow orchestrator now uses these checks to block execution over unencrypted links by throwing a R2dbcPermissionDeniedException if a secure transport is not active:
private boolean isSecureConnection() {
return configuration.getSslConfig().getSslMode() != SslMode.DISABLE
|| configuration.getSocket() != null;
}
// Enforcement during AuthSwitchRequest handling
if (authPlugin.requireSecure() && !flow.isSecureConnection()) {
sink.error(clearTextRefusal(plugin));
} else {
flow.authMoreDataPacket = null;
flow.pluginHandler = authPlugin;
sink.next(AUTH_SWITCH);
}Exploitation of this vulnerability requires the attacker to occupy an active Man-in-the-Middle (MITM) position on the network or trick the client into connecting to a rogue database server. Purely passive eavesdropping is insufficient to trigger the payload, but allows capture once the flow is initiated.
In a MITM scenario, the client attempts to establish a plain TCP connection to a legitimate MariaDB or MySQL database server. The attacker intercepts the TCP stream during the handshake. When the handshake starts, the attacker injects an AuthSwitchRequest packet specifying the mysql_clear_password plugin.
Upon receiving the forged request, the vulnerable R2DBC driver loads the clear-text plugin and executes its authentication steps. The client serializes the plain-text password and writes it to the TCP socket, where the attacker sniffs the payload. The attacker harvests the password and optionally terminates or proxies the connection.
The security impact of CVE-2026-55860 is high, resulting in a complete loss of credential confidentiality. An attacker who successfully exploits this flaw obtains the database password in plaintext.
The vulnerability is assigned a CVSS v3.1 base score of 5.9 (Medium). The score reflects the fact that while the impact on confidentiality is high, the attack complexity is also high due to the requirement for active network-level interception or dns redirection.
In enterprise environments where the R2DBC driver is used for microservices, a compromised database password can allow unauthorized access to database systems, enabling data exfiltration, integrity tampering, or lateral movement within the network.
The recommended remediation is upgrading the MariaDB Connector/R2DBC dependency to version 1.4.1 or later. This version contains the native security gates that prevent clear-text authentication over insecure channels.
If upgrading is not immediately possible, apply network-level mitigations. Configure the client's sslMode connection parameter to a secure setting such as VERIFY_CA or VERIFY_FULL. This forces TLS validation and prevents MITM attackers from intercepting or injecting handshake packets.
Additionally, enforce network segmentation to restrict database outbound traffic. Ensure the client only communicates with the database over trusted local Unix domain sockets or secure, encrypted VPN and IPsec tunnels.
CVSS: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/R2DBC MariaDB | < 1.4.1 | 1.4.1 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-319 / CWE-522 |
| Attack Vector | Network (AV:N) |
| Attack Complexity | High (AC:H) |
| CVSS Score | 5.9 (Medium) |
| Exploit Status | poc |
| KEV Status | Not Listed |
The product transmits sensitive data over the network in cleartext without encryption.
An input validation and encoding desynchronization vulnerability exists in MariaDB Connector/R2DBC versions prior to 1.4.1. The driver assumes all communication utilizes the UTF-8 character set, but fails to account for server-driven mid-session changes to the character_set_client variable. When a change to a multi-byte character set such as GBK or Big5 is induced, the server interprets client-escaped single quotes as part of a multi-byte character. This state desynchronization bypasses standard escaping mechanisms and allows remote unauthenticated attackers to execute arbitrary SQL commands.
A critical security flaw was identified in RestrictedPython prior to version 8.3 where positional-only arguments introduced in Python 3.8 were not properly validated. This allowed an attacker executing code within the sandbox to shadow critical security guards like `_write_` and `_getattr_`, leading to a complete sandbox escape and arbitrary code execution on the underlying server.
CVE-2026-55855 is a client-side SQL injection vulnerability in the MariaDB Connector/Node.js library that occurs when using legacy multi-byte character sets. The flaw arises from naive, byte-wise client-side parameter escaping. Attackers can leverage specific multi-byte lead bytes to absorb backslash escape characters on the server side, allowing them to terminate string literals and execute arbitrary SQL commands.
An improper authentication vulnerability (CWE-287) in Portainer Community Edition (CE) allows unauthenticated remote attackers to achieve full administrative takeover. During the initial five-minute uninitialized setup window, sensitive endpoints responsible for creating the initial administrator user and restoring database state are publicly accessible without authentication. Attackers can exploit this to create administrative credentials or overwrite the system state with a malicious database configuration.
CVE-2026-55678 defines a critical security vulnerability in the Enterprise clustering implementation of Arc, an open-source SQL-native time-series database. When clustering is enabled but a shared secret is not defined, the cluster coordinator fails to enforce authentication on cluster join requests and node status updates. Remote, unauthenticated attackers can exploit this behavior to register a rogue node, hijack telemetry routing, and harvest sensitive client authentication headers.
A critical security vulnerability exists in plone.app.event, the event content type package for the Plone CMS. Prior to versions 5.2.4 and 6.0.1, the iCalendar import component lacked proper file size controls, URL scheme validation, and network isolation filters. Authenticated editors could exploit these deficiencies to cause denial of service via memory exhaustion, read local files, perform server-side request forgery, and inject stored cross-site scripting vectors.