CVE-2022-33980 Apache Commons Configuration 远程命令执行漏洞
2022-7-7 22:42:11 Author: mp.weixin.qq.com(查看原文) 阅读量:9 收藏

★且听安全-点关注,不迷路!

★漏洞空间站-优质漏洞资源和小伙伴聚集地!

漏洞信息

`Apache Commons Configuration` 执行变量插值,允许动态评估和扩展属性。插值的标准格式是 `${prefix:name}` ,其中 `prefix` 用于定位执行插值的  `org.apache.commons.configuration2.interpol.Lookup` 实例。从 `2.4` 版开始到 `2.7` 版,默认的 `Lookup` 实例集包括可能导致任意代码执行或与远程服务器联系的插值器。

漏洞分析

通常我们用 `Commons Configuration` 来管理配置文件,在 `Commons Configuration` 管理的配置文件中,配置变量的值可以引用变量,比如在配置文件中 `${env:FLAG}` 就表示取环境变量 `FLAG` 的值,这种引用动态变量的方式叫做变量插值。

通过查阅资料和调试研究, 发现 `org.apache.commons.configuration2.interpol.ConfigurationInterpolator` 类中的 `interpolate` 函数负责进行变量解析。结合漏洞通报信息,我们构造形如 `${script:test}` 的插值字符串:

进入 `resolveSingleVariable` :

`extractVariableName` 函数用于提取变量名,然后进入 `resolve` :

根据 `:` 分割字符串获取 `prefix` 和 `name` ,`fetchLookupForPrefix` 函数获取到 `ScriptStringLookup` 对象:

接着进入 `ScriptStringLookup#lookup` 函数:

再次利用 `:` 分割字符串获取 `engineName` 和 `script`(测试用的 `test` 不符合格式要求直接抛出异常)。接着利用 `getEngineByName` 获取脚本引擎对象 `ScriptEngine` ,第 35 行将调用 `eval` ,看到这里小伙伴们应该明白如何触发 RCE 漏洞了。

漏洞复现

根据前面的分析,我们很容易构造新的插值字符串格式:

修复方式

直接移除了 `script` 、 `dns` 和 `url` :

由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。

★且听安全-点关注,不迷路!

★漏洞空间站-优质漏洞资源和小伙伴聚集地!


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg3MTU0MjkwNw==&mid=2247491102&idx=1&sn=6569527980d5499dfffa4e9a9dcf38af&chksm=cefda70af98a2e1c2bcb1dfb1a2379041033e45303c7286f4cfd0031d105a1cf99268e53fd84&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh