Kinkcope korai mikulásként december elején elküldött néhány érdekességet a Full-Disclosure listára. Lássuk mit kaptak a rosszcsontok csoki helyett!
Oppa Stuxnet Style!
A közzétett exploitok egy része fájl írási lehetőségeket használ fel parancsvégrehajtásra. A felhasznált módszer először a Stuxnet által kihasznált Windows Printer Spooler Service sérülékenység révén vált széles körben ismertté: A Windows Management Instrumentation periodikusan olvassa a %SYSTEM32%\wbem\mof könyvtárat új osztályleírók után kutatva. Egy ide helyezett .MOF fájlban megadható egy eseményszűrő, valamint a szűrőhöz tartozó szkript. A Stuxnet, valamint Kingcope exploitjai is létrehoznak egy szűrőt, ami Windows órájára figyel, és a megfelelő időpontban (konkrétan a másodperc számláló 5-ös értékénél) egy ActiveX vezérlőn keresztül lefuttatnak egy másik, a rendszerbe feltöltött EXE fájlt.
Ezzel a módszerrel működik például a FreeFTPD távoli kódfuttatás exploitja: A kiszolgáló a FreeSSHD hibás protokollmegvalósítását használja az FTPS burkoló megvalósításához, így az autentikáció a kliens módosításával megkerülhető. Mivel azonban az FTP kiszolgáló alapból nem biztosít shellt, a fenti módszer kerül alkalmazásra a parancsvégrehajtás eléréséhez.
Kingcope ezen kívül két új implementációt ad MySQL-en keresztüli oprendszer vezérlésre: az egyik lényegében megegyezik a már rég óta ismert UDF technikával, a másik viszont a Stuxnet módszerrel egy kicsival talán kisebb megkötést ad a támadónak (nem kell CREATE FUNCTION, csak CREATE FILE jog).
0-day-ek
A legnagyobb újdonságot két MySQL 0-day hiba jelenti. Egy stack és egy heap overflow problémáról van szó: előbbi felháborítóan egyszerű, egyetlen GRANT utasításra triggerelődik, ha az adatbázisnév kellően hosszú és közvetlen EIP vezérlést ad, utóbbi egy érvénytelen DELETE utasítás esetén ad 4 byte-nyi kontrollt a támadónak a kiszolgáló egyik pointere felett.
A stack overflow-t a MySQL-ben és a MariaDB-ben is, a heap overflow-t ahogy látom egyelőre csak a MariaDB-ben javították.
Bár a sérülékenységeket Kingcope csak PoC formában publikálta (a mysqld meghal, de támadói kód nem fut le), már ez is elég egy elegáns jogosultságkiterjesztés bemutatásához:
Ha van egy felhasználónk, aki képes fájlokat írni, létrehozhatunk egy TRIGGER fájlt, amiben gonosz módon a root-ot adjuk meg tulajdonosként, így a trigger az ő nevében fut le. Azaz csak futna, ugyanis a fájl nem kerül betöltésre a kiszolgálóba annak újraindulásáig, ehhez viszont elég zavart okoznunk az erőben a fenti stack overflow-val. Következő alkalommal, mikor a TRIGGER feltétele teljesül, az általunk meghatározott utasítás fog lefutni a root felhasználó jogkörével.
Bónuszként van itt még egy autentikáció utáni DoS-ra alkalmas sérülékenység az UpdateXML() eljárásban, valamint egy felhasználó enumerációs technika, ami abból adódok, hogy a 4-es vagy régebbi MySQL kiszolgálók autentikációs módját 5-ös kiszolgálóknál használva elrontott bejelentkezéskor különböző hibaüzenet jön vissza létező illetve nem létező felhasználók esetén. Kingcope felhívja a figyelmet továbbá, hogy bejelentkezett felhasználók viszonylag gyorsan képesek jelszavakat pörgetni online a MySQL protokolljában definiált change_user parancs segítségével.