Chyby zabezpečení v síťovém dispečeru, které umožňují přístup root

Bezpečnostní výzkumníci společnosti Microsoft identifikovali dvě zranitelnosti (CVE-2022-29799, CVE-2022-29800) ve službě síťového dispečera s kódovým označením Nimbuspwn, které umožňují nepřivilegovanému uživateli spouštět libovolné příkazy s oprávněními root. Problém je vyřešen ve verzi networkd-dispatcher 2.2. O publikování aktualizací podle distribucí zatím nejsou žádné informace (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).

Networkd-dispatcher se používá v mnoha distribucích Linuxu, včetně Ubuntu, které ke konfiguraci síťových parametrů používají proces na pozadí systemd-networkd a plní funkce podobné NetworkManager-dispatcher, tzn. se zabývá spouštěním skriptů, když se změní stav síťového připojení, například se používá ke spuštění VPN po navázání hlavního síťového připojení.

Proces na pozadí spojený se síťovým dispečerem běží jako root a přijímá signály událostí přes D-Bus. Informace o událostech souvisejících se změnami stavu síťových připojení odesílá služba systemd-networkd. Problém je v tom, že neprivilegovaní uživatelé mohou vygenerovat neexistující stavovou událost a spustit jejich skript jako root.

Systemd-networkd je navržen tak, aby spouštěl pouze skripty systémové obslužné rutiny umístěné v adresáři /etc/networkd-dispatcher a nejsou přístupné pro nahrazení uživatelem, ale kvůli zranitelnosti (CVE-2022-29799) v kódu zpracování cesty k souboru došlo možnost mimo hranice základního adresáře a spouštění libovolných skriptů. Zejména při vytváření cesty k souboru ke skriptu byly použity hodnoty OperationalState a AdministrativeState přenášené přes D-Bus, ve kterých nebyly vymazány speciální znaky. Útočník mohl vygenerovat svůj 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 sporem – mezi kontrolou parametrů skriptu (patřícího uživateli root) a jeho spuštěním byla krátká doba, dostačující k nahrazení souboru a obejití kontroly, zda skript patří uživateli root. Networkd-dispatcher navíc nekontroloval symbolické odkazy, a to ani při spouštění skriptů přes subprocess.Popen call, což výrazně zjednodušilo organizaci útoku.

Operační technika:

  • Vytvoří se adresář „/tmp/nimbuspwn“ a symbolický odkaz „/tmp/nimbuspwn/poc.d“ ukazující na adresář „/sbin“, který se používá ke kontrole spustitelných souborů vlastněných uživatelem root.
  • Pro spustitelné soubory z „/sbin“ se v adresáři „/tmp/nimbuspwn“ vytvoří soubory se stejným názvem, například pro soubor „/sbin/vgs“ je spustitelný soubor „/tmp/nimbuspwn/vgs“ vytvořený, vlastněný neprivilegovaným uživatelem, do kterého je umístěn kód, který chce útočník spustit.
  • Přes D-Bus je odeslán signál do síťového dispečerského procesu s uvedením hodnoty „../../../tmp/nimbustwn/poc“ v OperationalState. Pro odeslání signálu v jmenném prostoru „org.freedesktop.network1“ byla využita možnost připojit jeho handlery k systemd-networkd například pomocí manipulací s gpgv nebo epmd, nebo můžete využít toho, že systemd-networkd ve výchozím nastavení neběží (například na Linux Mint).
  • Po obdržení signálu vytvoří Networkd-dispatcher seznam spustitelných souborů vlastněných uživatelem root a dostupných v adresáři „/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d“, který ve skutečnosti odkazuje na "/sbin".
  • V okamžiku, kdy je přijat seznam souborů, ale skript ještě není spuštěn, je symbolický odkaz přesměrován z „/tmp/nimbuspwn/poc.d“ na „/tmp/nimbuspwn“ a networkd-dispatcher spustí skript hostovaný útočníkem s právy root.

Chyby zabezpečení v síťovém dispečeru, které umožňují přístup root


Zdroj: opennet.ru

Přidat komentář