PenTest之后,安全团队在通过Web应用程序通过HTTPS请求提交Orbeon表单时发现XXE攻击的可能性。
他们能够拦截以下XML:
<!DOCTYPE event-request [<!ENTITY nbsp " ">]>
<xxf:event-request xmlns:xxf="http://orbeon.org/oxf/xml/xforms">
<xxf:uuid>8a89ecf50184eb16f5671301691e0d9457568667</xxf:uuid>
<xxf:sequence>16</xxf:sequence>
<xxf:action>
<xxf:event name="xxforms-blur" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control"/>
<xxf:event name="xforms-focus" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control"/>
<xxf:event name="xxforms-value" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control">Tester<</xxf:event>
<xxf:event name="xxforms-blur" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control"/>
</xxf:action>
</xxf:event-request>
并通过处理请求注入新的外部实体<!ENTITY test "My-OwnEntity">
。这是提交给服务器的XML:
<!DOCTYPE event-request [<!ENTITY nbsp " "><!ENTITY test "My-OwnEntity">]>
<xxf:event-request xmlns:xxf="http://orbeon.org/oxf/xml/xforms">
<xxf:uuid>8a89ecf50184eb16f5671301691e0d9457568667</xxf:uuid>
<xxf:sequence>16</xxf:sequence>
<xxf:action>
<xxf:event name="xxforms-blur" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control"/>
<xxf:event name="xforms-focus" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control"/>
<xxf:event name="xxforms-value" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control">My-OwnEntity</xxf:event>
<xxf:event name="xxforms-blur" source-control-id="pd-section-per-sonalData-control≡xf-474≡pd-birthName-control"/>
</xxf:action>
</xxf:event-request>
然后正确处理了请求,并且实体的值出现在服务器返回的响应中。
根据它们,建议了两种方法/解决方案: 1.创建允许实体的白名单;要么 2.在所有情况下均应避免处理这些外部实体。
但是我在Orbeon文档中找不到实现这些解决方案中任何一种的方法(第二种解决方案更适合我的具体情况)。有谁知道该怎么做或经历过类似的情况并以不同的方式处理它?
谢谢。
答案 0 :(得分:0)
在解析XML 时处理实体可能是一个安全问题,例如允许进行billion laughs attack拒绝服务攻击,但是如果处理得当,则不一定是一个安全问题。从4.0版开始,Orbeon Forms便使用SecurityManager
(#686)来设置用于XML解析的Xerces,据我所知,在这种情况下,实体解析是安全的。