CVE-2022-22980 Mongodb SpEL

💡 原文中文,约2500字,阅读约需6分钟。
📝

内容提要

该文章复现了Spring Data MongoDB的SpEL注入漏洞(CVE-2022-22980),通过构造恶意keyword参数触发代码执行。漏洞源于findAllByIdLike方法,修复版本为3.4.1和3.3.5,建议使用[0]代替?0参数绑定。

🔎

延伸解读

漏洞触发条件

该漏洞仅在特定方法命名时触发,如findAllByIdLike和findAllByIdLike2,而修复后的findAllByIdLike3不会触发。开发者需注意,Spring Data MongoDB的派生查询方法若使用参数绑定?0,可能引入SpEL注入风险,应改用[0]参数索引。

修复版本与建议

官方修复版本为3.4.1和3.3.5,建议升级至这些版本。同时,代码中应使用[0]代替?0进行参数绑定,以规避SpEL表达式解析。参考Spring Data JPA的安全示例,可帮助开发者正确实现参数绑定。

Q&A

CVE-2022-22980是什么漏洞?

CVE-2022-22980是Spring Data MongoDB中的一个SpEL注入漏洞,攻击者可以通过构造恶意keyword参数触发代码执行。

CVE-2022-22980漏洞的触发条件是什么?

当使用Spring Data MongoDB的findAllByIdLike或findAllByIdLike2方法,并且用户输入直接作为参数绑定(如?0)时,攻击者可以注入SpEL表达式,导致代码执行。

CVE-2022-22980漏洞的修复版本有哪些?

修复版本为Spring Data MongoDB 3.4.1和3.3.5。

如何修复CVE-2022-22980漏洞?

修复方法有两种:升级到Spring Data MongoDB 3.4.1或3.3.5;或者在使用@Query时,使用[0]代替?0参数绑定。

CVE-2022-22980漏洞的利用示例是什么?

攻击者可以发送POST请求,在keyword参数中构造SpEL表达式,例如T(java.lang.String).forName('java.lang.Runtime').getRuntime().exec('...'),从而执行任意命令。

CVE-2022-22980漏洞的成因是什么?

漏洞源于Spring Data MongoDB在解析@Query注解时,对SpEL表达式的支持,如果用户输入直接拼接到查询中,就可能被解析为SpEL表达式,导致注入。

🏷️

标签

➡️

继续阅读