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 Registrygcloudauthconfigure-docker<location>-docker.pkg.dev# tag the image to upload itdockertag<local-img-name>:<local-tag><location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag># Upload itdockerpush<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) :
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.
À 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.pyfrom setuptools import setup, find_packagessetup(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 :
Construisez votre package :
Depuis la racine de votre répertoire hello_world_library, exécutez :
python3setup.pysdistbdist_wheel
Configurez l'authentification pour twine (utilisé pour téléverser votre package) :
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):
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 Registrygcloudauthconfigure-docker<location>-docker.pkg.dev# Dowload imagedockerpull<location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>