一、简介

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架。Spring Data Commons 在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞,攻击者可注入恶意SpEL表达式以执行任意命令,漏洞编号为CVE-2018-1273。

​ 该漏洞发生在属性自动绑定阶段,当用户在项目中利用了Spring Data的相关Web特性对用户的输入参数进行自动匹配的时候,会将用户提交的Form表单的key值作为SpEL的执行内容,利用该特性,发送Payload将可能导致远程代码执行。

二、影响版本

  • Spring Data Commons 1.13 to 1.13.10 (Ingalls SR10)
  • Spring Data REST 2.6 to 2.6.10 (Ingalls SR10)
  • Spring Data Commons 2.0 to 2.0.5 (Kay SR5)
  • Spring Data REST 3.0 to 3.0.5 (Kay SR5)
  • Older unsupported versions are also affected

三、环境搭建

所使用Spring Data Commons 测试版本为1.13.10

搭建效果如下图:

四、漏洞复现

【→所有资源关注我,私信回复“资料”获取←】
1、网络安全学习路线
2、电子书籍(白帽子)
3、安全大厂内部视频
4、100份src文档
5、常见安全面试题
6、ctf大赛经典题目解析
7、全套工具包
8、应急响应笔记

  1. 以Post 请求发送form表单(含key-value)
  2. 在key的名称中包含Payload
  3. 提交的key名字已在Controller中实现有getName()
  4. 在key后面补上一段SPEL代码片段。

example:name[T(java.lang.Runtime).getRuntime().exec(“calc”)]

漏洞复现效果,如下图所示:

五、漏洞原理

​ 寻找漏洞代码段,定位到spring-data-commons-1.13.10.RELEASE.jar!org.springframework.data.web.ProxyingHandlerMethodArgumentResolver.class#createAttribute(),程序错误将用户输入传递至MapDataBinder.bind方法。

恶意数据带入,效果如下图所示:

当用户使用[]嵌套属性语法,程序将[]中SPEL表达式解析并得到属性(特性),于是攻击者可注入恶意SpEL表达式以执行任意命令。

​ 特性:通过一定的规则对及格进行筛选,构造出另一个集合 语法:“(list|map).? [选择表达式]” 选择表达式结果必须是boolean类型,如果true则选择的元素将添加到新集合中,false将不添加到新集合中。

解析SPEL表达式,效果如下图所示:

六、POC构造

​ 在实战中需要Fuzz字段,找寻自动属性字段。实验中Controller代码Account.name 已使用Spring默认构造器属性String getName()。故选取name为注入参数。

使用[]嵌套属性语法,程序将[]中SPEL表达式解析并得到属性,故POC 尝试 name[T(java.util.Arrays).toString(T(java.nio.file.Files).list(T(java.nio.file.Paths).get(‘d:\i4Tools7’)).toArray())]

​ 但Response页面报错并无回显点,故此类文件读取POC无法验证漏洞存在,无法验证代码执行成功。

​ 尝试使用DNSLOG 验证执行成功,故POC 调整为,如burp图中所示。

验证DNSLOG出网,效果如下图所示:

七、修复方法

​ 将pom.xml中的org.springframework.boot设置为1.13.11版本或更新版本。

补丁将StandardEvaluationContext替代为SimpleEvaluationContext。

因SimpleEvaluationContext不包括 Java 类型引用,构造函数和 bean 引用,所以安全性较高。

补丁修复,效果如下图所示:

八、小结

​ 在审计中,可使用关键字加快进展,如org.springframework.expression.spel.standard、 expression.getValue()、expression.setValue() 、StandardEvaluationContext。

​ SPEL表达式较为灵活,其可以很好地适配业务中“经常变化”的部分,这可以是“业务规则”,也可以是“不同的数据处理逻辑”,SpEL的T{}表达式灵活具备反射的特点,在Spring环境下无需额外导包较为便捷。常见的SPEL实现资源的注入有如:调用各种资源的情况,包含普通文件、网址、配置文件、系统环境变量、使用预先定义模板的方式获取或者设置某对象中指定属性名的属性值。

