Evadir las Malas Configuraciones
Las malas configuraciones en el parser de XML son una causa común de vulnerabilidades relacionadas con la XXE. Ajustar estas configuraciones puede reducir significativamente el riesgo de ataques XXE. Debajo se detallan algunas guías y buenas prácticas.
Buenas Prácticas en General
- Deshabilitar Entidades Externas y DTDs: Como la mejor práctica, deshabilitar el procesado de entidades eternas y DTDs en tu parser XML.
- Usar Formatos de Datos menos Complejos: Donde sea posible considera usar formatos de datos más simples como JSON.
- Validar el Input: Valida y sanitiza absolutamente todo el input proveniente del usuario.
Técnicas de Mitigación en Lenguajes Populares
Java
Usa DocumentBuilderFactory y deshabilita los DTDs:
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); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); dbf.setXIncludeAware(false); dbf.setExpandEntityReferences(false); DocumentBuilder db = dbf.newDocumentBuilder();
.NET
Configura los lectores XML para que ignoren los DTDs y las entidades externas:
csharp
XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Prohibit; settings.XmlResolver = null; XmlReader reader = XmlReader.Create(stream, settings);
PHP
Deshabilita las entidades externas que cargan por libxml:
php
libxml_disable_entity_loader(true);
Python
Usa la librería defusedxml la cual está diseñada para mitigar las vulnerabilidades XML:
python
from defusedxml.ElementTree import parse et = parse(xml_input)
Actualización y Parcheo Regular
- Actualización de Software: Mantén todos los procesadores y librerías XML actualizados.
- Parches de Seguridad: Aplica parches de seguridad de forma regular a las aplicaciones y sus entornos.
Conciencia de Seguridad y Revisión de Código
- Realiza Revisiones de código: Revisa el código regularmente en busca de vulnerabilidades, especialmente código que maneja XML.
- Promueve el Entrenamiento de Seguridad: Asegúrate de que los desarrolladores están concienciados de las prácticas de programación segura, incluyendo los riesgos asociados al parseo de XML.
