Prevenir el ataque XXE con JAXB
Recientemente, tuvimos una auditoría de seguridad en nuestro código, y uno de los problemas es que nuestra aplicación está sujeta a laXml eXternal Entity (XXE) ataque.
Básicamente, la aplicación es una calculadora que recibe entradas como XML, a través de un servicio web.
Aquí hay un ejemplo de un ataque XXE en nuestra aplicación:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<foo:calculateStuff>
<!--Optional:-->
<xmlInput><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE currency [
<!ENTITY include SYSTEM "file:///d:/" >]>
<calcinput>...</calcinput>
]]></xmlInput>
</foo:calculateStuff>
</soapenv:Body>
</soapenv:Envelope>
Como puede ver, podemos referirnos a una entidad que apunta a un archivo externo ("file:///d:/"
).
Respecto a la entrada XML propiamente dicha<calcinput>...</calcinput>
parte) no se ha destacado con JAXB (v2.1). La parte del servicio web se basa en jaxws-rt (2.1).
¿Qué debo hacer para asegurar mi servicio web?