A needrestart segédprogramban felfedezett sebezhetőségek, amelyek root hozzáférést tesznek lehetővé az Ubuntu Serveren.

A Qualys cég három sebezhetőséget tárt fel a needrestart segédprogramban, amelyet a háttérfolyamatok újraindítására terveztek az adatfolyamatok által használt könyvtárak frissítése után. Az Ubuntu 21.04-től kezdődően a needrestart segédprogram a Ubuntu Server alapértelmezett környezetének része, amely root jogokkal fut az APT csomagkezelő tranzakcióinak végén, átvizsgálja a futó folyamatokat, és újraindítja azokat, amelyek a csomagok frissítése után megváltozott fájlokhoz kapcsolódnak. A felfedezett sebezhetőségek lehetővé teszik, hogy egy helyi, nem privilégizált felhasználó root jogokat szerezzen a Ubuntu Server alapértelmezett konfigurációjában.

A sebezhetőségek a needrestart 0.8-as verziójától (2014) kezdődően vannak jelen, és a needrestart 3.8-as kiadásában kerültek javításra. A problémákat már kijavították a Debian és Ubuntu disztribúciókban is. Az exploitálás blokkolásának alternatívájaként letiltható a szkriptek vizsgálata, ha a konfigurációs fájlban, a /etc/needrestart/needrestart.conf fájlban a „$nrconf{interpscan} = 0” paraméter szerepel.

A sebezhetőségek a szkriptek frissítési mód meghatározásának implementációjában találhatók, amelyeket értelmezők segítségével futtatnak. A felfedezett problémák:

  • CVE-2024-48990 – helyi felhasználó root jogokkal kódvégrehajtást érhet el azzal, hogy a támadó által beállított PYTHONPATH környezeti változóval indítja el a Python értelmezőt. A Python mellett a támadás (CVE-2024-48992) végrehajtható a Ruby értelmező indításával is, amelyhez a RUBYLIB környezeti változót használják.

    A sebezhetőségek azért lépnek fel, mert a needrestart segédprogram a megváltozott szkript újraindítása során a PYTHONPATH környezeti változót a /proc/pid/environ fájl tartalma alapján állítja be, amit később saját Python-kódjának futtatásához is használ. Ennek megfelelően a támadó várakozhat az APT csomagkezelő működésével összefüggő aktivitásra, szimulálhatja egy saját szkriptje megváltoztatását, és beállíthat egy PYTHONPATH környezeti változót, amely a needrestart beépített Python-kódjának indításakor is alkalmazásra kerül („import sys print(sys.path)”), amely root jogokkal kerül végrehajtásra.

    Például a sérülékenység kihasználásához folyamatosan memóriában lógó Python-folyamatot indíthatunk, beállítva a "PYTHONPATH=\/home\/test" környezeti változót, és elhelyezve a "\/home\/test\/importlib\/__init__.so" megosztott könyvtárat, amely végrehajtásra kerül, amikor a privileged Python-kód végrehajtása történik a needrestart keretében.

  • CVE-2024-48991 — a helyi felhasználó root jogosultságú kód végrehajtására tehet szert úgy, hogy versenyhelyzetet (race condition) idéz elő, amelynek következtében a needrestart egy támadó által megadott álkörnyezetet indít el Python helyett a rendszer Python értelmező helyett. A sérülékenység lényege hasonló a fent említett problémához, a különbség csak annyi, hogy a needrestart a Python folyamat nevét (például \/usr\/bin\/python3) a "\/proc\/pid\/exe" olvasásával határozza meg.

    A sérülékenység kihasználásához létre lehet hozni egy \/home\/test\/race nevű folyamatot, amely az inotify mechanizmus segítségével megvárja, hogy a needrestart elkezdje olvasni a "\/proc\/pid\/exe" tartalmát, és az execve függvényen keresztül azonnal elindítja a rendszer Python értelmezőt. Mivel a needrestart nem ellenőrzi, hogy ez valódi Python-e, azt hiszi, hogy a \/home\/test\/race a Python értelmező, és azt fogja indítani a saját kódjával.

  • CVE-2024-11003 — a helyi felhasználó root jogosultságú tetszőleges shell parancsok végrehajtására tehet szert, ha feltételeket teremt a needrestart fájlnevek "parancs|" formátumban történő feldolgozásához, amelyeket a Perl open() függvénybe adva a parancs végrehajtását okozza. A sérülékenység valójában a Perl-modul ScanDeps (CVE-2024-10224) révén jelentkezik, de az, hogy ezeket a modult megfelelő ellenőrzés nélkül külső paraméterekkel hívják meg, idézi elő.

    A támadás úgy valósítható meg, hogy Perl szkriptet indítunk el, amelynek neve "|" karaktert tartalmaz, például a "\/home\/test\/perl|". A needrestart scan_deps() függvényének végrehajtása során ez a fájl a open() függvényen keresztül megnyílik, amely a "|" karaktert a "\/home\/test\/perl" program elindításának jelzéséül kezeli, és a programtól kapott kimeneti áramot használja fel.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster