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
GSC Game World STALKER <= 1.0006
GSC Game World
--------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
<a href=http://www.stalker-game.com/ target=_blank>http://www.stalker-game.com/</a>
暂无评论