freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Apache Commons Text RCE(CVE-2022-42889)分析
1Thek2 2022-10-18 11:22:00 190473
所属地 浙江省

漏洞描述

2022年10月13号发布了Apache Commons Text的漏洞告警,漏洞编号:CVE-2022-42889。

Apache Commons Text 执行变量插值,允许动态评估和扩展属性。插值的标准格式是“${prefix:name}”,其中“prefix”用于定位执行插值的org.apache.commons.text.lookup.StringLookup的实例。从 1.5 版到 1.9 版,默认 Lookup 实例集包括可能导致任意代码执行或与远程服务器联系的插值器。这些查找是: - “script” - 使用 JVM 脚本执行引擎 (javax.script) 执行表达式 - “dns” - 解析 dns 记录 - “url” - 从 url 加载值,包括来自远程服务器 如果使用了不受信任的配置值,则在受影响的版本中使用插值默认值的应用程序可能容易受到远程代码执行或与远程服务器的无意接触的影响。

影响范围

commons-text 1.5-1.9

自检方法

  1. 查看引用的组件版本是否在1.5-1.9之间

  2. 查看是否使用了StringSubstitutor.createInterpolator()方法或者实力化时用了如下写法new StringSubstitutor(StringLookupFactory.INSTANCE.interpolatorStringLookup())

修复方案

  1. 升级版本至1.10.0
  2. 禁止使用StringSubstitutor.createInterpolator()或者new StringSubstitutor(StringLookupFactory.INSTANCE.interpolatorStringLookup())的写法

漏洞分析

commoms.text包的常用方法用于替换文本中的内容

漏洞的问题在于createInterpolator函数 可以看到这里实例了StringSubstitutor,并传入了StringLookupFactory.INSTANCE.interpolatorStringLookup()方法

跟进去看下这个构造方法

这里的传入参数是个接口,各个类实现了lookup的方法

看下interpolatorStringLookup的方法

public StringLookup interpolatorStringLookup() {
return InterpolatorStringLookup.INSTANCE;
}

InterpolatorStringLookup() {
this((Map<String, String>) null);
}


InterpolatorStringLookup(final Map<String, StringLookup> stringLookupMap, final StringLookup defaultStringLookup,
final boolean addDefaultLookups) {
super();
this.defaultStringLookup = defaultStringLookup;
this.stringLookupMap = new HashMap<>(stringLookupMap.size());
for (final Entry<String, StringLookup> entry : stringLookupMap.entrySet()) {
this.stringLookupMap.put(toKey(entry.getKey()), entry.getValue());
}
if (addDefaultLookups) {
StringLookupFactory.INSTANCE.addDefaultStringLookups(this.stringLookupMap);
}
}

这里会通过传入的key关键词找到对应的lookup实现类

而对传入的参数处理就是根据${a:b}的格式生成map,key就是a的值

比如参入${url:"http://xxx.com"},就会到urlStringLookup类中调用lookup方法

以上就是漏洞出现过程,作者本身也给出了语法使用

在StringLookupFactory发现存在ScriptStringLookup类,lookup方法中使用javax.Script引擎进行动态解析

构造传入参数,这样我们就能进行命令执行

1666145327_634f5c2f356f6b137eab6.png!small?1666145325817

总结

在作者的代码中可以发现其本身就构造了这个方法,应用于一些需求,漏洞条件使用苛刻,正常使用不会触发漏洞,且在1.5,1.6中没有createInterpolator()方法,得使用new StringSubstitutor(StringLookupFactory.INSTANCE.interpolatorStringLookup())方法才能执行命令,非特殊场景不容易形成漏洞,影响面较小。


---------------------------------------------------------------------------------------------------------------

**漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。

招聘内推计划:涵盖安全开发、安全测试、代码审计、安全合规等所有方面的岗位,简历投递sec#tuya.com,请注明来源。**

# 漏洞 # web安全 # 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 1Thek2 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
1Thek2 LV.4
这家伙太懒了,还未填写个人描述!
  • 10 文章数
  • 11 关注者
Electron引发的安全问题
2024-07-09
BLE低功耗蓝牙安全系列(一)
2023-07-20
BLE安全基础知识(二)
2023-07-20
文章目录