В системния мениджър systemd уязвимост (), който потенциално позволява изпълнение на собствен код с повишени привилегии чрез изпращане на специално форматирано запитване по шина DBus. Проблемът е отстранен в тестовия релийз (проблем решен от патчовете: , , ). Уязвимостта е отстранена в дистрибутивите , , (проявяваща се в RHEL 8, но не засягаща RHEL 7), , и , но към момента на написване на новината остава неизправена в и .
Уязвимостта е причинена от достъп до вече освободено място в паметта (use-after-free), което настъпва при асинхронно изпълнение на запитвания към Polkit по време на обработка на съобщения по DBus. Някои DBus интерфейси използват кеш за временно съхранение на обекти и изчистват елементите от кеша, веднага след като шина DBus освободи ресурс за обработка на други запитвания. Ако обработчикът на DBus метод използва bus_verify_polkit_async(), той вероятно трябва да изчака завършване на действието в Polkit. След като Polkit е готов, обработчикът се извиква повторно и се обръща към вече разпределените в паметта данни. Ако запитването към Polkit отнема прекалено много време, елементите в кеша могат да бъдат изчистени преди второто извикване на обработчика на DBus метода.
Между услугите, позволяващи експлоатирането на уязвимостта, се отбелязва systemd-machined, който предоставя DBus API org.freedesktop.machine1.Image.Clone, водещо до временно съхранение на данни в кеша и асинхронно обръщение към Polkit. Интерфейсът
org.freedesktop.machine1.Image.Clone е достъпен за всички непривилегировани потребители на системата, които могат да инициират срив на услугите на systemd или потенциално да постигнат изпълнение на код с права root (прототип на експлоита все още не е демонстриран). Кодът, позволяващ експлоатирането на уязвимостта, беше в systemd-machined през 2015 година във версия (в RHEL 7.x се използва systemd 219).
Източник: opennet.ru
