Zranitelnosti v Pagure a OBS, které umožnily kompromitaci balíků v repozitářích Fedora a openSUSE.

Bezpečnostní výzkumníci z firmy Fenrisk odhalili zranitelnosti v nástrojích Pagure a OBS (Open Build Service), které umožnily kompromitaci infrastruktury pro vytváření balíčků distribucí Fedora a openSUSE. Výzkumníci demonstrovali schopnost provést útok pro vykonání libovolného kódu na serverech s Pagure a OBS, což by mohlo být použito k nahrazení změn v balíčcích v repozitářích Fedora a openSUSE.

V platformě Pagure, používané v Fedoře pro spolupráci s kódem a metadaty balíčků, byly odhaleny 4 zranitelnosti. K využití těchto problémů je potřeba mít účet na službě Pagure, který si může vytvořit kdokoliv (v současnosti je na Pagure.io registrováno 24899 uživatelů). Tři problémy umožňují čtení souborů v systému a jeden problém vykonání vlastního kódu na serveru. Problémy byly odhaleny 1. ledna 2024, oznámeny prostřednictvím bugzilla.redhat.com 25. dubna 2024 a opraveny v Pagure během 3 hodin.

  • Zranitelnosti CVE-2024-4981 a CVE-2024-47515 jsou způsobeny nesprávným zpracováním symbolických odkazů v funkcích aktualizace souborů a generování archivů. Zranitelnosti umožňují číst obsah lokálních souborů na serveru, například je možné zjistit obsah souboru s parametry sezení administrátora Pagure a získat přístup s jeho právy. Využití zranitelnosti v funkci _update_file_in_git() spočívá ve vytvoření repozitáře v Pagure; přidání do něj commitu s novým souborem, který je vytvořen jako symbolický odkaz na požadovaný systémový soubor; otevření tohoto souboru pro úpravy v webovém rozhraní.
  • Zranitelnost (CVE-2024-4982) ve funkci view_issue_raw_file() umožňuje přešlo mimo základní katalog prostřednictvím zadání znaků "\/.." v parametrech požadovaného issue. Problém umožňuje číst soubory v systému, jak dovolují přístupová práva procesu, pod kterým je webové rozhraní prováděno. Například pro zobrazení souboru \/etc\/passwd lze otevřít stránku "http:\/\/pagure.local:5000\/your-repository\/issue\/raw\/..\/..\/..\/..\/..\/..\/..\/etc\/passwd".
  • Zranitelnost (CVE-2024-47516) v funkci PagureRepo.log() umožňuje provést vlastní příkazy a vykonat kód na serveru. Problém je způsoben tím, že při zobrazení historie změn souboru prostřednictvím webového rozhraní je vyvolán příkaz „git“ s předáním identifikátoru větve v příkazovém řádku (například „/usr/bin/git —pretty=oneline —abbrev-commit — README.md“). Správnost identifikátoru není kontrolována, a proto lze místo něj předat jakoukoliv volbu příkazového řádku, například „—output=/tmp/foo.bar“ pro přesměrování výstupu do souboru. Útočník může přepsat soubor v systému zasláním požadavku následujícího typu: http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar

    Pagure běží pod uživatelským účtem git, takže je možné přepsat pouze soubory tohoto uživatele. Pro vykonání vlastního kódu na serveru lze využít službu pro přístup k repozitáři přes SSH, při jejímž použití se provádí příkaz „bash -c /usr/libexec/pagure/aclchecker.py“. Útočník může zranitelnost využít k přepsání souboru „/srv/git/.bashrc“ a tento soubor bude spuštěn příkazovým interpretem bash při přístupu k repozitáři přes SSH.

    Útok spočívá v registraci v systému Pagure, vytvoření repozitáře, přidání do repozitáře souboru README.md s poznámkou k commitu ve formátu „|| /bin/bash“ a odeslání požadavku „http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc“. V průběhu těchto kroků bude do souboru „/srv/git/.bashrc“ zapsán řádek ve formátu „34а5с43 || /bin/bash“. Pro spuštění vytvořeného souboru „/srv/git/.bashrc“ stačí se připojit k repozitáři přes SSH pod svým uživatelským účtem. Vykonání kódu s právy uživatele git na serveru Pagure umožňuje kontrolovat veškerý obsah repozitářů s balíčky.

