Introducció a XXE

Les Entitats Externes XML (XXE) són una vulnerabilitat de seguretat que es produeix quan un processador XML interpreta incorrectament una entitat externa dins d'un document XML. Aquesta vulnerabilitat pot permetre a un atacant accedir a dades sensibles, executar codi remotament o realitzar atacs de denegació de servei (DoS).

Conceptes Clau

  • XML (Extensible Markup Language): Un llenguatge de marcatge utilitzat per emmagatzemar i transportar dades.
  • Entitat Externa: Una referència dins d'un document XML que apunta a una ubicació externa.
  • Processador XML: Un programari que interpreta i processa documents XML.

Funcionament de XXE

Quan un processador XML troba una entitat externa, intenta resoldre-la accedint a la ubicació especificada. Si el processador no està configurat correctament, pot permetre que un atacant especifiqui una entitat externa maliciosa que apunti a fitxers locals o recursos remots.

Exemple de Codi Vulnerable

<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<foo>&xxe;</foo>

En aquest exemple, el processador XML intentarà substituir &xxe; pel contingut del fitxer /etc/passwd, exposant així informació sensible.

Impacte de XXE

  • Accés a Fitxers Locals: Un atacant pot accedir a fitxers sensibles del sistema.
  • Execució de Codi Remot: En alguns casos, es pot executar codi remotament.
  • Denegació de Servei (DoS): L'atacant pot sobrecarregar el sistema amb peticions malicioses.

Prevenció de XXE

Deshabilitar Entitats Externes

La manera més efectiva de prevenir XXE és deshabilitar la resolució d'entitats externes en el processador XML.

Exemple en Java

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);

Validació i Sanitització

  • Validació: Assegurar-se que els documents XML compleixin amb un esquema segur.
  • Sanitització: Eliminar o neutralitzar entitats externes abans de processar el document.

Utilitzar Biblioteques Segures

Utilitzar biblioteques i marcs de treball que tinguin proteccions integrades contra XXE.

Exercici Pràctic

Exercici 1: Identificació de Vulnerabilitats XXE

Descripció

Analitza el següent codi i identifica si és vulnerable a XXE. Si és així, proposa una solució per mitigar la vulnerabilitat.

import xml.etree.ElementTree as ET

xml_data = """
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<foo>&xxe;</foo>
"""

tree = ET.ElementTree(ET.fromstring(xml_data))
root = tree.getroot()
print(root.text)

Solució

El codi és vulnerable a XXE. Per mitigar aquesta vulnerabilitat, es pot utilitzar una biblioteca que deshabiliti les entitats externes per defecte, com defusedxml.

import defusedxml.ElementTree as ET

xml_data = """
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<foo>&xxe;</foo>
"""

tree = ET.ElementTree(ET.fromstring(xml_data))
root = tree.getroot()
print(root.text)

Resum

Les Entitats Externes XML (XXE) són una vulnerabilitat crítica que pot tenir greus conseqüències per a la seguretat de les aplicacions web. És essencial deshabilitar les entitats externes en els processadors XML i utilitzar biblioteques segures per prevenir aquests atacs. La validació i sanitització dels documents XML també són mesures importants per protegir-se contra XXE.

Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web

Mòdul 1: Introducció a OWASP

Mòdul 2: Principals Projectes d'OWASP

Mòdul 3: OWASP Top Ten

Mòdul 4: OWASP ASVS (Application Security Verification Standard)

Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)

Mòdul 6: OWASP ZAP (Zed Attack Proxy)

Mòdul 7: Bones Pràctiques i Recomanacions

Mòdul 8: Exercicis Pràctics i Casos d'Estudi

Mòdul 9: Avaluació i Certificació

© Copyright 2024. Tots els drets reservats