长亭百川云 - 文章详情

CVE-2022-33980 Apache Commons Configuration 远程命令执行漏洞

自在安全

46

2024-07-13

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

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

漏洞信息

`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` :

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

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

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

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2