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:
 
 
[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)
 
 
 
 
 

Open Redirect 开放重定向的更多相关文章

  1. 5、Web应用程序中的安全向量 -- Open Redirect Attack(开放重定向)

    开放重定向攻击的概念:那些通过请求(如查询字符串和表单数据)指定重定向URL的Web应用程序可能会被篡改,而把用户重定向到外部的恶意URL. 在执行重定向之前需先检查目标地址的有效性,可使用Url.I ...

  2. Web安全相关(三):开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击.   场景分析 假设有一个正规网站http:// ...

  3. Apache Struts 多个开放重定向漏洞(CVE-2013-2248)

    漏洞版本: Struts < 2.3.15.1 漏洞描述: BUGTRAQ ID: 61196 CVE(CAN) ID: CVE-2013-2248 Struts2 是第二代基于Model-Vi ...

  4. Web安全相关(三):开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击. 场景分析 假设有一个正规网站http://ne ...

  5. 防止开放重定向,恶意篡改returnUrl

    1.防止开放重定向: /// <summary> /// 防止开放重定向 /// </summary> /// <param name="url"&g ...

  6. WordPress 开放重定向漏洞

    漏洞名称: WordPress 开放重定向漏洞 CNNVD编号: CNNVD-201309-167 发布时间: 2013-09-13 更新时间: 2013-09-13 危害等级: 高危   漏洞类型: ...

  7. 再谈Redirect(客户端重定向)和Dispatch(服务器端重定向)

    这是两个常常被放在一起进行比较的概念,今天对这两个概念再重新回顾一下,前者发生在客户端(浏览器),后者发生在服务器端,因此也有人把前者称为客户端重定向,把后者称为服务器端重定向,虽然对于后者这种称谓并 ...

  8. 开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击. 场景分析 假设有一个正规网站http://ne ...

  9. 让Response.Redirect页面重定向更有效率

    用 Redirect 方法可将浏览器重定向到另一个 URL,而不是将内容发送给用户. 这里有一篇文章介绍使用Redirect<Using Response.Redirect Effectivel ...

随机推荐

  1. auto_modify_ip Shell脚本安装

    #!/bin/bash # : #This author is DKS #auto modify ip of linux ############################### IP_NAME ...

  2. spring cloud 之 -- eureka vs consul,该选择谁?

    0--前言 spring cloud的服务注册中心,该选择谁?在选择前,我们首先需要来了解下分布式的CAP定理: 所谓CAP,是指: Consistency:一致性:就是在分布式系统中的所有数据备份, ...

  3. js2——定时跳转

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. 不服跑个分:ARM鲲鹏云服务器实战评测——华为云鲲鹏KC1实例 vs. 阿里云G5实例【华为云技术分享】

    原文链接:https://m.ithome.com/html/444828.htm 今年一月份,华为正式发布了鲲鹏920数据中心高性能处理器,该处理器兼容ARM架构,采用7纳米制造,最高支持64核,主 ...

  5. 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

    前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分离and故 ...

  6. JavaEE基础(02):Servlet核心API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.核心API简介 1.Servlet执行流程 Servlet是JavaWeb的三大组件之一(Servlet.Filter.Listener) ...

  7. bundle 的生成和使用

    一.bundle 的生成 1.打开XCode,创建iOS版用的bundle资源包,有两种方式:第一种直接将工作,open in  finder.在目录中直接新建文件夹,文件夹以bundle格式.文件夹 ...

  8. 【解决】OCI runtime exec failed......executable file not found in $PATH": unknown

    [问题]使用docker exec + sh进入容器时报错 [root@localhost home]# docker exec -it container-test bash OCI runtime ...

  9. BZOJ1002 [FJOI2007]轮状病毒(最小生成树计数)

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7125  Solved: 3878[Submit][Status][Discuss] Descripti ...

  10. ARTS-S centos修改hostname

    hostnamectl set-hostname newhostname 重启