GCP - Artifact Registry Privesc

Supporta HackTricks

Registro degli artefatti

Per ulteriori informazioni sul Registro degli artefatti, controlla:

GCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Con questa autorizzazione un attaccante potrebbe caricare nuove versioni degli artefatti con codice dannoso come immagini Docker:

# 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>

È stato verificato che è possibile caricare una nuova immagine Docker malevola con lo stesso nome e tag di quella già presente, quindi la vecchia perderà il tag e la prossima volta che quell'immagine con quel tag viene scaricata verrà scaricata quella malevola.

Carica una libreria Python

Inizia creando la libreria da caricare (se puoi scaricare l'ultima versione dal registro puoi evitare questo passaggio):

  1. Configura la struttura del tuo progetto:

  • Crea una nuova directory per la tua libreria, ad esempio hello_world_library.

  • All'interno di questa directory, crea un'altra directory con il nome del tuo pacchetto, ad esempio hello_world.

  • All'interno della directory del tuo pacchetto, crea un file __init__.py. Questo file può essere vuoto o può contenere inizializzazioni per il tuo pacchetto.

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. Scrivi il codice della tua libreria:

  • All'interno della directory hello_world, crea un nuovo file Python per il tuo modulo, ad esempio greet.py.

  • Scrivi la tua funzione "Hello, World!":

# hello_world/greet.py
def say_hello():
return "Ciao, Mondo!"
  1. Crea un file setup.py:

  • Nella radice della tua directory hello_world_library, crea un file setup.py.

  • Questo file contiene metadati sulla tua libreria e dice a Python come installarla.

# setup.py
from setuptools import setup, find_packages

setup(
name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
# Eventuali dipendenze necessarie per la tua libreria
],
)

Ora, carichiamo la libreria:

  1. Crea il tuo pacchetto:

  • Dalla radice della tua directory hello_world_library, esegui:

python3 setup.py sdist bdist_wheel
  1. Configura l'autenticazione per twine (usato per caricare il tuo pacchetto):

  • Assicurati di avere twine installato (pip install twine).

  • Usa gcloud per configurare le credenziali:

twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://<location>-python.pkg.dev/<project-id>/<repo-name>/ dist/*
  1. Pulisci la build

rm -rf dist build hello_world.egg-info

Non è possibile caricare una libreria python con la stessa versione di quella già presente, ma è possibile caricare versioni superiori (o aggiungere un extra .0 alla fine della versione se funziona -non in python però-), o eliminare l'ultima versione e caricarne una nuova con (necessario artifactregistry.versions.delete):

gcloud artifacts versions delete <version> --repository=<repo-name> --location=<location> --package=<lib-name>

artifactregistry.repositories.downloadArtifacts

Con questa autorizzazione puoi scaricare artefatti e cercare informazioni sensibili e vulnerabilità.

Scarica un'immagine Docker:

# 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>

Scarica una libreria python:

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
  • Cosa succede se un registro remoto e uno standard vengono mescolati in uno virtuale e un pacchetto esiste in entrambi? Controlla questa pagina:

GCP - Artifact Registry Persistence

artifactregistry.tags.delete, artifactregistry.versions.delete, artifactregistry.packages.delete, (artifactregistry.repositories.get, artifactregistry.tags.get, artifactregistry.tags.list)

Elimina artefatti dal registro, come immagini docker:

# Delete a docker image
gcloud artifacts docker images delete <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

artifactregistry.repositories.delete

Elimina un intero repository (anche se contiene del contenuto):

gcloud artifacts repositories delete <repo-name> --location=<location>

artifactregistry.repositories.setIamPolicy

Un attaccante con questa autorizzazione potrebbe concedersi autorizzazioni per eseguire alcuni degli attacchi al repository precedentemente menzionati.

Sostieni HackTricks

Last updated