GCP - Artifact Registry Privesc

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Registre d'artefacts

Pour plus d'informations sur le Registre d'artefacts, consultez :

pageGCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Avec cette autorisation, un attaquant pourrait télécharger de nouvelles versions des artefacts avec un code malveillant comme des images 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>

Il a été vérifié qu'il est possible de téléverser une nouvelle image Docker malveillante avec le même nom et la même étiquette que celle déjà présente, de sorte que l'ancienne perdra l'étiquette et la prochaine fois que cette image avec cette étiquette sera téléchargée, la malveillante sera téléchargée.

Téléverser une bibliothèque Python

Commencez par créer la bibliothèque à téléverser (si vous pouvez télécharger la dernière version depuis le registre, vous pouvez éviter cette étape) :

  1. Configurez la structure de votre projet :

  • Créez un nouveau répertoire pour votre bibliothèque, par exemple hello_world_library.

  • À l'intérieur de ce répertoire, créez un autre répertoire avec le nom de votre package, par exemple hello_world.

  • À l'intérieur de votre répertoire de package, créez un fichier __init__.py. Ce fichier peut être vide ou peut contenir des initialisations pour votre package.

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. Écrivez le code de votre bibliothèque :

  • À l'intérieur du répertoire hello_world, créez un nouveau fichier Python pour votre module, par exemple greet.py.

  • Écrivez votre fonction "Hello, World!" :

# hello_world/greet.py
def say_hello():
return "Hello, World!"
  1. Créez un fichier setup.py :

  • À la racine de votre répertoire hello_world_library, créez un fichier setup.py.

  • Ce fichier contient des métadonnées sur votre bibliothèque et indique à Python comment l'installer.

# setup.py
from setuptools import setup, find_packages

setup(
name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
# Toutes les dépendances nécessaires à votre bibliothèque
],
)

Maintenant, téléchargeons la bibliothèque :

  1. Construisez votre package :

  • Depuis la racine de votre répertoire hello_world_library, exécutez :

python3 setup.py sdist bdist_wheel
  1. Configurez l'authentification pour twine (utilisé pour téléverser votre package) :

  • Assurez-vous d'avoir twine installé (pip install twine).

  • Utilisez gcloud pour configurer les informations d'identification :

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

rm -rf dist build hello_world.egg-info

Il n'est pas possible de télécharger une bibliothèque python avec la même version que celle déjà présente, mais il est possible de télécharger des versions supérieures (ou d'ajouter un .0 supplémentaire à la fin de la version si cela fonctionne - pas en python cependant -), ou de supprimer la dernière version et de télécharger une nouvelle avec (nécessaire artifactregistry.versions.delete):

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

artifactregistry.repositories.downloadArtifacts

Avec cette autorisation, vous pouvez télécharger des artefacts et rechercher des informations sensibles et des vulnérabilités.

Téléchargez une image 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>

Téléchargez une bibliothèque 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
  • Que se passe-t-il si des registres distants et standard sont mélangés dans un virtuel et qu'un package existe dans les deux ? Consultez cette page :

pageGCP - Artifact Registry Persistence

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

Supprimez des artefacts du registre, comme des images Docker :

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

artifactregistry.repositories.delete

Supprime un dépôt complet (même s'il contient du contenu) :

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

artifactregistry.repositories.setIamPolicy

Un attaquant avec cette permission pourrait se donner des autorisations pour effectuer certaines des attaques de dépôt mentionnées précédemment.

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!

Autres façons de soutenir HackTricks:

Dernière mise à jour