Skip to content

Failing to strip null terminator from authData in case of AuthSwitchRequest causes Access denied #1666

Closed
@bdollma-te

Description

@bdollma-te

We recently promoted to RDS MySQL 8 in AWS and got the following error:

Error 1045 (28000): Access denied for user 'username'@'10.XXX.XXX.XXX' (using password: YES)

It all started because of this recent change in AWS: https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-rds-proxy-sha2-password-authentication-mysql-aurora-rds// . Apparently, connecting to RDS via a proxy now tries to promote the plugin to caching_sha2_password.

Our Java apps connect successfully. Also, mysql from CLI connects succesfully.

So this is what happens in code:

  1. The client tries to auth using plugin mysql_native_password.
  2. The server responds with [254 99 97 99 104 105 110 103 95 115 104 97 50 95 112 97 115 115 119 111 114 100 0 3 67 113 67 11 105 47 18 75 27 28 34 37 111 81 43 44 102 83 43 0]. Let's analyze what you do with this packet in the following method
    func (mc *mysqlConn) readAuthResult() ([]byte, string, error) {
    The first byte is 254, so it falls under case iEOF. The first null terminated string, is [99 97 99 104 105 110 103 95 115 104 97 50 95 112 97 115 115 119 111 114 100 0] which translates to caching_sha2_password. So the server is trying to promote us to caching_sha2_password as expected. The authData which is later used to scramble the SHA256 is the rest of the packet, however you are forgetting to strip the null termination from it. The current code is:
authData := data[pluginEndIndex+1:]

which in our case is [3 67 113 67 11 105 47 18 75 27 28 34 37 111 81 43 44 102 83 43 0] - i.e., null terminated.

For testing purposes, I stripped the 0 from the end, by changing it to:

authData := data[pluginEndIndex+1 : len(data)-1]

and now the client connects successfully and performs the queries without Access denied.
Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions