GCP - Artifact Registry Enum

Suporte ao HackTricks

Informações Básicas

O Google Cloud Artifact Registry é um serviço totalmente gerenciado que permite gerenciar, armazenar e proteger seus artefatos de software. É essencialmente um repositório para armazenar dependências de build, como imagens Docker, pacotes Maven, npm e outros tipos de artefatos. É comumente usado em pipelines de CI/CD para armazenar e versionar os artefatos produzidos durante o processo de desenvolvimento de software.

As principais características do Artifact Registry incluem:

  1. Repositório Unificado: Suporta múltiplos tipos de artefatos, permitindo que você tenha um único repositório para imagens Docker, pacotes de linguagem (como Maven do Java, npm do Node.js) e outros tipos de artefatos, possibilitando controles de acesso consistentes e uma visão unificada de todos os seus artefatos.

  2. Totalmente Gerenciado: Como um serviço gerenciado, cuida da infraestrutura subjacente, escalabilidade e segurança, reduzindo a sobrecarga de manutenção para os usuários.

  3. Controle de Acesso Granular: Integra-se com o Gerenciamento de Identidade e Acesso (IAM) do Google Cloud, permitindo que você defina quem pode acessar, enviar ou baixar artefatos em seus repositórios.

  4. Geo-replicação: Suporta a replicação de artefatos em várias regiões, melhorando a velocidade de downloads e garantindo disponibilidade.

  5. Integração com Serviços do Google Cloud: Funciona perfeitamente com outros serviços do GCP, como Cloud Build, Kubernetes Engine e Compute Engine, tornando-se uma escolha conveniente para equipes que já trabalham dentro do ecossistema do Google Cloud.

  6. Segurança: Oferece recursos como análise de vulnerabilidades e análise de contêineres para ajudar a garantir que os artefatos armazenados sejam seguros e livres de problemas de segurança conhecidos.

Formatos e Modos

Ao criar um novo repositório, é possível selecionar o formato/tipo do repositório entre vários como Docker, Maven, npm, Python... e o modo que geralmente pode ser um destes três:

  • Repositório Padrão: Modo padrão para armazenar seus próprios artefatos (como imagens Docker, pacotes Maven) diretamente no GCP. É seguro, escalável e se integra bem dentro do ecossistema do Google Cloud.

  • Repositório Remoto (se disponível): Atua como um proxy para armazenar artefatos de repositórios externos, públicos. Ajuda a prevenir problemas de dependências que mudam a montante e reduz a latência ao armazenar em cache artefatos frequentemente acessados.

  • Repositório Virtual (se disponível): Fornece uma interface unificada para acessar múltiplos repositórios (padrão ou remoto) através de um único endpoint, simplificando a configuração do lado do cliente e o gerenciamento de acesso para artefatos espalhados por vários repositórios.

  • Para um repositório virtual, você precisará selecionar repositórios e dar a eles uma prioridade (o repositório com a maior prioridade será usado).

  • Você pode misturar repositórios remotos e padrão em um virtual, se a prioridade do remoto for maior que a padrão, pacotes do remoto (como PyPi, por exemplo) serão usados. Isso pode levar a uma Confusão de Dependência.

Observe que na versão Remota do Docker é possível fornecer um nome de usuário e token para acessar o Docker Hub. O token é então armazenado no Secret Manager.

Criptografia

Como esperado, por padrão, uma chave gerenciada pelo Google é usada, mas uma chave gerenciada pelo cliente pode ser indicada (CMEK).

Políticas de Limpeza

  • Excluir artefatos: Os artefatos serão excluídos de acordo com a política de limpeza.

  • Execução de teste: (Padrão) Os artefatos não serão excluídos. As políticas de limpeza serão avaliadas e eventos de teste de exclusão enviados para o Cloud Audit Logging.

Análise de Vulnerabilidades

É possível habilitar o scanner de vulnerabilidades que verificará vulnerabilidades dentro das imagens de contêiner.

Enumeração

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

Escalação de Privilégios

GCP - Artifact Registry Privesc

Acesso Não Autenticado

GCP - Artifact Registry Unauthenticated Enum

Pós-Exploração

GCP - Artifact Registry Post Exploitation

Persistência

GCP - Artifact Registry Persistence
Support HackTricks

Last updated