SAP DB权限提升和缓冲区溢出漏洞受影响系统:
SAP DB 7.4.3.7 Beta
SAP DB 7.4.3
SAP DB 7.4
SAP DB 7.3.29
不受影响系统:
SAP DB 7.4.03.30
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 9050
CVE(CAN) ID: CAN-2003-0938,CAN-2003-0939
SAP是一款开放源代码的数据库服务程序。数据库服务程序快速,高效,易于管理。
SAP的核心SAPDB存在多个漏洞,攻击者可以利用这些漏洞提升权限或者远程破坏SAPDB服务器,未授权访问。
具体漏洞如下:
1、权限提升:
在SAP DB核心代码中存在编程错误,位于'/V74_03_27/SAPDB_ORG/sys/src/os/vos24u.c'中的如下代码:
line 62: #define NET_API_DLL "NETAPI32.DLL"
然后下面一行可被利用
line 143: hinst = LoadLibrary( NET_API_DLL );
如果攻击者可以对SAP DB的当前工作目录进行写访问(在WindowsNT中默认SAP没有限制文件权限),可以替代一个伪造的'NETAPI32.DLL',SAPDB会先搜索当前工作目录,然后装载伪造的'NETAPI32.DLL'而回哦的系统权限。
2、在'niserver'接口中存在远程未授权缓冲区溢出
默认SAP DB安装情况下,'niserver' (on Unix)或'serv.exe' (on Windows)以ROOT或者SYSTEM权限运行,此接口可以用于SAP支持小组连接客户SAP安装。其中的代码存在缓冲区溢出,问题存在于/V74_03_27/SAPDB_ORG/sys/src/eo/veo420.c中的eo420_GetStringFromVarPart函数中:
[Code segment from: eo/veo420.c]
ulLength = pConnectPacket->ConnectLength -
( sizeof (*pConnectPacket) -
sizeof (pConnectPacket->VarPart) );
ulLength = MIN_EO420 ( ulLength, sizeof (pConnectPacket->VarPart)
);
// @stake comment:
// Items in variable-sized segment are stored:
// [1-byte length] [1-byte type] [ data ... ]
//
for ( ulPos = 0;
ulPos < ulLength;
ulPos += pConnectPacket->VarPart[ulPos] & 0xff )
{
...
if ( pConnectPacket->VarPart[ulPos + 1] == StringID )
{
...
break;
}
}
可变大小段长度(variable-sized segment)限制在256字节,而目标字符串缓冲区是256字节的字符数组。但是如果字符串的长度达到可变大小段最大长度,并且没有NULL终结,strcpy函数把接收到的包拷贝到内存时会发生单字节溢出,精心构建提交数据可能以ROOT或SYSTEM权限在系统上执行任意指令。
<*来源:Ollie Whitehouse (ollie@atstake.com)
Dino Dai Zovi (ddaizovi@atstake.com)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=106908714527967&w=2
*>
建议:
--------------------------------------------------------------------------------
厂商补丁:
SAP
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载使用SAP 7.4.03.30版本:
http://www.sapdb.org/