XXE
La inyecciĂłn de Entidades Externas XML (XXE), es un tipo de ataque contra una aplicaciĂłn que analiza la entrada de XML.
Este ataque ocurre cuando la entrada de un XML no confiable que contiene una referencia a una entidad externa, es procesada por un analizador XML configurado de manera insegura.
La siguiente guĂa proporciona informaciĂłn concisa para prevenir esta vulnerabilidad.
Riesgo del ataque
Robo de ficheros del servidor.
DivulgaciĂłn de datos confidenciales.
DenegaciĂłn de servicio (DoS).
FalsificaciĂłn de solicitudes del lado del servidor (SSRF).
Escaneo de puertos desde la perspectiva de la máquina en la que se encuentra el analizador.
Â
CĂłdigo vulnerable 1:
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false);
// This may not be strictly required as DTDs shouldn't be allowed at all, per previous line.
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", true);
reader.setFeature("http://xml.org/sax/features/external-general-entities", true);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", true); |
SoluciĂłn:
Se debe implementar una validación que impida introducir más parámetros de los necesarios, asà como caracteres innecesarios.
En este caso se debe implementar con Sentencias Preparadas.
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
// This may not be strictly required as DTDs shouldn't be allowed at all, per previous line.
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); |
Referencias:
Para obtener más información sobre XXE, visite XML External Entity (XXE):
https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html