Na platformě OBS (Open Build Service), používané v openSUSE a některých dalších distribucích pro sestavování balíčků, byla odhalena jedna zranitelnost (CVE-2024-22033), která umožňuje vykonat vlastní kód na serveru. Zranitelnost byla identifikována 27. června 2024, projekt openSUSE byl informován 29. června a oprava byla provedena 10. července.

Zranitelnost se nachází v službě „obs-service-download_url“, kde chyběla patřičná kontrola URL, používané při spuštění utility wget ze skriptu, který stahuje zdrojový kód do OBS. Útočník může v službě OBS nastavit konfiguraci vytvářeného balíčku, ve které místo URL pro stahování kódu bude uvedena volba příkazového řádku pro wget, například: --output-document=\/tmp\/test tempfile

Aby se obcházelo vracení chyby při pokusu spustit wget bez URL, je v příkladu uvedena volba „download-manifest“, která umožňuje specifikovat seznam URL v samostatném souboru. Výše uvedený příklad povede k spuštění příkazu: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 --output-document=\/tmp\/test

který umožňuje zapsat do souboru \/tmp\/test obsah stažený z odkazu uvedeného v souboru \/srv\/obs\/service\/XXXXX\/src\/tempfile z kódu, který útočník nahrál do OBS prostřednictvím rozhraní build.opensuse.org, které umožňuje volnou registraci. Kromě přepsání souboru na serveru může útočník také poslat jakýkoli soubor, pokud místo „--output-document“ použije volbu „--post-file“, například „--post-file=\/etc\/passwd“. Tímto způsobem může útočník číst a zapisovat soubory na serveru, jak umožňují oprávnění, pod kterými běží služba OBS.

Aby mohli přetvořit možnost zápisu do souboru na vykonání kódu na serveru, navrhli výzkumníci metodu skládající se ze dvou fází. Dvě fáze jsou nezbytné, protože útočník může vytvořit soubor „.wgetrc“ s nastaveními pro wget, ale to není dostatečné pro spuštění příkazů. Ale přitom, přes „.wgetrc“ lze vytvořit podmínky pro spuštění jakéhokoliv programu v systému, ale bez předání jejím argumentů. Pro spuštění libovolného kódu je navrženo spouštět program „prove“, který zpracovává konfigurační soubor „.proverc“, který umožňuje specifikaci volby „--exec“ pro vykonání jakéhokoliv kódu.

V prvním kroku se prostřednictvím výše uvedených manipulací s „download-manifest“ v domovském adresáři uživatele „obsservicerun“ vytvoří soubor „.proverc“, který zahrnuje příkazy, jež budou vykonány při spuštění procesu „prove“. Ve druhém kroku se vytvoří soubor „.wgetrc“ s parametrem „use-askpass=\/usr\/bin\/prove“, což vyvolává volání „prove“. Jakmile se tyto soubory objeví, stačí vytvořit podmínky pro stažení jakýchkoliv dat pomocí wget a to povede k spuštění kódu útočníka na serveru s právy uživatele „obsservicerun“. Práva uživatele „obsservicerun“ jsou dostatečná pro získání klíčů z repozitářů, které uživatelé OBS používají k podepisování balíčků.

Doplňující informace: Tým SUSE Product Security se domnívá, že nebezpečí zranitelnosti v OBS je přeceňováno a prohlášení výzkumníků, že problém umožňuje kompromitaci všech balíčků v distribuci openSUSE, není pravdivé. Je zdůrazněno, že služby v infrastruktuře build.opensuse.org běží v izolovaných kontejnerech, které jsou znovu vytvářeny a neobsahují citlivé informace. Zjištěná zranitelnost je hodnocena jako nebezpečná, ale nedostatečná pro kompromitaci stavební infrastruktury openSUSE a vytvářených balíčků. Dále bylo uvedeno, že akce v rozhraní OBS, popsané v příkladu útoku, mohly být provedeny pouze v instancech OBS, které byly lokálně nainstalovány na pracovní stanici vývojáře.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster