安全研究

安全漏洞
Gadu-Gadu emots.txt处理器多个远程栈溢出漏洞

发布日期:2007-11-22
更新日期:2007-11-26

受影响系统:
Gadu-Gadu Gadu-Gadu 7.7
描述:
BUGTRAQ  ID: 26545

Gadu-Gadu是在波兰广泛使用的免费聊天客户端。

Gadu-Gadu的实现上存在缓冲区溢出漏洞,本地攻击者可能利用此漏洞控制操作系统。

Gadu-Gadu客户端负责将emots.txt文件数据拷贝到本地缓冲区的代码中存在缓冲器溢出漏洞,有漏洞的函数位于0x00443CE2:

.text:00443CE2 HandleEmotsConfig proc near             ; CODE XREF: sub_4A55F6:loc_4A5C90p
.text:00443CE2                 mov     eax, offset loc_561ECC
.text:00443CE7                 call    __EH_prolog
.text:00443CEC                 mov     eax, 26588
.text:00443CF1                 call    __alloca_probe
.text:00443CF6                 push    ebx
.text:00443CF7                 lea     eax, [ebp-24h]
.text:00443CFA                 push    esi
.text:00443CFB                 push    eax
.text:00443CFC                 call    sub_443A9E
.text:00443D01                 xor     esi, esi
(...)

该函数负责打开\emots\_NUMBER_\emots.txt文件然后读取有关图释及其对应图形的信息,以下是配置文件示例:

("emoticon","emoticon",...),"graphic_file.gif","graphic_file.gif"

在将当前打开文件的数据(配置行的第二、第三部分)拷贝到某些本地缓冲区期间,程序没有检查字符串的长度,这可能导致覆盖栈上500字节的缓冲区。

以下是拷贝第一个gfx文件的名称的有漏洞代码:

.text:00443E37 loc_443E37:                             ; CODE XREF: HandleEmotsConfig+164j
.text:00443E37                 cmp     al, '"'
.text:00443E39                 jz      short loc_443E48
.text:00443E3B                 mov     [ecx], al
.text:00443E3D                 inc     ecx
.text:00443E3E                 inc     edi
.text:00443E3F                 mov     [ebp-18h], edi
.text:00443E42
.text:00443E42 loc_443E42:                             ; CODE XREF: HandleEmotsConfig+153j
.text:00443E42                 mov     al, [edi]
.text:00443E44                 cmp     al, 20h
.text:00443E46                 jnb     short loc_443E37

可见对移动的数据没有大小限制。实际上第二段代码也存在同样的情况:

.text:00443E87 loc_443E87:                             ; CODE XREF: HandleEmotsConfig+1B6j
.text:00443E87                 cmp     cl, '"'
.text:00443E8A                 jz      short loc_443E9F
.text:00443E8C                 mov     [eax], cl
.text:00443E8E                 inc     eax
.text:00443E8F                 inc     edi
.text:00443E90
.text:00443E90 loc_443E90:                             ; CODE XREF: HandleEmotsConfig+1A3j
.text:00443E90                 mov     cl, [edi]
.text:00443E92                 cmp     cl, ' '
.text:00443E95                 mov     [ebp-18h], edi
.text:00443E98                 jnb     short loc_443E87

在使用上面的代码拷贝数据时可能会覆盖一些本地变量的值和返回地址等。修改合适的栈数据数量就会导致异常。当emots.txt中的文件名大于栈大小时,或图释解析代码调用了0x0052F5D0地址上函数时,就会出现异常:

.text:00443EEE                 call    unknown_libname_52 ; Microsoft VisualC 2-8/net runtime

具体来说,0x0052F62A上的指令会导致异常,因为EDI寄存器值为0:

.text:0052F62A                 rep movsd

覆盖的指针包括SEH结构,而该结构上包含有系统在出现异常时会调用的函数地址。由于可以轻易的导致异常, 因此可以完全控制地址,导致gg.exe执行任意指令。

<*来源:j00ru (j00ru.vx@gmail.com
  
  链接:http://marc.info/?l=bugtraq&m=119576631502638&w=2
*>

建议:
厂商补丁:

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

http://www.gadu-gadu.pl/

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