В последнее время у нас был аудит безопасности нашего кода, и одна из проблем заключается в том, что наше приложение подвержено атаке Xml Exterior Entity (XXE).
В принципе, приложение представляет собой калькулятор, который получает входные данные в виде XML через веб-службу.
Вот пример такой атаки XXE для нашего приложения:
<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>
Как вы можете видеть, мы можем ссылаться на объект, который указывает на внешний файл ("file:///d:/"
).
Что касается самого входа XML (часть <calcinput>...</calcinput>
), он не привязан к JAXB (v2.1). Часть веб-сервиса основана на jaxws-rt (2.1).
Что мне нужно сделать для защиты моего веб-сервиса?
Спасибо.