# GCP - Enumerazione dell'Artifact Registry

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

## Informazioni di Base

Google Cloud Artifact Registry è un servizio completamente gestito che consente di **gestire, archiviare e proteggere i propri artefatti software**. È essenzialmente un repository per **archiviare le dipendenze di build**, come **immagini Docker**, pacchetti **Maven**, npm e altri tipi di artefatti. È **comunemente utilizzato nei pipeline CI/CD** per archiviare e versionare gli artefatti prodotti durante il processo di sviluppo software.

Le caratteristiche principali dell'Artifact Registry includono:

1. **Repository Unificato**: Supporta **più tipi di artefatti**, consentendo di avere un unico repository per immagini Docker, pacchetti di linguaggi (come Maven di Java, npm di Node.js) e altri tipi di artefatti, abilitando controlli di accesso coerenti e una vista unificata su tutti i propri artefatti.
2. **Completamente Gestito**: Essendo un servizio gestito, si occupa dell'infrastruttura sottostante, della scalabilità e della sicurezza, riducendo il carico di manutenzione per gli utenti.
3. **Controllo degli Accessi Flessibile**: Si integra con l'Identity and Access Management (IAM) di Google Cloud, consentendo di definire chi può accedere, caricare o scaricare artefatti nei propri repository.
4. **Geo-replica**: Supporta la replica di artefatti in più regioni, migliorando la velocità dei download e garantendo disponibilità.
5. **Integrazione con i Servizi di Google Cloud**: Funziona senza problemi con **altri servizi GCP come Cloud Build, Kubernetes Engine e Compute Engine**, rendendolo una scelta conveniente per i team già attivi nell'ecosistema di Google Cloud.
6. **Sicurezza**: Offre funzionalità come **scansione delle vulnerabilità e analisi dei container** per aiutare a garantire che gli artefatti archiviati siano sicuri e privi di problemi di sicurezza noti.

### Formati e Modalità

Quando si crea un nuovo repository è possibile **selezionare il formato/tipo** del repository tra diversi come Docker, Maven, npm, Python... e la modalità che di solito può essere una di queste tre:

- **Repository Standard**: Modalità predefinita per **archiviare i propri artefatti** (come immagini Docker, pacchetti Maven) direttamente in GCP. È sicuro, scalabile e si integra bene nell'ecosistema di Google Cloud.
- **Repository Remoto** (se disponibile): Funziona come un proxy per **caching di artefatti da repository esterni**, pubblici. Aiuta a prevenire problemi derivanti da dipendenze che cambiano a monte e riduce la latenza memorizzando nella cache artefatti frequentemente accessibili.
- **Repository Virtuale** (se disponibile): Fornisce un **interfaccia unificata per accedere a più repository (standard o remoto)** attraverso un unico endpoint, semplificando la configurazione lato client e la gestione degli accessi per artefatti distribuiti su vari repository.
- Per un repository virtuale sarà necessario **selezionare i repository e assegnare loro una priorità** (il repository con la priorità più alta sarà utilizzato).
- È possibile **mescolare repository remoti e standard** in uno **virtuale**, se la **priorità** del **remoto** è **maggiore** rispetto allo standard, **i pacchetti dal remoto (ad esempio PyPi) saranno utilizzati**. Questo potrebbe portare a una **Confusione delle Dipendenze.**

Nota che nella **versione Remota di Docker** è possibile fornire un nome utente e un token per accedere a Docker Hub. Il **token viene quindi memorizzato nel Secret Manager**.

### Crittografia

Come previsto, per impostazione predefinita viene utilizzata una chiave gestita da Google, ma può essere indicata una chiave gestita dal cliente (CMEK).

### Politiche di Pulizia

- **Elimina artefatti:** Gli artefatti saranno **eliminati secondo i criteri della politica di pulizia**.
- **Esecuzione di prova:** (Quella predefinita) Gli artefatti **non saranno eliminati**. Le politiche di pulizia saranno valutate e gli eventi di eliminazione di prova inviati a Cloud Audit Logging.

### Scansione delle Vulnerabilità

È possibile abilitare lo **scanner di vulnerabilità** che controllerà le vulnerabilità all'interno delle **immagini dei container**.

### Enumerazione
```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>
```
### Escalation dei privilegi

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

### Accesso non autenticato

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

### Persistenza

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

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