Как настроить org.apache.cxf.jaxrs.provider.JAXBElementProvider для предотвращения атаки XXE - PullRequest
1 голос
/ 06 мая 2019

Я использую CXF (JAX RS) для служб отдыха и по умолчанию JAXBElementProvider для xml запроса / ответа маршалинга / демаршалинга. Все работает нормально ... но теперь я хочу предотвратить XXE-атаки в XML-запросах, которые по умолчанию JAXBElementProvider не делает. Как настроить параметры предотвращения xxe в объявлении ниже?

<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">

<jaxrs:server id="myendpoint" address="/">
<jaxrs:providers>
<ref bean="jaxbProvider"/>
<ref bean="jsonProvider"/>
</jaxrs:providers>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
</jaxrs:extensionMappings>
</jaxrs:server>

1 Ответ

1 голос
/ 22 мая 2019

Согласно CXF Security Advisory CVE-2010-2076 , атаки XXE должны быть смягчены в конфигурации по умолчанию CXF. Предполагается, что вы используете последнюю (или довольно свежую) версию CXF, и вы не установили системное свойство org.apache.cxf.stax.allowInsecureParser, как указано в разделе Безопасность XML CXF doc . Библиотека синтаксического анализатора Woodstox должна находиться на вашем пути к классам, чтобы CXF выбрал ее по умолчанию как XMLInputFactory.

Вы также можете использовать пользовательский XMLInputFactory в соответствии с вашими потребностями (например, отключить другие функции синтаксического анализа для обеспечения безопасности), как указано в разделе 4.2 рекомендаций по безопасности, но в большинстве случаев это не требуется. Например,

<jaxrs:server id="myendpoint" address="/">    
  <jaxrs:properties>            
    <entry key="javax.xml.stream.XMLInputFactory">                
      <bean class="your.own.ParserFactory" factory-method="createFactory"/>   
    </entry>        
  </jaxrs:properties>    
</jaxrs:server>

Затем, в своем собственном your.own.ParserFactory#createFactory(), начните с:

XMLInputFactory factory = XMLInputFactory.newInstance();

и установите необходимые свойства на заводе, среди поддерживаемых Woodstox XMLInputFactory .

...