どんなバグかなと思ってリンク先を見ると
my_bool check_scramble(const char *scramble_arg, const char *message, const uint8 *hash_stage2) { ... return memcmp(hash_stage2, hash_stage2_reassured, SHA1_HASH_SIZE); }
という関数でパスワードのチェックをしているのだけども(正しいパスワードだと0を返す)、memcmpの仕様は
The memcmp() function returns an integer less than, equal to, or
greater than zero if the first n bytes of s1 is found, respectively, to
be less than, to match, or be greater than the first n bytes of s2.
となっていて、memcmpは等しくない場合に0以外のintを返すが、check_scrambleはmy_bool(char)を返す。
もし0以外のintの最後のバイトが0だったらキャストによってcharの0になってパスワードが正しくみなされてしまうということらしい。
で、これはmemcmpの実装に依存するので、以下によると今のところglibcのSSE最適化したものしか該当しないらしい。
To my knowledge gcc builtin memcmp is safe, BSD libc memcmp is safe. Linux glibc
oss-sec: Security vulnerability in MySQL/MariaDB sql/password.c
sse-optimized memcmp is not safe, but gcc usually uses the inlined
builtin version.
あと、Oracleのビルドしたバイナリも対象外とのこと
Just to confirm what Sergei wrote earlier, the Oracle-produced MySQL builds do not use the gcc SSE option that exposes this problem.
MySQL Bugs: #64884: logins with incorrect password are allowed