Abstract:
 
Channel.java 中的类既是数据库持久实体,又是动态绑定请求对象。如果允许使用请求参数自动填充数据库持久实体,攻击者将能够在关联实体中创建计划外的数据库记录,或者更新实体对象中的计划外字段。
 
 
Explanation:
 
持久对象通常绑定到底层数据库,并由持久性框架(如 Hibernate 或 JPA)自动更新。如果允许这些对象自动绑定到 Spring MVC 的请求,攻击者将能够通过提供附加的请求参数向数据库中注入非预期的值。
例 1:Order、Customer 和 Profile 都是 Hibernate 持久类。
 
public class Order {
            String ordered;
            List lineItems;
            Customer cust;
...
} public class Customer {            String customerId;
            ...
    Profile p;
...
} public class Profile {     String profileId;             String username;            String password;
            ...
}
 
OrderController 是处理该请求的 Spring 控制器类:
 
@Controller
public class OrderController {
...
            @RequestMapping("/updateOrder")       public String updateOrder(Order order) {
                        ...
                        session.save(order);
            }
}
 
因为命令类会自动绑定到该请求,所以利用这一漏洞,攻击者可以通过在该请求中添加如下请求参数来更新其他用户的密码:"http://www.yourcorp.com/webApp/updateOrder?order.customer.profile.profileId=1234&order.customer.profile.password=urpowned"
 
 
 
Instance ID: B662F07294A63FAB5003A902EE57D350
 
Priority Metadata Values:
 
            IMPACT: 3.0
 
            LIKELIHOOD: 3.2
 
Legacy Priority Metadata Values:
 
            SEVERITY: 3.0
 
            CONFIDENCE: 5.0
 
 
Remediation Effort: 3.0
 
 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
 
 
Recommendations:
 
请不要使用持久实体对象作为请求绑定对象。应手动将请求绑定对象中需要持久保留的属性复制到持久实体对象。或者,应明确定义请求绑定对象中可以通过请求参数设置的属性。
 
 
References:
 
[1] Ryan Berg and Dinis Cruz, Two Security Vulnerabilities in the Spring Framework's MVC, 2008, http://o2platform.files.wordpress.com/2011/07/ounce_springframework_vulnerabilities.pdf
 
[2] Standards Mapping - Common Weakness Enumeration, CWE ID 915
 
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4, SI-10 Information Input Validation (P1)
 
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014, M1 Weak Server Side Controls
 
[5] Standards Mapping - OWASP Top 10 2004, A1 Unvalidated Input
 
[6] Standards Mapping - OWASP Top 10 2007, A4 Insecure Direct Object Reference
 
[7] Standards Mapping - OWASP Top 10 2010, A4 Insecure Direct Object References
 
[8] Standards Mapping - OWASP Top 10 2013, A4 Insecure Direct Object References
 
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1, Requirement 6.5.6
 
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2, Requirement 6.5.2
 
[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.8
 
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2, Requirement 6.5.8
 
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1, APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
 
[16] Standards Mapping - Web Application Security Consortium Version 2.00, Abuse of Functionality (WASC-42)
 
 
 

Mass Assignment:Request Parameters Bound into Persisted Objects 质量分配:请求绑定到持久对象中的参数的更多相关文章

  1. 如何将Request对象中的参数列表打印出来

    Map<String, String[]> map = request.getParameterMap(); Set<Map.Entry<String, String[]> ...

  2. Parameter Passing / Request Parameters in JSF 2.0 (转)

    This Blog is a compilation of various methods of passing Request Parameters in JSF (2.0 +) (1)  f:vi ...

  3. 【Asp.Net MVC】Avoid Mass Assignment in ASP.NET MVC

    Mass Assignment Vulnerability in ASP.NET MVC: http://freshbrewedcode.com/joshbush/2012/03/05/mass-as ...

  4. More than the maximum number of request parameters

    前些时间,我们的的一个管理系统出现了点问题,原本运行的好好的功能,业务方突然讲不行了,那个应用已经运行了好多年了,并且对应的代码最近谁也没改动过,好奇怪的问题,为了解决此问题,我们查看了日志,发现请求 ...

  5. Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”

    Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为"通用职责分配软件模式" 1. GRA ...

  6. java获取request中的参数、java解析URL问号后的参数

    java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...

  7. JAVA 如何把request请求的参数,快速放到model对象中

    因为项目需要,需要从request中读取大量的参数. 因为本人过懒,所以写了个方法把request参数,直接放到对应的类中. 参数 String str="aa,bb,cc"; P ...

  8. java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)

    interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...

  9. 检测到有潜在危险的 Request.Form 值。 说明: ASP.NET 在请求中检测到包含潜在危险的数据

    在请求方法的顶部添加        [ValidateInput(false)]就OK了 从客户端(Content=" sdfdddd ...")中检测到有潜在危险的 Reques ...

随机推荐

  1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ExtractAbstractServiceHandler' is defined

    在利用 Spring 集成 thrift 时,报错如下: javax.servlet.ServletException: Servlet.init() for servlet search-nlp-s ...

  2. UIView的作用

    UIView [UIView的作用] 主要用来显示应用程序的内容,可以作为label.button等控件的容器.表示屏幕上的一块矩形区域,同时可以处理该区域的绘制和触屏事件. MVC,MVVM等设计架 ...

  3. Spring代理模式(jdk动态代理模式)

    有动态代理和静态代理: 静态代理就是普通的Java继承调用方法. Spring有俩种动态代理模式:jdk动态代理模式 和 CGLIB动态代理 jdk动态代理模式: 代码实现: 房东出租房子的方法(继承 ...

  4. [TimLinux] Python 函数(2)

    1. 作用 最大化的代码重用:建设复制.粘贴 最小化的代码冗余:减少重复代码 流程分解:将做一件事情分解为相应的步骤,不同步骤封装在不同的函数中. 2. 定义 def 函数名(可选的参数列表): 函数 ...

  5. python pyHook安装

    Hook安装 哇 这东西可真费劲  主要有pyhook和pyhook3 两种 每个都要根据系统版本和python版本 分成各种小版本 具体安装 一.可以在cmd 中输入 pip install pyh ...

  6. Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:崩坏的芝麻 由于实验室需要一些语料做研究,语料要求是知网上的论文摘要 ...

  7. JPEG算法解密

    图片压缩有多重要,可能很多人可能并没有一个直观上的认识,举个例子,一张800X800大小的普通图片,如果未经压缩,大概在1.7MB左右,这个体积如果存放文本文件的话足够保存一部92万字的鸿篇巨著< ...

  8. HTML中用AJAX方式把数据存储到浏览器中并取出

    把对象只有转成字符串形式才可以存入,取出则是把字符串转成对象

  9. JavaScript数组去重的7种方式

    1.利用额外数组 function unique(array) {    if (!Array.isArray(array)) return;     let newArray = [];    fo ...

  10. springboot自动装配(3)---条件注解@Conditional

    之前有说到springboot自动装配的时候,都是去寻找一个XXXAutoConfiguration的配置类,然而我们的springboot的spring.factories文件中有各种组件的自动装配 ...