GCP - Artifact Registry Privesc

Wesprzyj HackTricks

Rejestr artefaktów

Aby uzyskać więcej informacji na temat Rejestru Artefaktów, sprawdź:

GCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Z tym uprawnieniem atakujący mógłby wgrywać nowe wersje artefaktów z złośliwym kodem, takie 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ż obecny, więc stary obraz straci tag, a następnym razem, gdy ten obraz z tym tagiem zostanie pobrany, zostanie pobrany złośliwy.

Prześlij bibliotekę Pythona

Zacznij od stworzenia 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 swojej 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 twojego pakietu.

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

  • Wewnątrz katalogu hello_world utwórz nowy plik Pythona dla swojego 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 twojego 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 prześlij bibliotekę:

  1. Zbuduj pakiet:

  • Z głównego katalogu twojego hello_world_library uruchom:

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

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

  • Użyj gcloud, aby skonfigurować poświadczenia:

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 można przesłać biblioteki Pythona z tą samą wersją, która już istnieje, ale można przesłać większe wersje (lub dodać dodatkowe .0 na końcu wersji, jeśli to działa - nie w przypadku Pythona -), lub usunąć ostatnią wersję i przesłać nową (potrzebne 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 oraz wyszukiwać informacje poufne i 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 mieszane są zdalne i standardowe rejestry wirtualne, a pakiet istnieje w obu? Sprawdź tę stronę:

GCP - Artifact Registry Persistence

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

Usuń artefakty z rejestru, 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ń pełne 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.

Wesprzyj HackTricks

Last updated