GCP - Artifact Registry Privesc

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Artifact Registry

Aby uzyskać więcej informacji na temat Artifact Registry, sprawdź:

pageGCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Z tym uprawnieniem atakujący mógłby przesyłać nowe wersje artefaktów z złośliwym kodem, takimi jak obrazy 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>

Sprawdzono, że jest możliwe przesłanie nowego złośliwego obrazu docker o tej samej nazwie i tagu co już istniejący, więc stary obraz straci tag i następnym razem, gdy ten obraz z tym tagiem zostanie pobrany, zostanie pobrany złośliwy obraz.

Prześlij bibliotekę Pythona

Zacznij od utworzenia biblioteki do przesłania (jeśli możesz pobrać najnowszą wersję z rejestru, możesz ominąć ten krok):

  1. Ustaw strukturę projektu:

  • Utwórz nowy katalog dla biblioteki, np. hello_world_library.

  • Wewnątrz tego katalogu utwórz kolejny katalog o nazwie pakietu, np. hello_world.

  • Wewnątrz katalogu pakietu utwórz plik __init__.py. Ten plik może być pusty lub może zawierać inicjalizacje dla pakietu.

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. Napisz kod biblioteki:

  • Wewnątrz katalogu hello_world utwórz nowy plik Pythona dla modułu, np. greet.py.

  • Napisz funkcję "Hello, World!":

# hello_world/greet.py
def say_hello():
    return "Hello, World!"
  1. Utwórz plik setup.py:

  • W głównym katalogu hello_world_library utwórz plik setup.py.

  • Ten plik zawiera metadane o twojej bibliotece i mówi Pythonowi, jak ją zainstalować.

# setup.py
from setuptools import setup, find_packages

setup(
    name='hello_world',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        # Wszystkie zależności twojej biblioteki
    ],
)

Teraz przekażmy bibliotekę:

  1. Zbuduj pakiet:

  • Z głównego katalogu hello_world_library uruchom:

python3 setup.py sdist bdist_wheel
  1. Skonfiguruj uwierzytelnianie dla twine (używanego do przesyłania pakietu):

  • Upewnij się, że masz zainstalowany twine (pip install twine).

  • Użyj gcloud do skonfigurowania poświadczeń:

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

rm -rf dist build hello_world.egg-info

Nie jest możliwe przesłanie biblioteki Pythona o tej samej wersji, która już istnieje, ale możliwe jest przesłanie wyższych wersji (lub dodanie dodatkowego .0 na końcu wersji, jeśli to działa - nie w przypadku Pythona), lub usunięcie ostatniej wersji i przesłanie nowej (wymagane artifactregistry.versions.delete):

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

artifactregistry.repositories.downloadArtifacts

Z tym uprawnieniem możesz pobrać artefakty i wyszukiwać wrażliwe informacje oraz luki w zabezpieczeniach.

Pobierz obraz 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>

Pobierz bibliotekę 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
  • Co się stanie, jeśli wirtualne repozytorium zawiera zarówno zdalne, jak i standardowe repozytoria, a pakiet istnieje w obu? Sprawdź tę stronę:

pageGCP - Artifact Registry Persistence

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

Usuń artefakty z repozytorium, takie jak obrazy Docker:

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

artifactregistry.repositories.delete

Usuń całe repozytorium (nawet jeśli ma zawartość):

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

artifactregistry.repositories.setIamPolicy

Atakujący posiadający to uprawnienie mógłby nadać sobie uprawnienia do wykonania niektórych wcześniej wspomnianych ataków na repozytorium.

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated