GCP - Artifact Registry Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Artifact Registry

Für weitere Informationen zu Artifact Registry siehe:

pageGCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Mit dieser Berechtigung könnte ein Angreifer neue Versionen der Artefakte mit bösartigem Code wie Docker-Images hochladen:

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

Es wurde überprüft, dass es möglich ist, ein neues bösartiges Docker-Image hochzuladen mit demselben Namen und Tag wie das bereits vorhandene, sodass das alte den Tag verliert und beim nächsten Mal, wenn das Bild mit diesem Tag heruntergeladen wird, das bösartige heruntergeladen wird.

Laden Sie eine Python-Bibliothek hoch

Beginnen Sie mit der Erstellung der hochzuladenden Bibliothek (wenn Sie die neueste Version aus dem Repository herunterladen können, können Sie diesen Schritt überspringen):

  1. Richten Sie Ihre Projektstruktur ein:

  • Erstellen Sie ein neues Verzeichnis für Ihre Bibliothek, z. B. hello_world_library.

  • Erstellen Sie innerhalb dieses Verzeichnisses ein weiteres Verzeichnis mit Ihrem Paketnamen, z. B. hello_world.

  • Erstellen Sie im Verzeichnis Ihres Pakets eine __init__.py-Datei. Diese Datei kann leer sein oder Initialisierungen für Ihr Paket enthalten.

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. Schreiben Sie Ihren Bibliothekscode:

  • Erstellen Sie im Verzeichnis hello_world eine neue Python-Datei für Ihr Modul, z. B. greet.py.

  • Schreiben Sie Ihre "Hallo Welt!"-Funktion:

# hello_world/greet.py
def say_hello():
return "Hallo Welt!"
  1. Erstellen Sie eine setup.py-Datei:

  • Im Stammverzeichnis Ihres hello_world_library-Verzeichnisses erstellen Sie eine setup.py-Datei.

  • Diese Datei enthält Metadaten zu Ihrer Bibliothek und gibt Python an, wie sie installiert werden soll.

# setup.py
from setuptools import setup, find_packages

setup(
name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
# Alle Abhängigkeiten, die Ihre Bibliothek benötigt
],
)

Jetzt laden wir die Bibliothek hoch:

  1. Erstellen Sie Ihr Paket:

  • Führen Sie vom Stammverzeichnis Ihres hello_world_library-Verzeichnisses aus aus:

python3 setup.py sdist bdist_wheel
  1. Konfigurieren Sie die Authentifizierung für Twine (verwendet zum Hochladen Ihres Pakets):

  • Stellen Sie sicher, dass twine installiert ist (pip install twine).

  • Verwenden Sie gcloud, um Anmeldeinformationen zu konfigurieren:

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

rm -rf dist build hello_world.egg-info

Es ist nicht möglich, eine Python-Bibliothek mit derselben Version wie der bereits vorhandenen hochzuladen, aber es ist möglich, höhere Versionen hochzuladen (oder eine zusätzliche .0 am Ende der Version hinzuzufügen, wenn das funktioniert -nicht in Python jedoch-), oder die letzte Version zu löschen und eine neue hochzuladen mit (erforderlich artifactregistry.versions.delete):

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

artifactregistry.repositories.downloadArtifacts

Mit dieser Berechtigung können Sie Artefakte herunterladen und nach sensiblen Informationen und Schwachstellen suchen.

Laden Sie ein Docker-Image herunter:

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

Laden Sie eine Python-Bibliothek herunter:

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
  • Was passiert, wenn ein Remote- und ein Standard-Repository in einem virtuellen Repository gemischt werden und ein Paket in beiden existiert? Überprüfen Sie diese Seite:

pageGCP - Artifact Registry Persistence

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

Löschen Sie Artefakte aus dem Repository, wie z.B. Docker-Images:

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

artifactregistry.repositories.delete

Löschen Sie ein vollständiges Repository (auch wenn es Inhalt hat):

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

Ein Angreifer mit dieser Berechtigung könnte sich Berechtigungen geben, um einige der zuvor genannten Repository-Angriffe durchzuführen.

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated