Summary
With SslMode set to VerifyCA or VerifyFull with no configured CA certificate, an unvalidated TLS connection is treated as secure and a clear-text password can be sent before the certificate is checked. This can occur when relying on the password to validate a self-signed cert, e.g., MariaDB's zero-configuration TLS.
Impact
An attacker who can deploy a man-in-the-middle MySQL proxy presenting any self-signed certificate can capture the plaintext database password of a client that:
- uses
SslMode = VerifyCA or VerifyFull, and
- does not use the
SslCa connection string option, and
- uses a non-empty password.
The attacker completes the TLS handshake with its own cert, requests a clear-text password authentication scheme (mysql_clear_password, or forces the caching_sha2_password/sha256_password clear-text fallback), and receives the password before the fingerprint check rejects the connection, defeating the man-in-the-middle protection VerifyFull is expected to provide.
Not affected: a configured CA (SslCa), CA-validated TLS, local connections (Unix socket / loopback), or empty passwords. Using SslMode set to Preferred or Required is out of scope (this is documented as not authenticating the server).
Workarounds
Provide SslCa with VerifyCA/VerifyFull, use a local/Unix-socket connection, or avoid clear-text authentication.
References
References
Summary
With
SslModeset toVerifyCAorVerifyFullwith no configured CA certificate, an unvalidated TLS connection is treated as secure and a clear-text password can be sent before the certificate is checked. This can occur when relying on the password to validate a self-signed cert, e.g., MariaDB's zero-configuration TLS.Impact
An attacker who can deploy a man-in-the-middle MySQL proxy presenting any self-signed certificate can capture the plaintext database password of a client that:
SslMode = VerifyCAorVerifyFull, andSslCaconnection string option, andThe attacker completes the TLS handshake with its own cert, requests a clear-text password authentication scheme (
mysql_clear_password, or forces thecaching_sha2_password/sha256_passwordclear-text fallback), and receives the password before the fingerprint check rejects the connection, defeating the man-in-the-middle protectionVerifyFullis expected to provide.Not affected: a configured CA (
SslCa), CA-validated TLS, local connections (Unix socket / loopback), or empty passwords. UsingSslModeset toPreferredorRequiredis out of scope (this is documented as not authenticating the server).Workarounds
Provide
SslCawithVerifyCA/VerifyFull, use a local/Unix-socket connection, or avoid clear-text authentication.References
References