Bezpečnostní výzkumníci z firmy Microsoft identifikovali dvě zranitelnosti (CVE-2022-29799, CVE-2022-29800) v službě networkd-dispatcher, která byla pojmenována Nimbuspwn a umožňuje neprivilegovanému uživateli vykonávat libovolné příkazy s právy root. Problém byl odstraněn v verzi networkd-dispatcher 2.2. Zatím neexistují žádné informace o uvolnění aktualizací distros (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).
Networkd-dispatcher se používá v mnoha distribucích Linuxu, včetně Ubuntu, které používají na správu síťových parametrů na pozadí běžící proces systemd-networkd, a vykonává funkce podobné jako NetworkManager-dispatcher, tedy spouští skripty při změně stavu síťového připojení, například se používá pro spuštění VPN po instalaci hlavního síťového připojení.
Související pozadí procesu networkd-dispatcher běží s právy root a přijímá signály o událostech přes sběrnici D-Bus. Informace o událostech souvisejících se změnou stavu síťových připojení jsou zasílány službou systemd-networkd. Problém spočívá v tom, že neprivilegovaní uživatelé mohou vytvořit událost o neexistujícím stavu a spustit svůj skript, který bude vykonán s právy root.
Systemd-networkd je navržen tak, aby spouštěl pouze systémové skripty zpracovatele umístěné v adresáři /etc/networkd-dispatcher, které nejsou dostupné pro uživatelskou náhradu, ale v důsledku zranitelnosti (CVE-2022-29799) v kódu pro zpracování souborových cest existovala možnost překročit základní adresář a spustit libovolné skripty. Konkrétně při vytváření cesty k skriptu byly využívány hodnoty OperationalState a AdministrativeState zasílané přes D-Bus, bez čištění speciálních znaků. Útočník mohl vygenerovat vlastní stav, jehož název obsahoval znaky „.. /“ a přesměrovat volání networkd-dispatcher do jiného adresáře.
Druhá zranitelnost (CVE-2022-29800) souvisí se závodem — mezi kontrolou parametrů skriptu (náležitost root) a jeho spuštěním existoval malý časový interval dostatečný k tomu, aby se soubor nahradil a obelstil kontrolu na náležitost skriptu k uživateli root. Navíc v networkd-dispatcher chyběla kontrola symbolických odkazů, včetně při spouštění skriptů přes volání subprocess.Popen, což zásadně zjednodušilo organizaci útoku.
Techniky provozu:
- Byla vytvořena složka „/tmp/nimbuspwn“ a symbolický odkaz „/tmp/nimbuspwn/poc.d“, který ukazuje na složku „/sbin“, jež se používá k ověřování přítomnosti spustitelných souborů patřících uživateli root.
- Pro spustitelné soubory ze „/sbin“ jsou vytvořeny soubory se shodným názvem ve složce „/tmp/nimbuspwn“, například pro soubor „/sbin/vgs“ se vytvoří spustitelný soubor „/tmp/nimbuspwn/vgs“, patřící nepřihlášenému uživateli, do kterého je umístěn kód, který útočník hodlá spustit.
- Pomocí D-Bus je procesu networkd-dispatcher odeslán signál se označením v OperationalState hodnotou „../../..../tmp/nimbuspwn/poc“. Pro odeslání signálu ve jménu prostoru „org.freedesktop.network1“ byla využita možnost připojení vlastních zpracovatelů k systemd-networkd, například prostřednictvím manipulací s gpgv nebo epmd, nebo lze využít fakt, že systemd-networkd není ve výchozím nastavení spuštěn (například v Linux Mint).
- Po obdržení signálu networkd-dispatcher provede vytvoření seznamu spustitelných souborů, které patří uživateli root a jsou dostupné ve složce „/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d“, která se ve skutečnosti odkazuje na „/sbin“.
- V okamžiku, kdy byl seznam souborů získán, ale skript ještě nebyl spuštěn, je symbolický odkaz přesměrován z „/tmp/nimbuspwn/poc.d“ na „/tmp/nimbuspwn“, a networkd-dispatcher spustí skript umístěný útočníkem s právy root.

Zdroj: opennet.ru
