
Une exécution de code à distance se produit dans Apache Solr avant la version 7.1 avec Apache Lucene avant la version 7.1 en exploitant XXE conjointement avec l'utilisation d'une commande add-listener de l'API Config pour atteindre la classe RunExecutableListener.
Une exécution de code à distance se produit dans Apache Solr avant la version 7.1 avec Apache Lucene avant la version 7.1 en exploitant XXE en conjonction avec l'utilisation d'une commande add-listener de l'API Config pour atteindre la classe RunExecutableListener. Elasticsearch, bien qu'il utilise Lucene, n'est PAS vulnérable à cela. Notez que la vulnérabilité d'expansion d'entité externe XML se produit dans l'analyseur de requêtes XML qui est disponible, par défaut, pour toute requête avec les paramètres deftype=xmlparser et peut être exploitée pour télécharger des données malveillantes vers le gestionnaire de requêtes /upload ou en tant que XXE aveugle en utilisant le wrapper ftp afin de lire des fichiers locaux arbitraires du serveur Solr. Notez également que la deuxième vulnérabilité concerne l'exécution de code à distance en utilisant le RunExecutableListener disponible sur toutes les versions affectées de Solr.
La sortie de la commande doit être exfiltrée OOB. Ce PoC inclut le support des formats Hex et Base32, qui sont tous deux insensibles à la casse.
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'