0x01 前言
Spring官方发布了关于Spring Data MongoDB SpEL表达式注入漏洞的修复信息,当使用@Query或@Aggregation注解进行查询时,若通过SpEL表达式中形如“?0”的占位符来进行参数赋值,同时应用程序未对用户输入进行过滤处理,则可能受到SpEL表达式注入的影响,成功利用该漏洞的攻击者可在目标服务器上执行代码。
0x02 影响版本
-
Spring Data MongoDB == 3.4.0
-
3.3.0 <= Spring Data MongoDB <= 3.3.4
-
旧的、不受支持的版本也会受到影响
0x03 环境准备
-
Mongodb服务器(如果不与环境一台服务器时请配置绑定地址为0.0.0.0后重启)
-
环境下载地址:https://github.com/li8u99/Spring-Data-Mongodb-Demo.git(修改配置文件中mongodb服务器信息为本地服务器配置src/main/resources/application.properties)
0x04 漏洞复现
根据官方公布的漏洞信息,使用@Query或@Aggregation注解进行查询时,若通过SpEL表达式中形如“?0”的占位符来进行参数赋值,同时应用程序未对用户输入进行过滤处理,则可能受到SpEL表达式注入的影响。
编写一个简单的漏洞demo
由于没有对输入进行过滤,且以 ?0 这类占位符进行传值导致可直接进行SpEL表达式注入。
我们直接传入要执行的表达式即可成功执行,写一个简单的从前端获取输入a参数,通过a参数来执行我们要执行的代码。
启动环境,POST输入
a=T(java.lang.Runtime).getRuntime().exec("cmd.exe /c calc")
成功触发代码。
0x05 修复建议
目前,VMware官方已发布漏洞修复补丁,建议用户尽快下载安装补丁程序或采取缓解措施。
1.补丁升级
建议尽快升级至官方修护版本:
Spring Data MongoDB 3.4.1版本:https://github.com/spring-projects/spring-data-mongodb/releases/tag/3.4.1
Spring Data MongoDB 3.3.5版本:https://github.com/spring-projects/spring-data-mongodb/releases/tag/3.3.5
2.缓解措施
(1) 如果您的应用程序需要使用由用户输入控制的SpEL表达式,那么使用数组形式语法“[0]”引入SpEL参数而不是“?0”形式;
(2) 实现自定义存储库方法,详见:https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.single-repository-behavior;
(3) 通过BeanPostProcessor和受限的QueryMethodEvaluationContextProvider重新配置存储工厂bean;
(4) 在调用查询方法时过滤用户输入内容。
更多修复建议请参考官方发布的安全建议文档:
https://spring.io/blog/2022/06/20/spring-data-mongodb-spel-expression-injection-vulnerability-cve-2022-22980
0x06 免责声明
本文仅限于技术研究学习,切勿将文中技术细节用作非法用途,如有违者后果自负。
关于我们
“TERRA星环”安全团队正式成立于2020年,是贵州泰若数字科技有限公司旗下以互联网攻防技术研究为目标的安全团队。团队核心成员长期从事渗透测试、代码审计、应急响应等安服工作,多次参与国家、省级攻防演练行动,具备丰富的安服及攻防对抗经验。
团队专注于漏洞挖掘、漏洞研究、红蓝对抗、CTF夺旗、溯源取证、威胁情报、代码审计、逆向分析等研究。对外提供安全评估、安全培训、安全咨询、安全集成、应急响应等服务。
原文始发于微信公众号(TERRA星环安全团队):【漏洞复现】Spring Data MongoDB SpEL表达式注入漏洞(CVE-2022-22980)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论