【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

admin 2022年7月12日21:45:42评论76 views字数 2613阅读8分42秒阅读模式

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析


【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析
【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析
xxhzz
@PortalLab实验室


漏洞描述

6月20号,VMware发布安全公告,修复了spring Data MongoDB 组件中的一个SpEL表达式注入漏洞,该漏洞的CVSSv3评分为8.2,漏洞编号:CVE-2022-22980,漏洞威胁等级:高危。

Spring Data MongoDB应用程序在对包含查询参数占位符的SpEL表达式使用@Query或@Aggregation注解的查询方法进行值绑定时,若输入未被过滤,则易遭受SpEL注入攻击。该漏洞允许未经身份验证的攻击者构造恶意数据执行远程代码,最终获取服务器权限。

相关介绍

Spring Data for MongoDB是 Spring Data 项目的一部分,该项目旨在为新的数据存储提供熟悉和一致的基于Spring的编程模型,同时保留存储的特定特征和功能。Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言,也是一种简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中。

通过 SpEL 可以实现:通过 bean 的 id 对 bean 进行引用;调用方式以及引用对象中的属性;计算表达式的值;正则表达式的匹配。

利用范围

Spring Data MongoDB == 3.4.0

3.3.0 <= Spring Data MongoDB <= 3.3.4

更早或不再受支持的Spring Data MongoDB版本也受到此漏洞影响。

漏洞分析

环境搭建

此次采用threedr3am师傅的漏洞demo(https://github.com/threedr3am/learnjavabug/tree/master/spring/spring-data-mongodb-spel-CVE-2022-22980)进行复现分析。

动态调式

在调试之前查看一下demo中的DemoController,其构造的请求路径为/demo,请求参数为keyword。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

根据diff(https://github.com/spring-projects/spring-data-mongodb/commit/7c5ac764b343d45e5d0abbaba4e82395b471b4c4?diff=split)记录发现,此次漏洞修复的主要位置在ParameterBindingJsonReader 类的 bindableValueFor 函数。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析
话不多说,先在org.springframework.data.mongodb.util.json.ParameterBindingJsonReader#bindableValueFor函数处打下断点。
【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

将环境运行起来后开启debug模式。使用burp抓包并传入payload后,立即触发断点。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

持续跟进,当第一次到达漏洞触发点时,发现并未成功触发payload。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

继续跟进,发现在org.springframework.data.mongodb.util.json.ParameterBindingJsonReader#readBsonType函数中判断token的Type属性后,进入到UNQUOTED_STRING,在这里进行setCurrentName操作,value为id。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

随后回到bindableValueFor函数,后续经过对value的处理,value由id变为了:#{?0}。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

在value为:#{?0}后,会再次进入org.springframework.data.mongodb.util.json.ParameterBindingJsonReader#bindableValueFor函数。

在bindableValueFor函数中首先对tokenValue进行了赋值,随后对tokenValue进行PARAMETER_BINDING_PATTERN和EXPRESSION_BINDING_PATTERN规则匹配。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

EXPRESSION_BINDING_PATTERN只能匹配 ?#{} 或者:#{}形式的字符串。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

随后,将赋值交给binding,再通过substring取出占位符?0

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

接下来通过for循环将占位符和传入的payload进行替换。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

同时通过PARAMETER_BINDING_PATTERN规则匹配成功后即认为是spel表达式格式,此时expression为传入payload。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

执行this.evaluateExpression。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

最终进入org.springframework.data.mongodb.repository.query.DefaultSpELExpressionEvaluator#evaluate函数,此时使用的是 StandardEvaluationContext 类型,包含了 SpEL 所有的功能。

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

此时的 SpEL表达式为之前构造的恶意攻击载荷,可成功命令执行。

漏洞复现

【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

修复建议

目前此漏洞已经修复,受影响的用户建议尽快升级至官方修护版本:

Spring Data MongoDB 3.4.1或更高版本;

Spring Data MongoDB 3.3.5或更高版本。

下载链接:

https://github.com/spring-projects/spring-data-mongodb/tags


参考材料

1.https://tanzu.vmware.com/security/cve-2022-22980

2.https://xz.aliyun.com/t/11478

3.https://spring.io/blog/2022/06/20/spring-data-mongodb-spel-expression-injection-vulnerability-cve-2022-22980


关于Portal Lab

星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。


【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

原文始发于微信公众号(星阑PortalLab):【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月12日21:45:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术干货】 CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞分析http://cn-sec.com/archives/1172637.html

发表评论

匿名网友 填写信息