Impeça XXE Ataque com JAXB

Recentemente, tivemos uma auditoria de segurança em nosso código, e um dos problemas é que nosso aplicativo está sujeito àEntidade Xml eXternal (XXE) ataque.

Basicamente, o aplicativo é uma calculadora que recebe entradas como XML, através de um Web-Service.

Aqui está um exemplo de tal ataque XXE em nosso aplicativo:

<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 você pode ver, podemos nos referir a uma entidade que aponta para um arquivo externo ("file:///d:/").

Em relação à entrada XML em si (o<calcinput>...</calcinput> parte) é unmarhalled com JAXB (v2.1). A parte do web-service é baseada no jaxws-rt (2.1).

O que preciso fazer para proteger meu serviço da web?

questionAnswers(1)

yourAnswerToTheQuestion