GHSA-g9jj-cgmh-9f38: Medium severity maven/org.mariadb.jdbc:mariadb-java-client vulnerability

Published Aug 28, 2026
·
Updated

Summary

When a Java application connects with sslMode=verify-full (or verify-ca) and a password but does not pin a server certificate, Connector/J deliberately accepts an untrusted/self-signed certificate at the TLS layer (the "MITM-proof without a CA" feature) and proves the server's identity afterwards by binding the certificate fingerprint into the authentication exchange. That fingerprint enforcement is applied to the OK-packet and auth-switch paths but not to the initial-handshake path. An active man-in-the-middle that presents a self-signed certificate, claims to be MariaDB, and names the initial authentication plugin mysqlclearpassword receives the victim's database password in cleartext, before any fingerprint/identity check runs. The connection is torn down a moment later, but the credential is already gone.

Details

For sslMode=verify-full/verify-ca with a password and no serverSslCert/trustStore, the connector falls back to an ephemeral trust manager (default fallbackToSystemTrustStore=true) that accepts any non-expired certificate at the TLS layer and records its fingerprint. Identity is then meant to be enforced via that fingerprint.

The enforcement guard is present on two of the three paths, the OK-packet fingerprint check and the auth-switch handler (where the clear-password plugin is only allowed when the fingerprint is already verified). It is absent on the initial-handshake send: HandshakeResponse.encode() builds the mysqlclearpassword response after checking only that SSL is enabled, never consulting the recorded fingerprint, sslMode, or whether the plugin is MITM-proof. By that point the connector already knows the certificate was self-signed. The clear-password plugin does not declare itself MITM-proof (it inherits the safe default), which confirms it is meant to be refused on an unverified certificate; the initial-handshake path simply never consults that flag. The initial path also bypasses restrictedAuth.

Impact

An active man-in-the-middle steals the full cleartext database password of any Java application using Connector/J with sslMode=verify-full/verify-ca plus a password and no pinned certificate, the configuration documented as the easy, secure default. With the captured credentials the attacker can take over the database account and read or modify all data that account is authorized for. The victim takes no unusual action; the developer explicitly enabled TLS verification expecting exactly this protection.

Patches

Fixed in 2.7.14, 3.3.5, 3.4.3, and 3.5.9. Upgrade to the patched release on your branch (3.5.x → 3.5.9, 3.4.x → 3.4.3, 3.0/3.1/3.2/3.3.x → 3.3.5, 2.x → 2.7.14). The fix applies the same certFingerprint != null && !isMitMProof() guard to the initial-handshake path before writing the auth response, refusing to send a mysqlclearpassword (or any non-MITM-proof) response on an as-yet-unverified certificate, matching the auth-switch path.

Workarounds

If you cannot upgrade immediately, pin the server certificate (serverSslCert= the real CA / server cert). With a pinned certificate the self-signed certificate of a man-in-the-middle is rejected at the TLS layer before any password is transmitted.

Credit

Reported by haaahaaahiihiiii

Affected Software

4 affected componentsFixes available
maven/org.mariadb.jdbc:mariadb-java-client>=3.5.0<3.5.9
3.5.9
maven/org.mariadb.jdbc:mariadb-java-client>=3.4.0<3.4.3
3.4.3
maven/org.mariadb.jdbc:mariadb-java-client>=3.0.0<3.3.5
3.3.5
maven/org.mariadb.jdbc:mariadb-java-client<2.7.14
2.7.14

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade maven/org.mariadb.jdbc:mariadb-java-client to a version that resolves this vulnerability.

    Fixed in 3.5.9
  2. Upgrade

    Upgrade maven/org.mariadb.jdbc:mariadb-java-client to a version that resolves this vulnerability.

    Fixed in 3.4.3
  3. Upgrade

    Upgrade maven/org.mariadb.jdbc:mariadb-java-client to a version that resolves this vulnerability.

    Fixed in 3.3.5
  4. Upgrade

    Upgrade maven/org.mariadb.jdbc:mariadb-java-client to a version that resolves this vulnerability.

    Fixed in 2.7.14
  5. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 2.7.14
  6. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 3.3.5
  7. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 3.4.3
  8. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 3.5.9
  9. Configuration

    If you cannot upgrade, pin the server certificate by setting serverSslCert to the real CA / server cert so that the self-signed MITM certificate is rejected at the TLS layer before any password is transmitted.

    MariaDB Connector/J serverSslCert = (pin to the real CA / server cert)

Event History

Aug 28, 2026
Advisory Published
via GitHub·10:41 PM
Data Sourced
via GitHub·10:41 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which deployments are exposed to credential theft?

Java applications using MariaDB Connector/J with sslMode=verify-full or verify-ca, a password, and no configured serverSslCert or trustStore are exposed. The connector's fallback trust manager accepts an untrusted, non-expired certificate at the TLS layer in this configuration.

2

What must an attacker be able to do?

An attacker must actively man-in-the-middle the database connection. They must present a self-signed certificate, identify as MariaDB, and select mysql_clear_password as the initial authentication plugin.

3

What information can be exposed?

The application's database password can be sent in cleartext to the attacker. Although the connection is subsequently terminated, the credential has already been disclosed.

4

Is the fallback behavior enabled by default?

Yes. The described ephemeral trust-manager fallback is used when no serverSslCert or trustStore is configured, and fallbackToSystemTrustStore defaults to true.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203