『Java CVE』CVE-2022-22980: Spring Data MongoDB SpEL 注入

本文深入分析了Spring Data MongoDB中的CVE-2022-22980漏洞,详细介绍了其影响版本、工作原理、复现步骤及修复方案。读者将了解到如何利用恶意注解触发SpEL表达式注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

影响版本

Spring Data MongoDB: 3.3.0-3.3.4、3.4.0

漏洞原理

使用@Query或@Aggregation注解进行查询时,通过占位符获取输入参数可能会触发SpEL表达式解析

漏洞复现

环境配置

使用三梦师傅的环境

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

PoC

在这里插入图片描述

代码审计

demo里面构造了使用@query注解查询,参数直接通过注解处理,注解构造成以下格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2boVeEBW-1660015540615)(CVE-2022-22980/image-20220803101116357.png)]

来到ParameterBindingJsonReader.bindableValueFor()处理注解,,因为是json形式,if判断通过,然后正则匹配?#{xx}:#{xx}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qiVQgQbe-1660015540616)(CVE-2022-22980/image-20220803103114373.png)]

如果匹配成功,再查看占位符的值是不是?\d+的形式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmGKH4JI-1660015540616)(CVE-2022-22980/image-20220803103320481.png)]

如果是就进入evaluateExpression触发SpEL解析,这里完成了replace替换成我们输入的参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDUFuAWA-1660015540617)(CVE-2022-22980/image-20220803104538378.png)]

最后在默认解析器解析,这里可以完成所有的SpEL功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yAaP3iKW-1660015540617)(CVE-2022-22980/image-20220803104655675.png)]

也就是说:当注解设置成以下形式时,会被判定为SpEL表达式:只要是json形式、无论键值对包含占位符即可

@Query("{xx: :#{?0} }")
@Query("{#{?0}: xx}")
@Query("{xx: ?#{?0} }")
......

同样的触发点在下面也有,UNQUOTED_STRING是判断注解值是否被引号包裹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPzQZho8-1660015540618)(CVE-2022-22980/image-20220803103536378.png)]

那么这样也能触发

@Query("{'xx': ':#{?0}' }")

只要构造恶意注解来进行参数赋值,就能达到SpEL注入

补丁修复分析

修改了以下文件
在这里插入图片描述
首先就是对注解的过滤判断
在这里插入图片描述
其次就是替换了SpEL解析器,更安全解析
在这里插入图片描述

影响

需要特定格式的注解才能触发SpEL注入

参考

https://tanzu.vmware.com/security/cve-2022-22980
https://github.com/spring-projects/spring-data-mongodb/commit/7c5ac764b343d45e5d0abbaba4e82395b471b4c4#diff-49274f4ac571bc3fa537d508078619cb5cf8e5c7b138db84e46794197499a95c

欢迎关注我的CSDN博客 :@Ho1aAs
版权属于:Ho1aAs
本文链接:https://ho1aas.blog.csdn.net/article/details/126244053
版权声明:本文为原创,转载时须注明出处及本声明

靶场,是指为信息安全人员提供实战演练、渗透测试和攻防对抗等训练环境的虚拟或实体场地。在不同的领域中,靶场扮演着重要的角色,尤其是在网络安全领域,靶场成为培养和提高安全专业人员技能的重要平台。 首先,靶场为安全从业者提供了一个模拟真实网络环境的平台。通过构建类似实际网络的拓扑结构、部署各种安全设备和应用,靶场可以模拟出多样化的网络攻防场景。这使得安全人员能够在安全的环境中进行实际操作,全面提升其实战能力。 其次,靶场是渗透测试和漏洞攻防演练的理想场所。在靶场中,安全专业人员可以模拟攻击者的行为,发现系统和应用的漏洞,并进行渗透测试,从而及时修复和改进防御机制。同时,这也为防御方提供了锻炼机会,通过对抗攻击提高防御能力。 靶场的搭建还促进了团队协作与沟通。在攻防对抗中,往往需要多人协同作战,团队成员之间需要密切配合,共同制定攻击和防御策略。这有助于培养团队合作意识,提高协同作战的效率。 此外,靶场为学习者提供了一个安全的学习环境。在靶场中,学生可以通过实际操作掌握安全知识,了解攻击技术和防御策略。这样的学习方式比传统的理论课程更加生动直观,有助于深化对安全领域的理解。 最后,靶场也是安全社区交流的平台。在靶场中,安全从业者可以分享攻防经验,交流最新的安全威胁情报,共同探讨解决方案。这有助于建立更广泛的安全社区,推动整个行业的发展。 总体而言,靶场在信息安全领域具有重要地位,为安全专业人员提供了实战演练的机会,促进了团队协作与沟通,为学习者提供了安全的学习环境,同时也是安全社区交流的重要平台。通过靶场的实践操作,安全从业者能够更好地应对不断演变的网络威胁,提高整体的安全水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值