记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

CVE-2022-42889 Apache Commons Text远程代码执行漏洞分析

2022-11-25 11:55
01


漏洞简介

Apache Commons Text是一个专注于处理字符串的算法库,Apache Commons Text的某些版本存在任意代码执行漏洞。
02


影响版本

1.5 <= Apache Commons Text <= 1.9

03


环境搭建

如图所示,在IDEA中新建一个Maven项目,项目配置如下

创建Maven项目后,在pom.xml文件加入如下内容

<dependency>      <groupId>org.apache.commons</groupId>      <artifactId>commons-text</artifactId>      <version>1.8</version></dependency>

如图所示,在src/main/java目录中创建一个JavaTest类

将JavaTest类内容修改为如下所示

import org.apache.commons.text.StringSubstitutor;
public class JavaTest { public static void main(String[] args) { StringSubstitutor interpolator = StringSubstitutor.createInterpolator(); String poc = interpolator.replace("${script:js:java.lang.Runtime.getRuntime().exec(\"calc\")}"); }}

04


漏洞分析

如图所示,在Runtime.java文件的第346行exec函数设置断点

点击Debug ‘JavaTest’开始调试应用

如图所示,在StringSubstiutor#replace中,调用substitute函数处理source值

跟进到StringSubstiutor#substitute,如图所示,在StringSubstiutor#substitute中,将source值去除${、}后通过resolveVariable函数进行处理。

跟进resolveVariable函数,如图所示,在StringSubstiutor#resolveVariable中调用resolver.lookup函数处理variableName值

跟进resolver.lookup函数,如图所示,在resolver.lookup函数中,首先将variableName值script:js:java.lang.Runtime.getRuntime().exec("calc")去除了script:

再根据variableName值前缀为script调用ScriptStringLookup.lookup解析name值

跟进ScriptStringLookup.lookup函数,在ScriptStringLookup.lookup函数中,根据传入的参数值前缀为js实例化js渲染引擎对象,并调用该对象的eval函数处理去除js:的传入参数值java.lang.Runtime.getRuntime().exec("calc")

最终触发命令执行

05


漏洞修复

将Apache Commons Text版本升级至1.10


知识来源: mp.weixin.qq.com%2Fs%2F72AuNyWzK4ukXob2luDBqA&id=26c25c982a472b12e653d73070aa3d55

阅读:843487 | 评论:0 | 标签:漏洞 CVE 远程 执行 分析 远程代码执行

想收藏或者和大家分享这篇好文章→复制链接地址

“CVE-2022-42889 Apache Commons Text远程代码执行漏洞分析”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

黑帝公告 📢

十年经营持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

客黑业创的万千入年:由自富财

❤用费0款退球星,年1期效有员会

🧠富财控掌,知认升提,长成起一💡

标签云 ☁