Уразлівасць у systemd, патэнцыйна якая дазваляе павысіць свае прывілеі

У сістэмным мэнэджэры systemd выяўлена уразлівасць (CVE-2020-1712), якая патэнцыйна дазваляе дамагчыся выкананні свайго кода з падвышанымі прывілеямі праз адпраўку адмыслова аформленага запыту па шыне DBus. Праблема выпраўлена ў тэставым выпуску systemd 245-rc1 (вырашальныя праблему патчы: 1, 2, 3). Уразлівасць ухілена ў дыстрыбутывах Ubuntu, Мяккая фетравы капялюш, RHEL (выяўляецца ў RHEL 8, але не закранае RHEL 7), CentOS и SUSE/openSUSE, але на момант напісання навіны застаецца нявыпраўленай у Debian и Arch Linux.

Уразлівасць выклікана зваротам да ўжо вызваленай вобласці памяці (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 годзе ў версіі Systemd 220 (у RHEL 7.x выкарыстоўваецца systemd 219).

Крыніца: opennet.ru

Дадаць каментар