— 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.
Para la API SAX contenida en JAXP, tenemos disponibles los siguientes métodos:
Para la API DOM contenida en JAXP, tenemos disponibles los siguientes métodos:
Para la API StAX, tenemos disponibles los siguientes métodos:
Para la API XPath, tenemos disponibles los siguientes métodos:
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); ....
La librería a utilizar y la configuración, depende de la versión de FundeWeb.
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>
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>
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>
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>