安全研究

安全漏洞
SDL_image无效GIF文件LWZ Minimum Code Size远程缓冲区溢出漏洞

发布日期:2008-01-23
更新日期:2008-01-25

受影响系统:
SDL SDL_Image 1.2.6
不受影响系统:
SDL SDL_Image 1.2.7
描述:
BUGTRAQ  ID: 27417

SDL_Image是用于处理图形文件的开源函数库。

SDL_Image在处理畸形格式的图形文件时存在漏洞,远程攻击者可能利用此漏洞通过诱使用户处理恶意文件控制用户系统。

SDL_Image库没有正确地处理Table Based Image Data头中带有无效LWZ Minimum Code Size的图形文件。标准允许代码的最大大小为12位,但SDL_image没有执行检查,因此可能触发缓冲区溢出。以下是IMG_gif.c文件的ReadImage函数中的漏洞代码:

...
    unsigned char c;
...
    if (LWZReadByte(src, TRUE, c) < 0) {
    RWSetMsg("error reading image");
    return NULL;
    }
    /*
    **    If this is an "uninteresting picture" ignore it.
     */
    if (ignore) {
    while (LWZReadByte(src, FALSE, c) >= 0)
        ;
    return NULL;
    }
...

请注意c值未经任何检查便传送给了LZWReadByte。

然后在LWZReadByte函数中可能会触发栈溢出:

LWZReadByte(SDL_RWops *src, int flag, int input_code_size)
...
    static int table[2][(1 << MAX_LWZ_BITS)];
...
    set_code_size = input_code_size;
...
    clear_code = 1 << set_code_size;
...
    for (i = 0; i < clear_code; ++i) {
        table[0][i] = 0;
        table[1][i] = i;
    }
...

<*来源:Gynvael Coldwind
  
  链接:http://secunia.com/advisories/28640/
        http://marc.info/?l=bugtraq&m=120110205511630&w=2
*>

测试方法:

警 告

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

http://vexillium.org/dl.php?sdlgifdos

建议:
厂商补丁:

SDL
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.libsdl.org/cgi/viewvc.cgi/trunk/SDL_image/IMG_gif.c?r1=2970&r2=3462

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