​ 在项目中运用Spel技术的开发人员编程水平通常较高,也正是这种巧妙运用,使得漏洞较为隐蔽,较难实现一致性修复,需要安全人员付出足够耐心去寻找查核修复完成情况。

【web安全】Spring Data Commons 1.13.10 SpEL漏洞分析相关推荐

  1. 漏洞复现之CVE-2018-1273 Spring Data Commons 远程命令执行

    漏洞背景 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架.Spring Data Co ...

  2. 漏洞复现 | CVE-2018-1273 Spring Data Commons 远程命令执行

    作者: 墨阳 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 0x00 前言 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data ...

  3. Spring Data Commons 官方文档学习

    Spring Data Commons 官方文档学习   -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...

  4. Spring Data Commons主要梳理

    这篇文章是在看Spring Data Commons文档的时候梳理的内容,都是与Spring Data相关的,里面可能会涉及到Spring Data JPA的内容,但更多的是Commons的内容,Sp ...

  5. Spring Cloud Gateway远程代码执行CVE-2022-22947漏洞分析及复现

    0x01 漏洞描述 Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单.有效.统一的 ...

  6. cve-2018-1273 Spring Expression Language 漏洞分析

    目录 0x00 背景 x01 漏洞影响 受影响的范围 0x02 SpEL 类类型表达式 类实例化 变量和函数的使用 0x03 SpEL调试 0x04 实战分析 CVE-2018-1273 攻击Expl ...

  7. Spring Data JPA 实战

    课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...

  8. 终于有人把Spring Data JPA 讲明白了!

    01 什么是JPA? JPA的全称是 Java Persistence API , 中文的字面意思就是Java 的持久层 API , JPA 就是定义了一系列标准,让实体类和数据库中的表建立一个对应的 ...

  9. 【转】Spring Data JDBC - Reference Documentation

    Spring Data JDBC - Reference Documentation Jens Schauder, Jay Bryant, Mark Paluch, Bastian Wilhelm V ...

最新文章

  1. 编写一个程序,打印输入中各个字符出现频度的直方图
  2. Docker最全教程——从理论到实战(一)
  3. Matlab处理JSON数据
  4. 重磅!花书《深度学习》,这份精炼笔记可能是最全面的
  5. 四、分析HelloWorld程序,开始学习Java运算符
  6. 在stm32上使用Arduino IDE(神舟I号为例)
  7. 3013-04-13 腾讯笔试
  8. book电子书数据库设计_如何为杀手book的封面设计写出完美的摘要
  9. Python学习2 条件判断语句if,循环语句for while
  10. HDFS常用Shell命令
  11. CodeSmith应用(四):实现选择路径对话框
  12. colock 氟橡胶_橡胶球与玻璃球–任务优先级的隐喻
  13. 左程云算法课笔记(不再更新..)
  14. C/C++函数库 之 ctype.h
  15. 电脑桌面便签软件怎么通过便签快捷键快速云同步便签内容?
  16. css预编译的优缺点
  17. 【数学问题2】向量微分
  18. CAB教程,国人写的
  19. 重装系统后计算机无法联网,电脑重装系统后无法连接网络怎么办
  20. 【调剂】2022年武汉大学印刷与包装系刘菊华人工智能课题组诚招计算机调剂研究生...

热门文章

  1. Py之pyquery:pyquery的简介、安装、使用方法之详细攻略
  2. NLP之WE之Skip-Gram:基于TF利用Skip-Gram模型实现词嵌入并进行可视化、过程全记录
  3. Py之pyserial:Python的pyserial库的简介、安装、使用方法之详细攻略
  4. 机器学习-特征工程中的特征选择
  5. Sqlserver 查询语句性能测试
  6. matlab eps 字体用AI打开乱码的解决
  7. 【CSS3】好玩的动画线框
  8. DirectX10一变换(三)
  9. HTML a 标签的正则表达式
  10. Win32环境下两种用于C++的线程同步类(上)