mirror of https://github.com/sysown/proxysql
Two MysqlxResolvedIdentity fields were loaded from runtime_mysqlx_users
into the in-memory store but never consulted by the auth path:
identity_->require_tls // per-user "must be over TLS"
identity_->allowed_auth_methods // per-user mechanism whitelist
Net effect:
- require_tls=1 did not reject MYSQL41-over-plaintext. Operators
setting this column expected a hardening guarantee they did not
actually get; an attacker bypassing TLS could still authenticate
via MYSQL41 (which is challenge-response over plaintext, but
leaks the user's full SHA1(SHA1(pw)) on a passive eavesdrop and
is replayable for the duration of the auth_challenge_).
- allowed_auth_methods='MYSQL41' did not reject PLAIN attempts
(and vice versa). Operators expected to be able to lock down a
user to a specific mechanism; the column was decorative.
# Fix
New helper MysqlxSession::enforce_identity_policy() called from both
auth resolution sites (handle_auth_plain at line ~539, handler_auth_
challenge_sent at line ~664) immediately after identity_ resolves
and before credential verification. It:
- rejects with 1045 "User requires a TLS connection" when
identity_->require_tls && !client_ds_.is_encrypted().
- rejects with 1045 "Authentication mechanism not allowed for
user" when identity_->allowed_auth_methods is non-empty and
auth_method_ is not in the comma-separated list (case-
insensitive, whitespace-trimmed).
Empty allowed_auth_methods preserves the historical "any wired
method" default so existing rows don't require a backfill — the
column already defaulted to '' in the table DDL.
# What this commit does NOT cover
backend_auth_mode is the third field in the same review finding
(reviewer's #2). It's partially implemented today by side-effect:
the backend_username being non-empty selects the service_account
codepath, empty selects mapped. The pass_through mode would require
forwarding the frontend AuthStart frame unmodified to the backend
and is not implemented; it remains TBD pending issue #5693
(asymmetric TLS / AsClient) which has overlapping protocol-shape
concerns. This commit deliberately scopes to the two policy checks
that are unambiguously broken; backend_auth_mode pass_through gets
its own commit when #5693 lands.
# Verified
21 / 21 mysqlx unit tests still green. Caught by an external review
pass, finding #2.
pull/5702/head
parent
4e32f44196
commit
e535a66ee1
Loading…
Reference in new issue