V balíčkovém správci Guix byly zjištěny zranitelnosti (CVE nebyl přidělen) v implementaci interního příkazu „guix substitute“, který je automaticky vyvoláván na pozadí procesem guix-daemon při provádění operací instalace balíčků. Tento příkaz se používá k načítání již sestavených binárních balíčků z externích serverů při kontrole jejich integrity pomocí digitálního podpisu. Nejnebezpečnější zranitelnost umožňuje vzdálené spuštění kódu na systému uživatele s právy, pod kterými běží pozadí proces guix-daemon.
Problém se dotýká všech konfigurací s procesem guix-daemon, bez ohledu na to, zda je spuštěn s právy root nebo pod nezprivilegovaným uživatelským účtem. Pro zneužití zranitelnosti stačí jakýkoliv pokus o stažení již sestavených binárních balíčků z serveru, které jsou pod kontrolou útočníka. Přičemž škodlivý server nemusí být nutně výslovně vybrán nebo určen v uživatelských nastaveních — může být určen pomocí volby „—discover“, což umožňuje provést substituci serveru během útoku MITM. V konfiguracích, kde je guix-daemon spuštěn s elevated privileges, může místní uživatel provést útok, pokud má možnost připojení k background procesu přes Unix socket (výchozí je přístupný všem uživatelům).
Zranitelnost je přítomna v zpracovatele „restore-file“, používaného pro rozbalení balíčku během jeho načítání, aniž by čekal na jeho plné načtení a verifikaci staženého archivu pomocí digitálního podpisu. Problém je způsoben nedostatkem kontroly na přítomnost znaků „.“, „/“ a „..“ v umístěných v archivu souborových cestách. Pomocí substituce neplatných jmen souborů do archivu může útočník dosáhnout zápisu libovolného souboru do jakékoli oblasti souborového systému, pokud to umožňují práva, pod kterými běží pozadí proces guix-daemon.
Aby bylo možné vykonat svůj kód v systému, lze například přidat automaticky spouštěný skript, jako je „~/.bashrc“ nebo „~/.profile“, nebo změnit soubor „~/.ssh/authorized_keys“ s SSH klíči. Pokud je v mnohomužatelské systému guix-daemon spuštěn pod uživatelským účtem root, útočník může přepsat soubor s hesly nebo systémové skripty.
Možnost vytváření podvržených serverů pro šíření škodlivých balíčků vznikla z toho, že proces stahování metadat (narinfo) o dostupných binárních balíčcích (fetch-narinfos) neprováděl kontrolu certifikátu serveru, spoléhajíc na to, že hlavní část metadat byla podepsaná digitálním podpisem. Jak se ukázalo, podpis nepokrýval URL pro stahování balíčku, což umožnilo jeho podvržení, aniž by došlo k porušení integrity metadat. Nakonec by byl podvržený balíček odmítnut kvůli neprocházení kontroly jeho obsahu podle hash, který byl podepsán digitálním podpisem, ale tato kontrola byla prováděna až po fázi rozbalení, kde se projevoval problém se speciálními znaky v názvech souborů.
Kromě příkazu „guix substitute“ je zranitelný zpracovatel „restore-file“ využíván také v příkazech „guix offload“, „guix archive —extract“ a „guix challenge“, pomocí kterých lze rovněž zranitelnost zneužít. Jako dočasné řešení pro zablokování zranitelnosti se doporučuje výslovně uvádět možnost „—no-substitutes“ ve všech příkazech guix. Oprava zranitelnosti byla zahrnuta do kódu Guix. Uživatelům se doporučuje okamžitě nainstalovat vydané aktualizace guix a guix-daemon od vývojářů.
Kromě uvedeného problému bylo v Guix odstraněno ještě další tři zranitelnosti:
- Možnost podvrhnout binární balíčky kvůli absenci kontroly souladu požadovaného balíčku s vrácenými metadaty ve zpracovateli fetch-narinfos. Zranitelnost může být použita k dodání zastaralé verze požadovaného balíčku, která obsahuje zranitelnosti.
- Určení obsahu prvního řádku libovolných souborů v systému skrze předání dotazu místním uživatelem s URI „file://“ („—substitute-urls file:////etc/shadow“). Pokud je guix-daemon spuštěn s právy root, přečte požadovaný soubor, určí, že se nejedná o metadata, a vyhodí chybu, ve které bude zmíněn řádek, který se nepodařilo analyzovat.
- Zadání speciálně formátovaného názvu externího repozitáře („..\/..\/..\/..\/newfile“) při provádění příkazů „guix pull“ a „guix time-machine“ umožňuje zapsat data s informacemi o commitu do libovolného existujícího souboru v souborovém systému, pokud jeho obsah připomíná seznam řetězců v jazyce Scheme. Zranitelnost může být použita pro DoS útoky, ale není vyloučeno, že prostřednictvím rafinovaných manipulací s pseudofirmwarem \/proc lze dosáhnout nebezpečnějších manipulací se systémem.
Zdroj: opennet.ru
