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?