安全研究

安全漏洞
S.T.A.L.K.E.R多个远程溢出和拒绝服务漏洞

发布日期:2008-06-28
更新日期:2008-06-30

受影响系统:
GSC Game World STALKER <= 1.0006
描述:
BUGTRAQ  ID: 29997

S.T.A.L.K.E.R.是由GSC Game World开发的第一人称射击游戏。

如果远程攻击者向S.T.A.L.K.E.R.游戏服务器发送了恶意报文的话,就可以触发缓冲区溢出或拒绝服务漏洞。

----------------------------------------
A] IPureServer::_Recieve栈溢出
----------------------------------------

如果在游戏中接收到了以0x39字节开始的报文,就会使用MultipacketReciever::RecievePacket函数。该函数取入站报文中所指定的16位数字作为所要拷贝的字节数,报文中的数据作为源数据,并使用8k字节的栈缓冲区作为拷贝目标。S.T.A.L.K.E.R.中的每个UDP报文最大大小为1472字节,但通过游戏中所实现的LZO压缩,就可以在报文中放置32k字节的数据,这就可能在上述拷贝操作中触发栈溢出。

----------------------------------------------
B] NET_Compressor::Decompress整数溢出
----------------------------------------------

这个函数用于检查报文中特定的字节是否等于0xc1,如果等于的话就会执行CRC检查并使用rtc9_decompress函数(lzo1x_decompress_dict_safe)解压数据;如果数据没有压缩的话该函数会获取报文中当前数据的大小并执行memcpy(dst, data, data_size - 1),因此发送没有数据的报文就会导致服务器由于拷贝0xffffffff (0 - 1)字节而出现崩溃。

------------------------------------------
C] MultipacketReciever::RecievePacket INT3
------------------------------------------

该函数的第一个操作是检查报文中的特定字节是否等于0xe0或0xe1,如果不等于的话就会执行INT3指令,导致服务器立即终止。

01906F33   8A45 00          MOV AL,BYTE PTR SS:[EBP]
01906F36   3C E1            CMP AL,0E1
01906F38   56               PUSH ESI
01906F39   57               PUSH EDI
01906F3A   894C24 18        MOV DWORD PTR SS:[ESP+18],ECX
01906F3E   74 05            JE SHORT xrNetSer.01906F45  ; jump if 0xe1
01906F40   3C E0            CMP AL,0E0
01906F42   74 01            JE SHORT xrNetSer.01906F45  ; jump if 0xe0
01906F44   CC               INT3                        ; boom

<*来源:Luigi Auriemma (aluigi@pivx.com
  
  链接:http://aluigi.altervista.org/adv/stalker39x-adv.txt
        http://secunia.com/advisories/30891/
*>

测试方法:

警 告

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

http://aluigi.altervista.org/poc/stalker39x.zip

建议:
厂商补丁:

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

http://www.stalker-game.com/

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