GCP - Artifact Registry Privesc

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Αποθετήριο Τεχνολογικού Τεκμηρίου

Για περισσότερες πληροφορίες σχετικά με το Αποθετήριο Τεχνολογικού Τεκμηρίου, ελέγξτε:

GCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

Με αυτήν την άδεια, ένας επιτιθέμενος μπορεί να ανεβάσει νέες εκδόσεις των τεκμηρίων με κακόβουλο κώδικα όπως εικόνες Docker:

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

Ελέγχθηκε ότι είναι δυνατόν να ανεβάσετε ένα νέο κακόβουλο docker image με το ίδιο όνομα και ετικέτα με αυτό που ήδη υπάρχει, έτσι το παλιό θα χάσει την ετικέτα και την επόμενη φορά που θα γίνει λήψη της εικόνας με αυτήν την ετικέτα θα γίνει λήψη της κακόβουλης.

Ανεβάστε μια βιβλιοθήκη Python

Ξεκινήστε δημιουργώντας τη βιβλιοθήκη που θέλετε να ανεβάσετε (αν μπορείτε να κατεβάσετε την τελευταία έκδοση από το αποθετήριο, μπορείτε να αποφύγετε αυτό το βήμα):

  1. Δημιουργήστε τη δομή του έργου σας:

  • Δημιουργήστε ένα νέο φάκελο για τη βιβλιοθήκη σας, π.χ. hello_world_library.

  • Μέσα σε αυτόν τον φάκελο, δημιουργήστε έναν άλλο φάκελο με το όνομα του πακέτου σας, π.χ. hello_world.

  • Μέσα στον φάκελο του πακέτου σας, δημιουργήστε ένα αρχείο __init__.py. Αυτό το αρχείο μπορεί να είναι κενό ή μπορεί να περιέχει αρχικοποιήσεις για το πακέτο σας.

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. Γράψτε τον κώδικα της βιβλιοθήκης σας:

  • Μέσα στον φάκελο hello_world, δημιουργήστε ένα νέο αρχείο Python για την ενότητά σας, π.χ. greet.py.

  • Γράψτε τη συνάρτηση "Hello, World!":

# hello_world/greet.py
def say_hello():
    return "Hello, World!"
  1. Δημιουργήστε ένα αρχείο setup.py:

  • Στη ρίζα του φακέλου hello_world_library, δημιουργήστε ένα αρχείο setup.py.

  • Αυτό το αρχείο περιέχει μεταδεδομένα για τη βιβλιοθήκη σας και λέει στο Python πώς να την εγκαταστήσει.

# setup.py
from setuptools import setup, find_packages

setup(
    name='hello_world',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        # Οποιεσδήποτε εξαρτήσεις χρειάζεται η βιβλιοθήκη σας
    ],
)

Τώρα, ας ανεβάσουμε τη βιβλιοθήκη:

  1. Κατασκευάστε το πακέτο σας:

  • Από τη ρίζα του φακέλου hello_world_library, εκτελέστε:

python3 setup.py sdist bdist_wheel
  1. Διαμορφώστε την πιστοποίηση για το twine (χρησιμοποιείται για τη μεταφόρτωση του πακέτου σας):

  • Βεβαιωθείτε ότι έχετε εγκατεστημένο το twine (pip install twine).

  • Χρησιμοποιήστε το gcloud για να διαμορφώσετε τα διαπιστευτήριά σας:

twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://<location>-python.pkg.dev/<project-id>/<repo-name>/ dist/*
  1. Καθαρίστε τη δημιουργία

rm -rf dist build hello_world.egg-info

Δεν είναι δυνατόν να ανεβάσετε μια βιβλιοθήκη Python με την ίδια έκδοση με αυτή που ήδη υπάρχει, αλλά είναι δυνατόν να ανεβάσετε μεγαλύτερες εκδόσεις (ή να προσθέσετε ένα επιπλέον .0 στο τέλος της έκδοσης αν αυτό λειτουργεί - όχι στην Python όμως -), ή να διαγράψετε την τελευταία έκδοση και να ανεβάσετε μια νέα (χρειάζεται artifactregistry.versions.delete):

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

artifactregistry.repositories.downloadArtifacts

Με αυτήν την άδεια μπορείτε να κατεβάσετε τα artifacts και να αναζητήσετε ευαίσθητες πληροφορίες και ευπάθειες.

Κατεβάστε ένα Docker image:

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

Κατεβάστε μια βιβλιοθήκη python:

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
  • Τι συμβαίνει αν ένα απομακρυσμένο και ένα τυπικό αποθετήριο αναμειγνύονται σε ένα εικονικό και υπάρχει ένα πακέτο και στα δύο; Ελέγξτε αυτήν τη σελίδα:

GCP - Artifact Registry Persistence

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

Διαγράψτε τα αντικείμενα από το αποθετήριο, όπως εικόνες docker:

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

artifactregistry.repositories.delete

Διαγράψτε ένα πλήρες αποθετήριο (ακόμα και αν έχει περιεχόμενο):

gcloud artifacts repositories delete <repo-name> --location=<location>

artifactregistry.repositories.setIamPolicy

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να δώσει στον εαυτό του δικαιώματα για να εκτελέσει μερικές από τις προηγούμενες επιθέσεις στο αποθετήριο.

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated