将<c:url>和<c:param>值注入JavaScript字符串文字时的XSS漏洞</c:param> </c:url>

时间:2012-11-28 00:57:32

标签: javascript jsp jstl xss url-encoding

我的静态分析器已标记以下XSS错误。我想了解是否有可能将恶意代码注入此参数,导致注入的值被解释为JavaScript(可能通过过早终止JavaScript字符串文字),或导致注入的值重定向到除此之外的某个位置具有服务器拒绝的值的预期目标。

<c:url var="myUrl" value="/somepage.jsp">
  <c:param name="myParam" value="${param.userSuppliedParameter}"/>
</c:url>

<script type="text/javascript">
  <!--
    document.location = "${myUrl}";
  //-->
</script>

值得注意的是,如果只是更改url参数并且忽略其他URL参数,服务器将正确处理重定向URL。我主要感兴趣的是确定攻击者是否可以使用userSuppliedParameter URL查询参数将可执行JavaScript注入页面,并且攻击者是否有可能将document.location设置为使用任意URL参数评估除/somepage.jsp以外的任何内容。例如:http://foo.com/bar.jsp?userSuppliedParam=SOME_POTENTIALLY_MALICIOUS_PAYLOAD。我不关心注入目标页面的值,也不关心目标页面解释URL的方式。

<c:url>应对URL参数进行URL编码,这会阻止某人添加“@”符号,否则会导致前面的字符被解释为基本身份验证参数。否则会暴露open redirect vulnerability

<c:url>也应编码双引号,这会阻止某人终止JavaScript字符串文字。

我的假设基于RFC的url编码和URLEncoder的JavaDoc。

还有其他可能的滥用行为吗?

1 个答案:

答案 0 :(得分:0)

大家一致认为这是误报。如果我发现潜在的漏洞,我会更新此信息。