Tabla de Contenidos

Seguridad en XML: Evitar Ataques XXE

JUAN MIGUEL BERNAL GONZALEZ 2014/10/16 09:15

El procesamiento de documentos XML, no esta exento de problemas de seguridad en aplicaciones web, sea cual sea, el lenguaje de programación en el que se utilicen. Para evitar estos ataques en JAVA, tenemos que modificar la configuración de las APIs de manipulación de XML.

En FundeWeb (tanto para la versión 1.x como para la versión 2.x), esta disponible una librería llamada fundeweb-xml que contiene la clase XmlSafeFactory que permite obtener parseadores, lectores o manipuladores de documentos XML seguros, que evitan los ataques XXE.

API JAXP SAX

Para la API SAX contenida en JAXP, tenemos disponibles los siguientes métodos:

API JAXP DOM

Para la API DOM contenida en JAXP, tenemos disponibles los siguientes métodos:

API StAX

Para la API StAX, tenemos disponibles los siguientes métodos:

API XPath

Para la API XPath, tenemos disponibles los siguientes métodos:

API XSLT

API JAXB

Para evitar ataques en la API JAXB, en el método unmarshal, obtenemos un XMLStreamReader seguro de la clase XmlSafeFactory. Ejemplo:

    JAXBContext jc = JAXBContext.newInstance(Customer.class);
 
    XMLStreamReader xsr = XmlSafeFactory.getSafeXMLStreamReader(new StreamSource("src/xxe/input.xml"));
 
    Unmarshaller unmarshaller = jc.createUnmarshaller();
 
    Customer customer = (Customer) unmarshaller.unmarshal(xsr);
 
    ....

Librerías y Configuración

La librería a utilizar y la configuración, depende de la versión de FundeWeb.

FundeWeb 2.x

Hay que modificar la versión del <parent> (con <artifactId> parent) en el POM principal del proyecto, estableciendo la versión 2.0.3.

Hay que modificar el POM del módulo WEB, añadiendo la dependencia de fundeweb-xml justo debajo de la dependencia fundeweb-tags. El código es:

		<dependency>
			<groupId>es.um.atica.fundeweb</groupId>
			<artifactId>fundeweb-xml</artifactId>
		</dependency>

FundeWeb 1.x Migradas a Weblogic 12

Hay que modificar la versión del <parent> (con <artifactId> seam-parent) en el POM principal del proyecto, estableciendo la versión 1.5.4.

Hay que modificar el POM del módulo EJB, añadiendo la dependencia de fundeweb-xml justo debajo de la dependencia fundeweb-seam-components. El código es:

		<dependency>
			<groupId>org.um.atica.fundeweb-legacy</groupId>
			<artifactId>fundeweb-xml</artifactId>
		</dependency>

FundeWeb 1.x - Con JBoss Seam en OAS-OC4J

Hay que modificar la versión del <parent> (con <artifactId> seam-parent) en el POM principal del proyecto, estableciendo la versión 1.2.8.

Hay que modificar el POM del módulo EJB, añadiendo la dependencia de fundeweb-xml justo debajo de la dependencia fundeweb-commons. El código es:

		<dependency>
			<groupId>org.um.atica.fundeweb-legacy</groupId>
			<artifactId>fundeweb-xml</artifactId>
			<classifier>jdk5</classifier>
		</dependency>

FundeWeb 1.x - Sin JBoss Seam en OAS-OC4J

Hay que modificar la versión del <parent> (con <artifactId> servicio-parent) en el POM principal del proyecto, estableciendo la versión 1.2.7.

Hay que modificar el POM del módulo EJB, añadiendo la dependencia de fundeweb-xml justo debajo de la dependencia fundeweb-commons-services. El código es:

		<dependency>
			<groupId>org.um.atica.fundeweb-legacy</groupId>
			<artifactId>fundeweb-xml</artifactId>
			<classifier>jdk5</classifier>
		</dependency>

Referencias y Bibliografia