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

VSole2022-07-08 07:03:56

漏洞信息

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

漏洞apache
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,安识科技A-Team团队监测到一则 Apache 官方发布安全补丁的通告,共修复了2个安全漏洞,其中包含1个高危漏洞的信息。 对此,安识科技建议广大用户及时升级到安全版本,并做好资产自查以及预防工作,以免遭受黑客攻击。
2022年5月4日,Apache发布安全公告,修复了一个 Apache Jena中的XML外部实体注入漏洞漏洞编号:CVE-2022-28890,漏洞威胁等级:中危。
2022年4月26日,Apache发布安全公告,修复了一个 Apache CouchDB中的远程权限提升漏洞漏洞编号:CVE-2022-24706,漏洞威胁等级:高危,漏洞评分:7.5。
2022年4月26日,Apache发布安全公告,修复了一个 Apache Doris中的硬编码漏洞漏洞编号:CVE-2022-23942,漏洞威胁等级:中危。
2022年4月20日,Apache发布安全公告,修复了一个 Apache APISIX中的信息泄露漏洞漏洞编号: CVE-2022-29266,漏洞威胁等级:严重。
2022年4月20日,Apache发布安全公告,修复了一个 Apache APISIX中的信息泄露漏洞漏洞编号: CVE-2022-29266,漏洞威胁等级:严重。
2022年4月12日,Apache发布安全公告,修复了一个Apache Struts2 中的远程代码执行漏洞漏洞编号:CVE-2021-31805,漏洞威胁等级:高危,漏洞评分:8.5。
2022年1月21日,360漏洞云团队监测到Apache发布安全公告,修复了一个Apache ShardingSphere ElasticJob-UI中的信息泄露漏洞漏洞编号:CVE-2022-22733,漏洞威胁等级:中危。
2022年1月18日,360漏洞云团队监测到Apache Knox发布安全公告,修复了一个Apache Knox中的XSS漏洞漏洞编号:CVE-2021-42357,漏洞威胁等级:中危。
2022年1月4日,360漏洞云团队在互联网上监测到一则关于 Apache Geode 存在一个信息泄露漏洞的信息。漏洞编号:CVE-2021-34797,漏洞威胁等级:低危。
VSole
网络安全专家