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(网友投票)