Open Redirect 开放重定向
Abstract:
ArticleController.java 文件将未验证的数据传递给第 135 行的 HTTP 重定向函数。如果允许未验证的输入控制重定向机制所使用的 URL,可能会有利于攻击者发动钓鱼攻击。
Explanation:
通过重定向,Web 应用程序能够引导用户访问同一应用程序内的不同网页或访问外部站点。应用程序利用重定向来帮助进行站点导航,有时还跟踪用户退出站点的方式。当 Web 应用程序将客户端重定向到攻击者可以控制的任意 URL 时,就会发生 Open redirect 漏洞:
攻击者可以利用 Open redirect 漏洞诱骗用户访问某个可信赖站点的 URL,并将他们重定向到恶意站点。攻击者通过对 URL 进行编码,使最终用户很难注意到重定向的恶意目标,即使将这一目标作为 URL 参数传递给可信赖的站点时也会发生这种情况。因此,Open redirect 常被作为钓鱼手段的一种而滥用,攻击者通过这种方式来获取最终用户的敏感数据。
这种情况下,系统会通过 ArticleController.java 的第 122 行中的 getParameterMap() 接受客户端即将被重定向到的 URL。
数据通过 ArticleController.java 的第 135 行中的 sendRedirect() 传送。
例 1:以下 JSP 代码会在用户打开链接时,指示用户浏览器打开从 dest 请求参数中解析的 URL。
<%
...
String strDest = request.getParameter("dest"); pageContext.forward(strDest);
...
%>
如果受害者收到一封电子邮件,指示该用户打开 "http://trusted.example.com/ecommerce/redirect.asp?dest=www.wilyhacker.com" 链接,用户有可能会打开该链接,因为他会认为这个链接将转到可信赖的站点。然而,一旦用户打开该链接,上面的代码会将浏览器重定向至 "http://www.wilyhacker.com"。
很多用户都被告知,要始终监视通过电子邮件收到的 URL,以确保链接指向一个他们所熟知的可信赖站点。尽管如此,如果攻击者对目标 URL 进行 16 进制编码:
那么,即使再聪明的最终用户也可能会被欺骗,打开该链接。
Instance ID: 0ED5FA23F1BE6AFDBB4F5A9F7F9C4318
Priority Metadata Values:
IMPACT: 4.0
LIKELIHOOD: 2.8
Legacy Priority Metadata Values:
SEVERITY: 4.0
CONFIDENCE: 5.0
Remediation Effort: 3.0
Recommendations:
不应当允许未验证的用户输入控制重定向机制中的目标 URL。而应采用间接方法:创建一份合法 URL 列表,用户可以指定其中的内容并且只能从中进行选择。利用这种方法,就绝不会直接使用用户提供的输入来指定要重定向到的 URL。
例 2:以下代码引用了一个通过有效 URL 传播的数组。用户单击的链接将通过与所需 URL 对应的数组索引来传递。
<%
...
try { int strDest = Integer.parseInt(request.getParameter("dest")); if((strDest >= 0) && (strDest <= strURLArray.length -1 )) { strFinalURL = strURLArray[strDest]; pageContext.forward(strFinalURL); } } catch (NumberFormatException nfe) { // Handle exception
...
}
...
%>
但在某些情况下,这种方法并不可行,因为这样一份合法 URL 列表过于庞大、难以跟踪。这种情况下,有一种类似的方法也能限制用于重定向用户的域,这种方法至少可以防止攻击者向用户发送恶意的外部站点。
Tips:
1. 许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Spring MVC。为了突出显示未经验证的输入源,HPE Security Fortify 安全编码规则包会降低 HPE Security Fortify Static Code Analyzer(HPE Security Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 HPE Security Fortify 用户执行审计过程,HPE Security Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。
2. Fortify RTA adds protection against this category.
References:
[1] INPUT-1: Validate inputs, Oracle, http://www.oracle.com/technetwork/java/seccodeguide-139067.html#5
[2] Standards Mapping - Common Weakness Enumeration, CWE ID 601
[3] Standards Mapping - FIPS200, SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4, SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014, M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004, A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2010, A10 Unvalidated Redirects and Forwards
[8] Standards Mapping - OWASP Top 10 2013, A10 Unvalidated Redirects and Forwards
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1, Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2, Requirement 6.3.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0, Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0, Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1, Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2, Requirement 6.5.1
[15] Standards Mapping - SANS Top 25 2010, Insecure Interaction - CWE ID 601
[16] Standards Mapping - SANS Top 25 2011, Insecure Interaction - CWE ID 601
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1, APP3510 CAT I, APP3600 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10, APP3510 CAT I, APP3600 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4, APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5, APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6, APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7, APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9, APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1, APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium 24 + 2, Content Spoofing
[26] Standards Mapping - Web Application Security Consortium Version 2.00, URL Redirector Abuse (WASC-38)