# GCP - Persistence dans l'Artifact Registry

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

## Artifact Registry

Pour plus d'informations sur l'Artifact Registry, consultez :

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

### Confusion de dépendance

- Que se passe-t-il si des **dépôts distants et standards** **sont mélangés dans un virtuel** et qu'un package existe dans les deux ?
- Celui avec la **priorité la plus élevée définie dans le dépôt virtuel** est utilisé
- Si la **priorité est la même** :
- Si la **version** est la **même**, le **nom de la politique par ordre alphabétique** dans le dépôt virtuel est utilisé
- Sinon, la **version la plus élevée** est utilisée

> [!CAUTION]
> Par conséquent, il est possible de **profiter d'une version la plus élevée (confusion de dépendance)** dans un registre de packages public si le dépôt distant a une priorité plus élevée ou égale

Cette technique peut être utile pour la **persistance** et l'**accès non authentifié**, car pour en abuser, il suffit de **connaître le nom d'une bibliothèque** stockée dans l'Artifact Registry et de **créer cette même bibliothèque dans le dépôt public (PyPi pour Python par exemple)** avec une version plus élevée.

Pour la persistance, voici les étapes à suivre :

- **Exigences** : Un **dépôt virtuel** doit **exister** et être utilisé, un **package interne** avec un **nom** qui n'existe pas dans le **dépôt public** doit être utilisé.
- Créez un dépôt distant s'il n'existe pas
- Ajoutez le dépôt distant au dépôt virtuel
- Modifiez les politiques du registre virtuel pour donner une priorité plus élevée (ou égale) au dépôt distant.\
Exécutez quelque chose comme :
- [gcloud artifacts repositories update --upstream-policy-file ...](https://cloud.google.com/sdk/gcloud/reference/artifacts/repositories/update#--upstream-policy-file)
- Téléchargez le package légitime, ajoutez votre code malveillant et enregistrez-le dans le dépôt public avec la même version. Chaque fois qu'un développeur l'installe, il installera le vôtre !

Pour plus d'informations sur la confusion de dépendance, consultez :

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/dependency-confusion.html
{{#endref}}

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