为什么Orbeon表单不验证请求参数?

时间:2017-02-09 13:43:50

标签: xss orbeon xforms

在针对反射跨站点脚本类型(https://en.wikipedia.org/wiki/Cross-site_scripting#Reflected_.28non-persistent.29)的漏洞测试Orbeon表单时,我们注意到可以在其中传递带有脚本标记的请求参数,然后可以使用xf:output输出。

当使用xxf:get-request-parameter()或使用xf:output输出请求参数时,Orbeon是否应验证(或至少清理)请求参数以防止出现此类安全漏洞?

我使用最新版本的Orbeon(orbeon-2016.3.201612302139-CE)和Jetty容器进行了测试。 请注意,您不能使用Tomcat,因为它会对请求参数进行自己的验证,而您无法使用Chrome,因为它会为您清理输出(剥离脚本内容)。

一个小样本表格,用于演示:



<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:xh="http://www.w3.org/1999/xhtml"
      xmlns:xf="http://www.w3.org/2002/xforms"
      xmlns:xxf="http://orbeon.org/oxf/xml/xforms">
    <head>
        <title>Reflected XSS</title>
        <xf:model>
            <xf:instance id="default">
                <root xmlns="">
                </root>
            </xf:instance>

            <xf:var name="testvar" value="xxf:get-request-parameter('test')"/>
        </xf:model>
    </head>
    <body>
        <p>This is an example to show that Orbeon is vulnerable to Reflected Cross Site Scripting attacks.</p>
        <p>Access this form and pass a request parameter with some javascript like: /?test=bla%00rje1w<script>alert(1)<%2fscript></p>
        <p><xf:output value="$testvar"/></p>
    </body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

这结果是与HTML序列化相关的错误。问题现在是fixed

另外,我们可以更多地考虑是否需要对请求参数进行卫生处理,包括拒绝或删除字符#00。应该覆盖表单数据本身,因为它来自XML请求,而XML明确禁止此(以及其他一些)字符。