
Eine Remote-Codeausführung tritt in Apache Solr vor 7.1 mit Apache Lucene vor 7.1 auf, indem XXE in Verbindung mit der Verwendung eines Config-API-add-listener-Befehls ausgenutzt wird, um die RunExecutableListener-Klasse zu erreichen.
Remote-Code-Ausführung tritt in Apache Solr vor Version 7.1 mit Apache Lucene vor Version 7.1 auf, indem XXE in Verbindung mit der Verwendung eines Config-API-add-listener-Befehls ausgenutzt wird, um die RunExecutableListener-Klasse zu erreichen. Elasticsearch ist, obwohl es Lucene verwendet, NICHT angreifbar. Beachten Sie, dass die Schwachstelle der XML-External-Entity-Expansion im XML Query Parser auftritt, der standardmäßig für jede Suchanfrage mit dem Parameter deftype=xmlparser verfügbar ist und ausgenutzt werden kann, um schädliche Daten an den /upload-Request-Handler zu senden oder als Blind-XXE mit dem FTP-Wrapper, um beliebige lokale Dateien vom Solr-Server zu lesen. Beachten Sie auch, dass die zweite Schwachstelle sich auf Remote-Code-Ausführung mittels des RunExecutableListener bezieht, der in allen betroffenen Solr-Versionen verfügbar ist.
Die Befehlsausgabe muss OOB exfiltriert werden. Dieser POC unterstützt die Formate Hex und Base32, die beide case-insensitiv sind.
usage: rce.py [-h] -ue URL_BASE_EXTERNAL -ui URL_BASE_INTERNAL [-b {curl,wget,ftp,ping,nc,ncat,nslookup,dig}] -e EXFIL
[-f {hex,base32}]
POC for CVE-2017-12629 (RCE via internal SSRF via XXE) by @realCaptainWoof
options:
-h, --help show this help message and exit
-ue, --url-base-external URL_BASE_EXTERNAL
External URL base of the vulnerable application; e.g, 'https://vulnerable.app/solr'
-ui, --url-base-internal URL_BASE_INTERNAL
Internal URL base of the vulnerable application; e.g, 'https://127.0.0.1:8983'; default:
'https://127.0.0.1:8983'
-b, --bin {curl,wget,ftp,ping,nc,ncat,nslookup,dig}
How to exfiltrate command output from target; default: 'curl'
-e, --exfil EXFIL Destination to exfil to. Make sure this corresponds to '--bin'; e.g, if '--bin' is 'curl', '--exfil' can
be 'http://EXFIL.myserver.com/EXFIL'. Must specify injection point via 'EXFIL' keyword.
-f, --exfil-format {hex,base32}
Format in which to exfil the command output; default: 'base32'