# GCP - Enumération de l'Artifact Registry

{{#include ../../../banners/hacktricks-training.md}}

## Informations de base

Google Cloud Artifact Registry est un service entièrement géré qui vous permet de **gérer, stocker et sécuriser vos artefacts logiciels**. C'est essentiellement un dépôt pour **stocker des dépendances de construction**, telles que des **images Docker**, des packages **Maven**, des packages npm et d'autres types d'artefacts. Il est **couramment utilisé dans les pipelines CI/CD** pour stocker et versionner les artefacts produits lors du processus de développement logiciel.

Les principales caractéristiques de l'Artifact Registry incluent :

1. **Dépôt unifié** : Il prend en charge **plusieurs types d'artefacts**, vous permettant d'avoir un seul dépôt pour les images Docker, les packages de langage (comme Maven pour Java, npm pour Node.js) et d'autres types d'artefacts, permettant des contrôles d'accès cohérents et une vue unifiée de tous vos artefacts.
2. **Entièrement géré** : En tant que service géré, il s'occupe de l'infrastructure sous-jacente, de la mise à l'échelle et de la sécurité, réduisant ainsi la charge de maintenance pour les utilisateurs.
3. **Contrôle d'accès granulaire** : Il s'intègre à l'Identity and Access Management (IAM) de Google Cloud, vous permettant de définir qui peut accéder, télécharger ou télécharger des artefacts dans vos dépôts.
4. **Géo-réplication** : Il prend en charge la réplication des artefacts à travers plusieurs régions, améliorant la vitesse des téléchargements et garantissant la disponibilité.
5. **Intégration avec les services Google Cloud** : Il fonctionne de manière transparente avec **d'autres services GCP comme Cloud Build, Kubernetes Engine et Compute Engine**, ce qui en fait un choix pratique pour les équipes travaillant déjà au sein de l'écosystème Google Cloud.
6. **Sécurité** : Offre des fonctionnalités telles que **l'analyse des vulnérabilités et l'analyse des conteneurs** pour aider à garantir que les artefacts stockés sont sécurisés et exempts de problèmes de sécurité connus.

### Formats et modes

Lors de la création d'un nouveau dépôt, il est possible de **sélectionner le format/type** du dépôt parmi plusieurs comme Docker, Maven, npm, Python... et le mode qui peut généralement être l'un de ces trois :

- **Dépôt standard** : Mode par défaut pour **stocker vos propres artefacts** (comme les images Docker, les packages Maven) directement dans GCP. C'est sécurisé, évolutif et s'intègre bien dans l'écosystème Google Cloud.
- **Dépôt distant** (si disponible) : Agit comme un proxy pour **mettre en cache des artefacts provenant de dépôts externes**, publics. Il aide à prévenir les problèmes dus aux changements de dépendances en amont et réduit la latence en mettant en cache les artefacts fréquemment accédés.
- **Dépôt virtuel** (si disponible) : Fournit une **interface unifiée pour accéder à plusieurs dépôts (standards ou distants)** via un seul point de terminaison, simplifiant la configuration côté client et la gestion des accès pour les artefacts répartis sur divers dépôts.
- Pour un dépôt virtuel, vous devrez **sélectionner des dépôts et leur donner une priorité** (le dépôt avec la plus grande priorité sera utilisé).
- Vous pouvez **mélanger des dépôts distants et standards** dans un **dépôt virtuel**, si la **priorité** du **distant** est **plus grande** que celle du standard, **les packages du distant (par exemple PyPi) seront utilisés**. Cela pourrait entraîner une **confusion de dépendance**.

Notez que dans la **version distante de Docker**, il est possible de donner un nom d'utilisateur et un token pour accéder à Docker Hub. Le **token est ensuite stocké dans le Secret Manager**.

### Chiffrement

Comme prévu, par défaut, une clé gérée par Google est utilisée, mais une clé gérée par le client peut être indiquée (CMEK).

### Politiques de nettoyage

- **Supprimer les artefacts :** Les artefacts seront **supprimés selon les critères de la politique de nettoyage**.
- **Exécution à blanc :** (Par défaut) Les artefacts **ne seront pas supprimés**. Les politiques de nettoyage seront évaluées et des événements de suppression de test envoyés à Cloud Audit Logging.

### Analyse des vulnérabilités

Il est possible d'activer le **scanner de vulnérabilités** qui vérifiera les vulnérabilités à l'intérieur des **images de conteneurs**.

### Énumération
```bash
# Get repositories
gcloud artifacts repositories list
gcloud artifacts repositories describe --location <location> <repo-name>
gcloud artifacts versions list --repository=<repo-name> -location <location> --package <package-name>

# Get settings of a repository (example using python but could be other)
gcloud artifacts print-settings python --repository <repo-name> --location <location>

# Get docker images
gcloud artifacts docker images list us-central1-docker.pkg.dev/<proj-name>/<repo-name>

# Get packages (like python and others...)
gcloud artifacts packages list --repository <repo-name> --location <location>

# Get SBOMB artifacts
gcloud artifacts sbom list

# Get vulnerabilities (docker images)
gcloud artifacts vulnerabilities list us-east1-docker.pkg.dev/project123/repository123/someimage@sha256:49765698074d6d7baa82f
gcloud artifacts docker images list-vulnerabilities projects/<proj-name>/locations/<location>/scans/<scan-uuid>
```
### Escalade de privilèges

{{#ref}}
../gcp-privilege-escalation/gcp-artifact-registry-privesc.md
{{#endref}}

### Accès non authentifié

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-artifact-registry-unauthenticated-enum.md
{{#endref}}

### Post-exploitation

{{#ref}}
../gcp-post-exploitation/gcp-artifact-registry-post-exploitation.md
{{#endref}}

### Persistance

{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
