安全研究

安全漏洞
SAP DB权限提升及缓冲区溢出漏洞

发布日期:2003-11-17
更新日期:2003-11-24

受影响系统:
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: CVE-2003-0938,CVE-2003-0939,CVE-2003-0944

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/

浏览次数:2738
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障