Kritiniai MySQL, MariaDB ir Percona DB pažeidžiamumai


Populiariose duomenų bazių platformose Oracle MySQL, MariaDB, Percona Server ir XtraDB Cluster buvo rastas kritinis race condition (liet. lenktynių aplinka) tipo pažeidžiamumas (CVE-2016-6663), kurio išnaudojimas galimai leidžia lokaliam duomenų bazės vartotojui eskaluoti privilegijas į sisteminį DB vartotoją. To pačio autoriaus prieš tai aptiktos spragos (CVE-2016-6662 ir CVE-2016-6664) toliau suteikia galimybę privilegijas pasikelti net iki root vartotojo.

Race condition tipo pažeidžiamumui išnaudoti reikalingos CREATE, INSERT ir SELECT teisės. Išnaudojimas remiasi galimybe vartotojui nurodyti katalogą, kuriame bus saugojama naujai sukurta DB lentelė. Minėtos pažeidžiamos DB sistemos vykdydamos lentelės taisymo operaciją (REPAIR TABLE) iš pradžių sukuria laikiną .TMD bylą ir vėliau dar papildomai pakeičia jos prieigos teises. Šis pakeitimas yra nereikalingas, nes byla jau įgauna reikiamas teises kūrimo metu. Negana to tarp bylos sukūrimo sisteminio iškvietimo open(2) ir teisių priskyrimo iškvietimo chmod(2) ir egzistuoja race condition tipo spraga. Jei tarp šių iškvietimų įsilaužėlis sugebėtų ištrinti laikiną .TMD bylą ir pakeisti ją simboline nuorodą (symlink) į pvz. /var/lib/mysql katalogą, tuomet DB perkopijuotų prieigos teises iš įsilaužėlio kontroliuojamos .MYD lentelės į šią simbolinę nuorodą. Tokiu būdu įsilaužėlis galėtų modifikuoti bet kurį MySQL duomenų bazės sisteminiui vartotojui prieinamą katalogą, kas paprasčiausiai suteiktų sisteminę prieigą prie pačios MySQL duomenų bazės.

Norint gauti prieigą prie komandinės eilutės sisteminio DB vartotojo teisėmis, įsilaužėlis jau iš sisteminio DB vartotojo galėtų atlikti tą patį kas aprašyta viršuje, tik papildomai sužaisti su S_ISUID (suid) prieigos teisėmis, ir vietoje /var/lib/mysql sukurti bash ar kitos komandinės eilutės vykdomosios bylos kopiją. Įsilaužėlis turėtų taip pat sužaisti su sticky grupių vėliavėle lentelės katalogui, kad vykdomajai bylai būtų išsaugotos įsilaužėlio grupės teisės.

MySQL vartotojo teises įgijęs įsilaužėlis toliau galėtų pabandyti išnaudoti vieną iš anksčiau rastų spragų, kurios galimai leidžia eskaluoti privilegijas iš mysql į root vartotoją.

Administratoriams, ypač tiems, kurie teikia paslaugas, į kurias įeina DB vartotojų prieiga, rekomenduojama kuo greičiau atsinaujinti DB. Saugumo pataisos jau yra išėjusios, tik gali būti neadaptuotos visoms OS distribucijoms. Kaip laikiną sprendimą pažeidžiamumo autorius siūlo išjungti simbolinių nuorodų palaikymą, my.cnf byloje tai būtų šis nustatymas:

symbolic-links = 0

Race condition spragos tipo principo aprašymas lietuviškoje Wikipedia: https://lt.wikipedia.org/wiki/Lenktyni%C5%B3_aplinka.

Pažeidžiamos DB versijos

MariaDB: < 5.5.52, < 10.1.18, < 10.0.28

MySQL:    <= 5.5.51,  <= 5.6.32,  <= 5.7.14

Percona Server:  < 5.5.51-38.2,  < 5.6.32-78-1,  < 5.7.14-8

Percona XtraDB Cluster:  < 5.6.32-25.17,  < 5.7.14-26.17,  < 5.5.41-37.0

Šaltiniai:

http://legalhackers.com/advisories/MySQL-Maria-Percona-PrivEscRace-CVE-2016-6663-5616-Exploit.html
https://security-tracker.debian.org/tracker/CVE-2016-6663
http://www.securityfocus.com/bid/92911