GCP - Artifact Registry Privesc

हैकट्रिक्स का समर्थन करें

आर्टिफैक्ट रजिस्ट्री

आर्टिफैक्ट रजिस्ट्री के बारे में अधिक जानकारी के लिए देखें:

GCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

इस अनुमति के साथ एक हमलावर नए संस्करणों को आर्टिफैक्ट्स के साथ अपलोड कर सकता है जैसे कि डॉकर इमेज के साथ दुरुपयोगी कोड:

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

यह जांचा गया था कि एक नए दुष्ट डॉकर इमेज अपलोड करना संभव है जिसका नाम और टैग पहले से मौजूद है, इसलिए पुराना टैग खो जाएगा और अगली बार जब उस टैग के साथ वह इमेज डाउनलोड किया जाएगा तो दुष्ट इमेज डाउनलोड किया जाएगा।

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 निर्देशिका के अंदर, अपने मॉड्यूल के लिए एक नया पायथन फ़ाइल बनाएं, उदाहरण के लिए, greet.py

  • अपना "Hello, World!" फ़ंक्शन लिखें:

# hello_world/greet.py
def say_hello():
return "Hello, World!"
  1. एक setup.py फ़ाइल बनाएं:

  • अपने hello_world_library निर्देशिका की मूल में, एक setup.py फ़ाइल बनाएं।

  • यह फ़ाइल आपकी पुस्तकालय के बारे में मेटाडेटा शामिल करती है और पायथन को इसे कैसे स्थापित करना है बताती है।

# 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

एक पायथन लाइब्रेरी उपलब्ध संस्करण के साथ एक ही संस्करण अपलोड करना संभव नहीं है, लेकिन अधिक संस्करण अपलोड करना संभव है (या संस्करण के अंत में एक अतिरिक्त .0 जोड़ें अगर वह काम करता है -पायथन में नहीं-), या अंतिम संस्करण को हटाने और एक नया अपलोड करने के लिए (आवश्यक artifactregistry.versions.delete):

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

artifactregistry.repositories.downloadArtifacts

इस अनुमति के साथ आप आर्टिफैक्ट्स डाउनलोड कर सकते हैं और संवेदनशील जानकारी और कमजोरियों की खोज कर सकते हैं।

एक डॉकर इमेज डाउनलोड करें:

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

रजिस्ट्री से आर्टिफैक्ट्स को हटाएं, जैसे डॉकर इमेजेस:

# 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

इस अनुमति के साथ एक हमलावर खुद को अनुमतियाँ दे सकता है ताकि वह पहले उल्लिखित भंडार अटैक कर सके।

हैकट्रिक्स का समर्थन करें

Last updated