Süsteemihalduri systemd haavatavus (), mis võimaldab potentsiaalselt käivitada oma koodi suurendatud õigustega, saates spetsiaalselt vormindatud päringu DBus bussile. Probleem on parandatud testversioonis (probleemi lahendavad plaastrid: , , ). Haavatavus on kõrvaldatud distributsioonides , , (ilmneb RHEL 8-s, kuid ei mõjuta RHEL 7-d), , ja , kuid uudise kirjutamise hetkel on see veel parandamata ja .
Haavatavus on põhjustatud juba vabastatud mäluala (use-after-free) käsitlemisest, mis tekib asünkroonsete päringute tegemisel Polkitile DBus sõnumite töötlemise ajal. Mõned DBus liideseed kasutavad objektide lühiajalist vahemälu, puhastades vahemälu elemendid, kui DBus buss on vaba teiste päringute töötlemiseks. Kui DBus meetodi käitleja kasutab bus_verify_polkit_async(), võib tal olla vajalik oodata Polkit'i toimingute lõppemist. Polkit'i valmimisel kutsutakse käitlejat uuesti ja see pöördub juba varem eraldatud mäludetailide poole. Kui päring Polkitile kestab liiga kaua, siis on vahemälu elemendid piisavalt aega, et enne meetodi uuesti kutsumist puhastuda.
Voodsidest, mis võimaldavad haavatavuse ärakasutamist, on välja toodud systemd-machined, mis pakub DBus API-d org.freedesktop.machine1.Image.Clone, mis viib andmete ajutise salvestamiseni vahemälus ja asünkroonsete päringute tegemiseni Polkitile. Liides
org.freedesktop.machine1.Image.Clone on saadaval kõigile süsteemi mitteprivilegeeritud kasutajatele, kes võivad algatada systemd teenuste krahhi või potentsiaalselt saavutada koodi täitmise root õigustes (kavandi kuritarvitamise prototüüp pole veel demonstreeritud). Kood, mis võimaldab haavatavuse ärakasutamist, oli systemd-machinedis 2015. aastal versioonis (RHEL 7.x kasutab systemd 219).
Allikas: opennet.ru
