
Se produce una ejecución remota de código en Apache Solr anterior a 7.1 con Apache Lucene anterior a 7.1 mediante la explotación de XXE junto con el uso de un comando add-listener de la API de Config para alcanzar la clase RunExecutableListener.
Ejecución remota de código ocurre en Apache Solr anterior a 7.1 con Apache Lucene anterior a 7.1 explotando XXE en conjunto con el uso de un comando add-listener de la Config API para alcanzar la clase RunExecutableListener. Elasticsearch, aunque utiliza Lucene, NO es vulnerable a esto. Nótese que la vulnerabilidad de expansión de entidades externas XML ocurre en el Analizador de Consultas XML que está disponible, por defecto, para cualquier solicitud de consulta con parámetros deftype=xmlparser y puede ser explotada para cargar datos maliciosos al manejador de solicitudes /upload o como Blind XXE usando el envoltorio ftp con el fin de leer archivos locales arbitrarios del servidor Solr. Tenga en cuenta también que la segunda vulnerabilidad se relaciona con la ejecución remota de código utilizando el RunExecutableListener disponible en todas las versiones afectadas de Solr.
La salida del comando debe ser exfiltrada OOB. Este POC incluye soporte para formatos Hex y Base32, los cuales no distinguen entre mayúsculas y minúsculas.
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'