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
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
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
Mòdul 3: OWASP Top Ten
- A1: Injecció
- A2: Pèrdua d'Autenticació
- A3: Exposició de Dades Sensibles
- A4: Entitats Externes XML (XXE)
- A5: Control d'Accés Trencat
- A6: Configuració Incorrecta de Seguretat
- A7: Cross-Site Scripting (XSS)
- A8: Deserialització Insegura
- A9: Ús de Components amb Vulnerabilitats Conegudes
- A10: Registre i Monitoratge Insuficients
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)
- Introducció a ZAP
- Instal·lació i Configuració
- Escaneig de Vulnerabilitats
- Automatització de Proves de Seguretat
Mòdul 7: Bones Pràctiques i Recomanacions
- Cicle de Vida de Desenvolupament Segur (SDLC)
- Integració de Seguretat en DevOps
- Capacitació i Sensibilització en Seguretat
- Eines i Recursos Addicionals
Mòdul 8: Exercicis Pràctics i Casos d'Estudi
- Exercici 1: Identificació de Vulnerabilitats
- Exercici 2: Implementació de Controls de Seguretat
- Cas d'Estudi 1: Anàlisi d'un Incident de Seguretat
- Cas d'Estudi 2: Millora de la Seguretat en una Aplicació Web