GCP - Artifact Registry Privesc

Reading time: 7 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Artifact Registry

Artifact Registry के बारे में अधिक जानकारी के लिए देखें:

GCP - Artifact Registry Enum

artifactregistry.repositories.uploadArtifacts

इस अनुमति के साथ एक हमलावर नए संस्करणों को अपलोड कर सकता है जिनमें दुर्भावनापूर्ण कोड जैसे Docker छवियाँ शामिल हैं:

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

caution

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

Python लाइब्रेरी अपलोड करें

अपलोड करने के लिए लाइब्रेरी बनाने से शुरू करें (यदि आप रजिस्ट्री से नवीनतम संस्करण डाउनलोड कर सकते हैं तो आप इस चरण को छोड़ सकते हैं):

  1. अपने प्रोजेक्ट संरचना को सेट करें:
  • अपनी लाइब्रेरी के लिए एक नया निर्देशिका बनाएं, जैसे, hello_world_library
  • इस निर्देशिका के अंदर, अपने पैकेज नाम के साथ एक और निर्देशिका बनाएं, जैसे, hello_world
  • अपने पैकेज निर्देशिका के अंदर, एक __init__.py फ़ाइल बनाएं। यह फ़ाइल खाली हो सकती है या आपके पैकेज के लिए प्रारंभिककरण कर सकती है।
bash
mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. अपनी लाइब्रेरी कोड लिखें:
  • hello_world निर्देशिका के अंदर, अपने मॉड्यूल के लिए एक नया Python फ़ाइल बनाएं, जैसे, greet.py
  • अपनी "Hello, World!" फ़ंक्शन लिखें:
python
# hello_world/greet.py
def say_hello():
return "Hello, World!"
  1. एक setup.py फ़ाइल बनाएं:
  • अपनी hello_world_library निर्देशिका की जड़ में, एक setup.py फ़ाइल बनाएं।
  • यह फ़ाइल आपकी लाइब्रेरी के बारे में मेटाडेटा रखती है और Python को बताती है कि इसे कैसे स्थापित किया जाए।
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 निर्देशिका की जड़ से, चलाएं:
sh
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/*
```
```
3. **बिल्ड को साफ करें**
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">bash</span></div>

```bash
rm -rf dist build hello_world.egg-info
```
</details>

<div class="mdbook-alerts mdbook-alerts-caution">
<p class="mdbook-alerts-title">
  <span class="mdbook-alerts-icon"></span>
  caution
</p>


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

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

</div>


### `artifactregistry.repositories.downloadArtifacts`

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

एक **Docker** इमेज डाउनलोड करें:
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">sh</span></div>

```sh
# 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** पुस्तकालय डाउनलोड करें:
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">bash</span></div>

```bash
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
```
- यदि एक दूरस्थ और एक मानक रजिस्ट्री को एक आभासी में मिलाया जाता है और एक पैकेज दोनों में मौजूद है, तो क्या होता है? इस पृष्ठ को देखें:

<a class="content_ref" href="../gcp-persistence/gcp-artifact-registry-persistence.md"><span class="content_ref_label">GCP - Artifact Registry Persistence</span></a>

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

रजिस्ट्री से कलाकृतियों को हटाएं, जैसे कि डॉकर छवियाँ:
<div class="codeblock_filename_container"><span class="codeblock_filename_inner hljs">bash</span></div>

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

इस अनुमति के साथ एक हमलावर खुद को कुछ पहले उल्लेखित रिपॉजिटरी हमलों को करने की अनुमति दे सकता है।

### Artifact Registry पढ़ने और लिखने के माध्यम से अन्य सेवाओं में पिवटिंग

- **Cloud Functions**

जब एक Cloud Function बनाई जाती है, तो प्रोजेक्ट के Artifact Registry में एक नया डॉकर इमेज पुश किया जाता है। मैंने इमेज को एक नए के साथ संशोधित करने की कोशिश की, और यहां तक कि वर्तमान इमेज (और `cache` इमेज) को हटाने की कोशिश की, लेकिन कुछ भी नहीं बदला, क्लाउड फ़ंक्शन काम करता रहा। इसलिए, शायद **Race Condition हमले का दुरुपयोग करना संभव हो सकता है** जैसे कि बकेट के साथ डॉकर कंटेनर को बदलने के लिए, लेकिन **संग्रहीत इमेज को संशोधित करके क्लाउड फ़ंक्शन को समझौता करना संभव नहीं है**।

- **App Engine**

हालांकि App Engine Artifact Registry के अंदर डॉकर इमेज बनाता है। यह परीक्षण किया गया कि **यहां तक कि यदि आप इस सेवा के अंदर इमेज को संशोधित करते हैं** और App Engine इंस्टेंस को हटाते हैं (ताकि एक नया तैनात किया जा सके) तो **कार्यक्रमित कोड नहीं बदलता**।\
यह संभव हो सकता है कि **बकेट के साथ Race Condition हमले को करते हुए कार्यान्वित कोड को ओवरराइट करना संभव हो सकता है**, लेकिन इसका परीक्षण नहीं किया गया।

<div class="mdbook-alerts mdbook-alerts-tip">
<p class="mdbook-alerts-title">
  <span class="mdbook-alerts-icon"></span>
  tip
</p>


AWS हैकिंग सीखें और अभ्यास करें:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
GCP हैकिंग सीखें और अभ्यास करें: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
Azure हैकिंग सीखें और अभ्यास करें: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">

<details>

<summary>HackTricks का समर्थन करें</summary>

- [**सदस्यता योजनाओं**](https://github.com/sponsors/carlospolop) की जांच करें!
- **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमें** **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** पर फॉलो करें।**
- **हैकिंग ट्रिक्स साझा करें, PRs को** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में सबमिट करके।

</details>

</div>