Kořenová chyba zabezpečení v sadě nástrojů Snap Package Management Toolkit

Qualys letos identifikoval třetí nebezpečnou zranitelnost (CVE-2022-3328) v obslužném programu snap-confine, který je dodáván s kořenovým příznakem SUID a je volán procesem snapd, aby vytvořil spustitelné prostředí pro aplikace distribuované v samostatných balíčcích. ve formátu snap. Tato chyba zabezpečení umožňuje místnímu neprivilegovanému uživateli dosáhnout spuštění kódu jako root ve výchozí konfiguraci Ubuntu. Problém je opraven ve verzi snapd 2.57.6. Aktualizace balíčků byly vydány pro všechny podporované větve Ubuntu.

Je zajímavé, že dotyčná zranitelnost byla představena během procesu opravy podobné únorové zranitelnosti v snap-confine. Výzkumníci byli schopni připravit pracovní exploit, který poskytuje root přístup k Ubuntu Server 22.04, který kromě zranitelnosti v snap-confine zahrnuje také dvě zranitelnosti v multipathd procesu (CVE-2022-41974, CVE-2022-41973) , spojené s obcházením kontroly oprávnění při přenosu privilegovaných příkazů a nebezpečnou prací se symbolickými odkazy.

Chyba zabezpečení v snap-confine je způsobena sporem ve funkci must_mkdir_and_open_with_perms() přidané k ochraně před nahrazením adresáře /tmp/snap.$SNAP_NAME symbolickým odkazem po kontrole vlastníka, ale před voláním systému připojení. volání, aby se do něj připojily adresáře pro balíček ve formátu snap. Přidanou ochranou bylo přejmenování adresáře /tmp/snap.$SNAP_NAME na jiný adresář v /tmp s náhodným názvem, pokud existuje a není vlastněn uživatelem root.

Při využití operace přejmenování adresáře /tmp/snap.$SNAP_NAME výzkumníci využili skutečnosti, že snap-confine také vytváří adresář /tmp/snap.rootfs_XXXXXX pro kořen obsahu balíčku snap. Část názvu „XXXXXX“ je vybrána náhodně pomocí mkdtemp(), ale balíček s názvem „rootfs_XXXXXX“ lze ověřit funkcí sc_instance_name_validate (tj. myšlenka je taková, že $SNAP_NAME bude nastaven na „rootfs_XXXXXX“ a poté operace přejmenování bude mít za následek přepsání adresáře /tmp/snap.rootfs_XXXXXX kořenovým snapem).

Aby bylo dosaženo současného použití /tmp/snap.rootfs_XXXXXX a přejmenování /tmp/snap.$SNAP_NAME, byly spuštěny dvě instance snap-confine. Jakmile první instance vytvoří /tmp/snap.rootfs_XXXXXX, proces se zablokuje a druhá instance začne s názvem balíčku rootfs_XXXXXX, což způsobí, že se z dočasného adresáře druhé instance /tmp/snap.$SNAP_NAME stane kořenový adresář /tmp/snap .rootfs_XXXXXX z prvního. Ihned po dokončení přejmenování se zhroutila druhá instance a /tmp/snap.rootfs_XXXXXX bylo nahrazeno manipulací s race condition, jako při zneužití únorové chyby zabezpečení. Po nahrazení byl zámek provedení odstraněn z první instance a útočníci získali plnou kontrolu nad kořenovým adresářem snap.

Posledním krokem bylo vytvoření symbolického odkazu /tmp/snap.rootfs_XXXXXX/tmp, který byl použit funkcí sc_bootstrap_mount_namespace() k připojení a připojení zapisovatelného skutečného adresáře /tmp do libovolného adresáře v systému souborů, protože volání mount() před montáží následuje symbolické odkazy. Takové připojení je blokováno omezeními AppArmor, ale aby tento blok obešel, využil exploit dvě pomocné zranitelnosti v multipathd.

Zdroj: opennet.ru

Přidat komentář