Sergei Golubchik egy igen tanulságos MariaDB/MySQL hibáról számolt be nem rég az oss-security listán. A probléma lényegében jelszó nélküli hozzáférést enged a sebezhető adatbázisszerver installációkhoz. A hiba gyökere az, hogy a fejlesztők nem számoltak azzal, hogy a memcmp() függvény néha a [-128,127] intervallumon kívüli értéket is visszaadhat. Ez az érték az autentikációhoz használt kihívás-válasz hash-ek összevetésére szolgáló check_scramble() függvény visszatérési értékeként my_bool-ra, azaz char-ra kasztolódik, így akkor is felveheti a 0 értéket, ha a memcmp() sikertelen volt, vagyis a hash-ek nem egyeztek meg. Skatulya-elv alapján 300 próbálkozásból egyszer jó eséllyel előjön az anomália, ennyi próbálkozás pedig pillanatok alatt lejátszható:
for i in `seq 1 1000`; do mysql -u root --password=tokmindegy -h 127.0.0.1 2>/dev/null; done
Öröm az ürömben, hogy a probléma nem érint minden csomagot illetve platformot. Az Ubuntu, az OpenSUSE és a Fedora 64-bites változatai biztosan érintettek. HD Moore számításai szerint tízezrével lehetnek sebezhető MySQL kiszolgálók a netre lógatva.
A MySQL az 5.1.63-as illetve 5.5.24-es verziókban, a MariaDB a 3144-es revízióban javított.
Robika 2012.06.15. 00:10:16
Probáltam ubuntun (5.1.61-0ubuntu0.10.10.1) és debianon (percona 5.1.50-rel11.4), de 1000 próbálkozásból nem engedett be.
domi007 2012.06.15. 01:20:48
Whether a particular build of MySQL or MariaDB is vulnerable, depends on
how and where it was built. A prerequisite is a memcmp() that can return
an arbitrary integer (outside of -128..127 range). To my knowledge gcc
builtin memcmp is safe, BSD libc memcmp is safe. Linux glibc
sse-optimized memcmp is not safe, but gcc usually uses the inlined
builtin version.
As far as I know, official vendor MySQL and MariaDB binaries are not
vulnerable.
domi007 2012.06.15. 01:24:11
www.youtube.com/watch?v=Mg5iUjOpusE