GCP - Artifact Registry Privesc
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Artifact Registry
Za više informacija o Artifact Registry, pogledajte:
artifactregistry.repositories.uploadArtifacts
Sa ovom dozvolom, napadač bi mogao da otpremi nove verzije artefakata sa zloćudnim kodom poput Docker slika:
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev
# tag the image to upload it
docker tag <local-img-name>:<local-tag> <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
# Upload it
docker push <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
caution
Provereno je da je moguće otpremiti novu zlu docker sliku sa istim imenom i oznakom kao ona koja već postoji, tako da će stara izgubiti oznaku i sledeći put kada se ta slika sa tom oznakom preuzme, zla će biti preuzeta.
Otpremi Python biblioteku
Počnite tako što ćete kreirati biblioteku za otpremu (ako možete preuzeti najnoviju verziju iz registra, možete izbeći ovaj korak):
- Postavite strukturu vašeg projekta:
- Kreirajte novi direktorijum za vašu biblioteku, npr.,
hello_world_library
. - Unutar ovog direktorijuma, kreirajte još jedan direktorijum sa imenom vašeg paketa, npr.,
hello_world
. - Unutar direktorijuma vašeg paketa, kreirajte
__init__.py
datoteku. Ova datoteka može biti prazna ili može sadržati inicijalizacije za vaš paket.
mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
- Napišite kod vaše biblioteke:
- Unutar direktorijuma
hello_world
, kreirajte novu Python datoteku za vaš modul, npr.,greet.py
. - Napišite vašu funkciju "Hello, World!":
# hello_world/greet.py
def say_hello():
return "Hello, World!"
- Kreirajte
setup.py
datoteku:
- U korenu vašeg direktorijuma
hello_world_library
, kreirajtesetup.py
datoteku. - Ova datoteka sadrži metapodatke o vašoj biblioteci i govori Pythonu kako da je instalira.
# setup.py
from setuptools import setup, find_packages
setup(
name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
# Bilo koje zavisnosti koje vaša biblioteka treba
],
)
Sada, hajde da otpremimo biblioteku:
- Izgradite vaš paket:
- Iz korena vašeg direktorijuma
hello_world_library
, pokrenite:
python3 setup.py sdist bdist_wheel
- Konfigurišite autentifikaciju za twine (koristi se za otpremu vašeg paketa):
- Uverite se da imate
twine
instaliran (pip install twine
). - Koristite
gcloud
za konfiguraciju kredencijala:
```
twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://<location>-python.pkg.dev/<project-id>/<repo-name>/ dist/*
```
```
3. **Očistite gradnju**
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">bash</span></div>
```bash
rm -rf dist build hello_world.egg-info
```
</details>
<div class="mdbook-alerts mdbook-alerts-caution">
<p class="mdbook-alerts-title">
<span class="mdbook-alerts-icon"></span>
caution
</p>
Nije moguće otpremiti python biblioteku sa istom verzijom kao što je već prisutna, ali je moguće otpremiti **veće verzije** (ili dodati dodatni **`.0` na kraju** verzije ako to funkcioniše - ne u pythonu), ili **obrisati poslednju verziju i otpremiti novu sa** (potrebno `artifactregistry.versions.delete)`**:**
```sh
gcloud artifacts versions delete <version> --repository=<repo-name> --location=<location> --package=<lib-name>
```
</div>
### `artifactregistry.repositories.downloadArtifacts`
Sa ovom dozvolom možete **preuzeti artefakte** i tražiti **osetljive informacije** i **ranjivosti**.
Preuzmite **Docker** sliku:
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">sh</span></div>
```sh
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev
# Dowload image
docker pull <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
```
Preuzmite **python** biblioteku:
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">bash</span></div>
```bash
pip install <lib-name> --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@<location>-python.pkg.dev/<project-id>/<repo-name>/simple/" --trusted-host <location>-python.pkg.dev --no-cache-dir
```
- Šta se dešava ako se udaljeni i standardni registri mešaju u virtuelnom i paket postoji u oba? Proverite ovu stranicu:
<a class="content_ref" href="../gcp-persistence/gcp-artifact-registry-persistence.md"><span class="content_ref_label">GCP - Artifact Registry Persistence</span></a>
### `artifactregistry.tags.delete`, `artifactregistry.versions.delete`, `artifactregistry.packages.delete`, (`artifactregistry.repositories.get`, `artifactregistry.tags.get`, `artifactregistry.tags.list`)
Obrišite artefakte iz registra, kao što su docker slike:
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">bash</span></div>
```bash
# Delete a docker image
gcloud artifacts docker images delete <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
```
### `artifactregistry.repositories.delete`
Obriši celu repozitoriju (čak i ako ima sadržaj):
```
gcloud artifacts repositories delete <repo-name> --location=<location>
```
### `artifactregistry.repositories.setIamPolicy`
Napadač sa ovom dozvolom mogao bi sebi dati dozvole da izvrši neke od prethodno pomenutih napada na repozitorijume.
### Prebacivanje na druge usluge putem Artifact Registry čitanja i pisanja
- **Cloud Functions**
Kada se kreira Cloud Function, nova docker slika se šalje u Artifact Registry projekta. Pokušao sam da modifikujem sliku novom, pa čak i da obrišem trenutnu sliku (i `cache` sliku) i ništa se nije promenilo, cloud funkcija nastavlja da radi. Stoga, možda bi **moglo biti moguće iskoristiti napad Race Condition** kao sa bucket-om da se promeni docker kontejner koji će se pokrenuti, ali **samo modifikovanjem sačuvane slike nije moguće kompromitovati Cloud Function**.
- **App Engine**
Iako App Engine kreira docker slike unutar Artifact Registry. Testirano je da **čak i ako modifikujete sliku unutar ove usluge** i uklonite App Engine instancu (tako da se nova implementira) **izvršeni kod se ne menja**.\
Možda bi bilo moguće da se izvrši **napad Race Condition kao sa bucket-ima da bi se prepisao izvršeni kod**, ali ovo nije testirano.
<div class="mdbook-alerts mdbook-alerts-tip">
<p class="mdbook-alerts-title">
<span class="mdbook-alerts-icon"></span>
tip
</p>
Učite i vežbajte AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
Učite i vežbajte GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
Učite i vežbajte Azure Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
<details>
<summary>Podržite HackTricks</summary>
- Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
- **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
- **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
</div>