🐈‍⬛
H4CKdotCL
Laboratorio
  • 🪅Bienvenidos al Book
  • Certificaciones
    • ⏳Junior Penetration Tester - eJPTv2
    • 🥉Ethical Hacking Professional Certification - CEHPC
    • 🥉Cybersecurity Awareness Professional Certification - CAPC
  • Metodología y Fases de Hacking Ético
    • Metodologías
      • Metodología OWASP (Open Web Application Security Project)
      • Metodología PTES
      • Metodología ISSAF
      • Metodología OSSTMM
    • Recopilación Pasiva de Información
      • Sublist3r
      • Httpx
      • theHarvester
      • Google Dorks
      • Wafw00f
      • Shodan
      • Whatweb
    • Recopilación Activa de Información
      • enum4linux
      • Guía de uso para Gobuster
      • Nmap (Network Mapper)
      • Wfuzz
      • SecList
      • FFUF
      • SMBClient
      • CrackMapExec
      • SMBMap
      • WPScan
      • Steghide
      • subfinder
    • SQLMap
    • Hydra
  • Utilidades
    • Docker: Potenciando Laboratorios de Pentesting
    • 📖Ejemplos de informes de Hacking Ético y auditoría de seguridad
  • Vulnerabilidades Web
    • IDOR (Insecure Direct Object Reference)
    • SSRF (Server-Side Request Forgery)
    • CSRF (Cross-Site Request Forgery)
    • File Upload Vulnerabilities
    • LFI (Local File Inclusion)
    • RFI (Remote File Inclusion)
    • XSS (Cross-Site Scripting)
    • XXE (XML External Entity)
    • Template Injections
    • Clickjacking
    • Broken Access Control
    • SQL Injection (Inyección SQL)
    • NoSQL Injection (Inyección NoSQL)
    • LDAP Injection (Inyección LDAP)
    • Log Poisoning
    • Open Redirect Bypass
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. Vulnerabilidades Web

XXE (XML External Entity)

🌐 Vulnerabilidad: XML External Entity (XXE)


🕵️‍♂️ ¿Qué es XXE?

XML External Entity (XXE) es una vulnerabilidad que afecta aplicaciones que procesan datos XML. Ocurre cuando una aplicación permite incluir referencias a entidades externas dentro de un documento XML, lo que puede ser explotado por un atacante para:

  • Acceder a archivos locales del servidor.

  • Realizar ataques SSRF (Server-Side Request Forgery).

  • Filtrar información confidencial.

  • En casos extremos, ejecutar código remoto o causar una denegación de servicio (DoS).


⚙️ ¿Cómo se produce?

Cuando una aplicación no deshabilita las entidades externas al procesar XML, un atacante puede inyectar una referencia maliciosa en un documento XML enviado al servidor.


🛠️ Mecanismo de ataque

Ejemplo de archivo XML malicioso:

<?xml version="1.0"?>
<!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<credentials>
    <username>&xxe;</username>
    <password>password</password>
</credentials>
  1. Paso 1: El atacante envía este documento XML al servidor.

  2. Paso 2: Si el servidor no está configurado correctamente, resolverá la entidad &xxe; y devolverá el contenido del archivo /etc/passwd al atacante.

  3. Paso 3: El atacante obtiene acceso a datos sensibles.


🎯 Impacto

  • Exposición de archivos locales: Como contraseñas, claves privadas o configuraciones.

  • Ataques SSRF: Manipulación para que el servidor realice solicitudes a servicios internos o externos.

  • Denegación de servicio (DoS): Uso de entidades recursivas para consumir recursos del servidor.

  • Ejecución remota de código (RCE): En algunos casos, puede permitir la ejecución de comandos.


📉 Puntaje CVSS v3

  • Vector de ataque: Red (se explota remotamente)

  • Complejidad del ataque: Baja

  • Impacto en la confidencialidad: Alto

  • Impacto en la integridad: Medio

  • Impacto en la disponibilidad: Bajo a alto (dependiendo del ataque)

  • Puntaje CVSS v3: 7.5 - 9.0 (Crítico) 🔥


🧑‍💻 Ejemplo práctico

Código vulnerable en PHP (procesamiento XML):

<?php
    $xml = file_get_contents('php://input');
    $dom = new DOMDocument();
    $dom->loadXML($xml); // Procesa el XML sin restricciones
    $data = simplexml_import_dom($dom);
    echo $data->username;
?>

Solicitud de ataque:

<?xml version="1.0"?>
<!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<credentials>
    <username>&xxe;</username>
    <password>password</password>
</credentials>

📌 Si no se deshabilitan las entidades externas, el servidor devolverá el contenido del archivo /etc/passwd.


🛡️ ¿Cómo prevenir XXE?

1️⃣ Deshabilitar entidades externas

Configura las bibliotecas XML para deshabilitar la carga de entidades externas:

En PHP:

libxml_disable_entity_loader(true);

2️⃣ Validación del formato del XML

Valida el XML recibido para asegurarte de que no incluya referencias a entidades externas.

3️⃣ Usar bibliotecas seguras

Utiliza bibliotecas modernas que no permiten el procesamiento de entidades externas por defecto:

  • Python: Usa defusedxml en lugar de xml.etree.ElementTree.

  • Java: Configura DocumentBuilderFactory para deshabilitar DTD:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
    dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

4️⃣ Uso de herramientas de validación

Implementa WAF (Web Application Firewall) o herramientas de validación que bloqueen contenido XML malicioso.

5️⃣ Evitar procesamiento innecesario

Si no es necesario procesar entradas XML, evita habilitar funcionalidades relacionadas con XML.


💡 Dato extra: Aunque XXE está clasificado en el OWASP Top 10, la mayoría de las vulnerabilidades pueden prevenirse simplemente configurando adecuadamente las bibliotecas XML.

🚨 Nota importante: XXE no solo compromete la confidencialidad del servidor, sino que puede ser utilizado como un pivote para acceder a redes internas.

AnteriorXSS (Cross-Site Scripting)SiguienteTemplate Injections

Última actualización hace 6 meses

¿Te fue útil?