التحذير من ثغرة في نظامي Mysql وMariaDB تمكن من الولوج إلى قواعد البيانات من دون الحاجة إلى معرفة كلمة المرور

نُشر يوم 11 جوان 2012 بواسطة Xacker


قام الباحث Sergei Golubchik بنشر تفاصيل ثغرة أمنية في MySQL  وقواعد MariaDB عبر القائمة البريدية لـ oss-sec وذلك بعيد إصلاح الثغرة من قبل الشركة التي حملت الرقم CVE-2012-2122.

تم استغلال هذه الثغرة بعد إيجاد خلل في النتيجة المتوقعة للتابع memcmp() والذي يُعيد نتيجة تتراوح في المجال [-127, 127] أو مجال (بمعنى آخر) signed character.

في بعض المنصات وضمن شروط معينة، يمكن لهذا التابع أن يعيد قيمة خارج المجال المذكور، مما يؤدي إلى الحصول على نتيجة true للشفرة التي تقوم مثلاً بمقارنة hashed passwords حتى عند إدخال كلمة مرور خاطئة. وبما أن بروتوكول المصادقة يقوم بتوليد قيمة hash مختلفة في كل مرة تتم فيها المصادقة، فإن هناك احتمال 1 من أصل 256 يعني أن أي كلمة مرور ستتجاوز مرحلة المصادقة بنجاح.

ولكن ما علاقة ما سبق بـ MySQL ؟

العلاقة يا سيدي أنه لو قام المهاجم بالمصادقة مع MySQL فهناك احتمال أن يتمكن من تسجيل الدخول باستخدام كلمة مرور خاطئة، وفيما يلي سطر واحد يمكن استخدامه في bash (سطر الأوامر) في نظام Linux لتسجيل الدخول كمستخدم root على MySQL وبدون معرفة كلمة المرور الصحيحة:

$ for i in seq 1 1000; do mysql -u root –password=bad -h 127.0.0.1 2>/dev/null; done

مدى انتشار الخلل:

على الرغم من أن الكثير من إصدارات MySQL و MariaDB تحتوي على الخلل المذكور، إلا أن بعض هذه الأنظمة فقط قابلة للاستغلال، ويعود السبب إلى القيمة التي يعيدها التابع memcmp() فيما إذا كانت خارج المجال المطلوب.

في الوضع الافتراضي فإن هذه الحالة الحرجة غير ممكنة، ولكن الاستثناء الأكبر هو في حالة استخدام GCC مع معايير التحسين SSE optimization أثناء الـ compilation، هذا وقد قام الباحث Joshua Drake بنشر الشفرة المصدرية لبرنامج قادر على تحديد فيما إذا كان النظام مصاباً أم لا.

حتى الآن، فقد تم تحديد أن الأنظمة التالية مصابة فعلاً بهذا الخلل:

  * Ubuntu Linux 64-bit ( 10.04, 10.10, 11.04, 11.10, 12.04 ) ( via many including [@michealc](https://twitter.com/michealc) )
  * OpenSuSE 12.1 64-bit MySQL 5.5.23-log ( via [@michealc](https://twitter.com/michealc) )
  * Fedora 16 64-bit ( via [hexed](http://www.reddit.com/r/netsec/comments/uvfg6/security_vulnerability_in_mysqlmariadb/c4z0f23) )
  * Arch Linux (unspecified version)

بينما أظهرت التعليقات التي وصلت لفريق عمل Metasploit، أن الأنظمة التالية غير مصابة:

  * Official builds from MySQL and MariaDB (including Windows)
  * Red Hat Enterprise Linux, CentOS (32-bit and 64-bit) [ not conclusive ]
  * Ubuntu Linux 32-bit (10.04, 11.10, 12.04, likely all)
  * Debian Linux 6.0.3 64-bit (Version 14.14 Distrib 5.5.18)
  * Debian Linux lenny 32-bit 5.0.51a-24+lenny5 ( via [@matthewbloch](https://twitter.com/#%21/matthewbloch) )
  * Debian Linux lenny 64-bit 5.0.51a-24+lenny5 ( via [@matthewbloch](https://twitter.com/#%21/matthewbloch) )
  * Debian Linux lenny 64-bit 5.1.51-1-log ( via [@matthewbloch](https://twitter.com/#%21/matthewbloch) )
  * Debian Linux squeeze 64-bit 5.1.49-3-log ( via [@matthewbloch](https://twitter.com/#%21/matthewbloch) )
  * Debian Linux squeeze 32-bit 5.1.61-0+squeeze1 ( via [@matthewbloch](https://twitter.com/#%21/matthewbloch) )
  * Debian Linux squeeze 64-bit 5.1.61-0+squeeze1 ( via [@matthewbloch](https://twitter.com/#%21/matthewbloch) )
  * Gentoo 64-bit 5.1.62-r1 ( via [@twit4c](https://twitter.com/twit4c) )
  * SuSE 9.3 i586 MySQL 4.1.10a ( via [@twit4c](https://twitter.com/twit4c) )

وبالطبع، فإننا نذكر الأعزاء القراء بأنه حتى لو قمتم بإصلاح الثغرة في أنظمتكم، فلا تنسوا تغيير كلمات المرور والتي ربما تكون ضعيفة وقد تم كسر الـ hash الخاص بها للوصول لكلمة المرور الحقيقية.