Qualys tuvastas utiliidis needrestart kolm haavatavust, mis on mÔeldud taustprotsesside taaskÀivitamiseks pÀrast andmete töötlemisel kasutatavate teekide vÀrskendamist. Alates Ubuntu 21.04 on utiliit needrestart osa Ubuntu Serveri pÔhi keskkonnast, mille Ôigustega root kÀivitub iga APT pakihalduse tehingu lÔpus, skaneerib kÀimasolevaid protsesse ja taaskÀivitab need, mis on seotud pakettide vÀrskendamise jÀrel muutunud failidega. Tuvastatud haavatavused vÔimaldavad kohalikel, privileegideta kasutajatel saada root-Ôigusi Ubuntu Serveris vaike konfiguratsioonis.
Haavatavused on olemas needrestart'is alates versioonist 0.8 (2014. aasta) ja on kĂ”rvaldatud needrestart versioonis 3.8. Probleemid on juba parandatud ka Debian ja Ubuntu distributsioonides. Ăhe vĂ”imaliku lahendusena haavatavuse Ă€rakasutamise vĂ€ltimiseks saab skaneerimise keelata interpreteerijates, mÀÀrates konfiguratsioonifailis /etc/needrestart/needrestart.conf parameetri "$nrconf{interpscan} = 0".
Haavatavused on olemas koodis, mis mÀÀratleb skriptide vĂ€rskendamise tuvastamise reĆŸiimi, mida kĂ€ivitatakse interpreteerijate abil. Tuvastatud probleemid:
- CVE-2024-48990 â Kohalik kasutaja suudab saavutada root-Ă”igustega koodi tĂ€itmise, luues tingimused Python-interpreteerija kĂ€ivitamiseks, seadistades rĂŒnnakuga kaasasoleva keskkonnamuutuja PYTHONPATH. Lisaks Pythonile saab rĂŒnnakut lĂ€bi viia ka (CVE-2024-48992) Ruby interpretaatori kĂ€ivitamise kaudu, seadistades keskkonnamuutuja RUBYLIB.
Haavatavused on pĂ”hjustatud sellest, et needrestart utiliit seadis muudetud skripti taaskĂ€ivitamise kĂ€igus keskkonnamuutujate PYTHONPATH vÀÀrtuse, mis pĂ”hineb failis /proc/pid/environ oleva sisu pĂ”hjal. RĂŒndaja saab oodata APT pakihaldusega seotud aktiivsust, simuleerida oma skripti muutmist ja mÀÀrata selle jaoks keskkonnamuutuja PYTHONPATH, mis rakendatakse ka needrestart'i koodis sisse ehitatud Python-koodi kĂ€ivitamisel ("import sys\n print(sys.path)"), mis tĂ€idetakse root-Ă”igustes.
NÀiteks, haavatavuse kasutamiseks vÔib luua pidevalt mÀlu kasutava Python-protsessi, seades selle keskkonnamuutuja "PYTHONPATH=/home/test", ja paigutada jagatud teeki " /home/test/importlib/__init__.so", mis kÀivitatakse privileegidega Python-koodi tÀitmisel needrestarti poolt.
- CVE-2024-48991 â kohalik kasutaja vĂ”ib saavutada root-Ă”igustega koodi kĂ€ivitamise, pĂ”hjustades vĂ”istlusseisundi (race condition), mille tulemusena kĂ€ivitab needrestart rĂŒndaja mÀÀratud vale Python-interpreteerija sĂŒsteemse Python-interpreteerija asemel. Haavatavuse olemus on sarnane eespool mainitud probleemiga, ainus erinevus on see, et needrestart mÀÀrab Python-protsessi nime (nt /usr/bin/python3), lugedes " /proc/pid/exe".
Haavatavuse kasutamiseks on vĂ”imalik luua protsess /home/test/race, mis kasutab inotify mehhanismi, et oodata, kuni needrestart hakkab lugema sisu /proc/pid/exe, ja seejĂ€rel kohe kĂ€ivitab sĂŒsteemse Python-interpreteerija execve-funktsiooni kaudu. Kuna needrestart ei tee kontrolli, kas see on tegelik Python, peab ta /home/test/race'i Python-interpreteerijaks ja kĂ€ivitab selle oma koodi jaoks.
- CVE-2024-11003 â kohalik kasutaja vĂ”ib saavutada suvaliste shell-kĂ€skude kĂ€ivitamise root-Ă”igustega, luues needrestartis failinimede töötlemiseks tingimused vormingus "kĂ€sk|", mille edastamine Perl-funktsioonile open() viib kĂ€su kĂ€ivitamiseni. Tegelikult vĂ€ljendub haavatavus Perl-modulis ScanDeps (CVE-2024-10224), kuid seda pĂ”hjustab vĂ€listest parameetritest ilma nĂ”utava kontrollita modulisse saatmine.
RĂŒnnakut saab teostada kĂ€ivitades Perl-skripti, mille nimel on sĂŒmbol "|", nĂ€iteks " /home/test/perl|". scan_deps() funktsiooni tĂ€itmise kĂ€igus avab needrestart selle faili open() funktsiooni kaudu, mis kĂ€sitleb sĂŒmbolit "|" lipuna programmi " /home/test/perl" kĂ€ivitamiseks ja saadud vĂ€ljundvoo kasutamiseks.
Allikas: opennet.ru
