GCP - Artifact Registry Privesc

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Artifact Registry

Artifact Registry hakkında daha fazla bilgi için şuna bakın:

pageGCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Bu izinle bir saldırgan, Docker görüntüleri gibi zararlı kod içeren yeni sürümleri yükleyebilir:

# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev

# tag the image to upload it
docker tag <local-img-name>:<local-tag> <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

# Upload it
docker push <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

Aynı isim ve etikete sahip olan mevcut bir docker görüntüsüyle aynı isim ve etikete sahip zararlı bir docker görüntüsü yüklemenin mümkün olduğu kontrol edildi, bu yüzden eski görüntü etiketini kaybedecek ve bu etikete sahip görüntü bir sonraki indirildiğinde zararlı olan indirilecek.

Bir Python kütüphanesi yükleyin

Yüklemek için öncelikle yükleyeceğiniz kütüphaneyi oluşturun (eğer en son sürümü kaynaktan indirebilirseniz, bu adımı atlayabilirsiniz):

  1. Proje yapınızı ayarlayın:

  • Kütüphaneniz için yeni bir dizin oluşturun, örneğin hello_world_library.

  • Bu dizinin içinde, paket adınızla başka bir dizin oluşturun, örneğin hello_world.

  • Paket dizininin içinde, __init__.py adında bir dosya oluşturun. Bu dosya boş olabilir veya paketiniz için başlatmalar içerebilir.

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. Kütüphane kodunuzu yazın:

  • hello_world dizininin içinde, modülünüz için yeni bir Python dosyası oluşturun, örneğin greet.py.

  • "Merhaba Dünya!" işlevinizi yazın:

# hello_world/greet.py
def say_hello():
    return "Merhaba Dünya!"
  1. setup.py dosyası oluşturun:

  • hello_world_library dizininin kökünde, setup.py adında bir dosya oluşturun.

  • Bu dosya, kütüphanenizle ilgili meta verileri içerir ve Python'a nasıl kurulacağını söyler.

# setup.py
from setuptools import setup, find_packages

setup(
    name='hello_world',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        # Kütüphanenizin ihtiyaç duyduğu herhangi bir bağımlılık
    ],
)

Şimdi, kütüphaneyi yükleyelim:

  1. Paketinizi oluşturun:

  • hello_world_library dizininin kökünden aşağıdaki komutu çalıştırın:

python3 setup.py sdist bdist_wheel
  1. Paketinizi yüklemek için twine için kimlik doğrulamasını yapılandırın (paketinizi yüklemek için kullanılır):

  • twine'ın yüklü olduğundan emin olun (pip install twine).

  • Kimlik bilgilerini yapılandırmak için gcloud'u kullanın:

twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://<location>-python.pkg.dev/<project-id>/<repo-name>/ dist/*
  1. Oluşturulan paketi temizleyin

rm -rf dist build hello_world.egg-info

Aynı sürümde olan bir python kütüphanesini yüklemek mümkün değildir, ancak daha büyük sürümlerini yüklemek (veya sürümün sonuna .0 eklemek -python dışında işe yaramaz-), veya son sürümü silip yeni bir sürüm yüklemek mümkündür (artifactregistry.versions.delete gereklidir):

gcloud artifacts versions delete <version> --repository=<repo-name> --location=<location> --package=<lib-name>

artifactregistry.repositories.downloadArtifacts

Bu izinle artifaktları indirebilir, duyarlı bilgileri ve zafiyetleri arayabilirsiniz.

Bir Docker imajını indirin:

# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev

# Dowload image
docker pull <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

Bir python kütüphanesi indirin:

pip install <lib-name> --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@<location>-python.pkg.dev/<project-id>/<repo-name>/simple/" --trusted-host <location>-python.pkg.dev --no-cache-dir
  • Uzak ve standart kaynaklar bir sanal kaynakta karıştırılırsa ve bir paket her ikisinde de mevcutsa ne olur? Bu sayfayı kontrol edin:

pageGCP - Artifact Registry Persistence

artifactregistry.tags.delete, artifactregistry.versions.delete, artifactregistry.packages.delete, (artifactregistry.repositories.get, artifactregistry.tags.get, artifactregistry.tags.list)

Docker görüntüleri gibi kaynaklardan sanal kaynaktan silin:

# Delete a docker image
gcloud artifacts docker images delete <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

artifactregistry.repositories.delete

Bir depoyu tamamen silin (içeriği olsa bile):

``` gcloud artifacts repositories delete --location= ``` ### `artifactregistry.repositories.setIamPolicy`

Bu izne sahip bir saldırgan, kendisine önceden bahsedilen depo saldırılarını gerçekleştirmek için izin verebilir.

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları:

Last updated