
L'esecuzione remota di codice avviene in Apache Solr prima della versione 7.1 con Apache Lucene prima della versione 7.1 sfruttando XXE insieme all'uso di un comando Config API add-listener per raggiungere la classe RunExecutableListener.
L'esecuzione remota di codice si verifica in Apache Solr precedente alla versione 7.1 con Apache Lucene precedente alla versione 7.1 sfruttando XXE in combinazione con l'uso di un comando add-listener dell'API Config per raggiungere la classe RunExecutableListener. Elasticsearch, sebbene utilizzi Lucene, NON è vulnerabile a questo. Si noti che la vulnerabilità di espansione delle entità esterne XML si verifica nel XML Query Parser, che è disponibile, per impostazione predefinita, per qualsiasi richiesta di query con parametri deftype=xmlparser e può essere sfruttata per caricare dati dannosi sul gestore di richieste /upload o come Blind XXE utilizzando il wrapper ftp per leggere file locali arbitrari dal server Solr. Si noti inoltre che la seconda vulnerabilità riguarda l'esecuzione remota di codice utilizzando il RunExecutableListener disponibile su tutte le versioni interessate di Solr.
L'output del comando deve essere esfiltrato OOB. Questo POC include il supporto per i formati Hex e Base32, entrambi case-insensitive.
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'