GCP - Artifact Registry Privesc

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Artifact Registry

Per ulteriori informazioni sull'Artifact Registry, controlla:

pageGCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Con questo permesso, 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 immagine perderà il tag e la prossima volta che verrà scaricata l'immagine con quel tag verrà scaricata quella malevola.

Carica una libreria Python

Inizia creando la libreria da caricare (se è possibile 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 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. Compila il tuo pacchetto:

  • Dalla radice della 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 compilazione

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 è possibile 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:

pageGCP - 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 completamente un repository (anche se contiene contenuti):

``` gcloud artifacts repositories delete --location= ``` ### `artifactregistry.repositories.setIamPolicy`

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

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated