安全研究

安全漏洞
White_Dune本地缓冲区溢出及格式串处理漏洞

发布日期:2008-01-02
更新日期:2008-01-03

受影响系统:
Stephen F. White White_Dune <= 0.29 beta791
不受影响系统:
Stephen F. White White_Dune 0.29 beta795
描述:
BUGTRAQ  ID: 27102

White_Dune是VRML97文件的开源编辑器和查看器。

White_Dune的实现上存在多个安全漏洞,远程攻击者可能利用此漏洞控制用户系统。

-----------------------------------
A] Scene::errorf缓冲区溢出
-----------------------------------

用于创建解析WRL文件中所出现问题的错误消息的函数中存在缓冲区溢出漏洞。以下是Scene.cpp文件中的漏洞代码:

void
Scene::errorf(const char *fmt, ...)
{
    va_list ap;
    char buf[1024], buf2[1024];
    const char *url = "";  

    va_start(ap, fmt);
    vsprintf(buf, fmt, ap);
    if (TheApp->getImportURL() != NULL)
        url = TheApp->getImportURL();
    mysnprintf(buf2, 1024, "%s %d: %s", url, lineno, buf);
    _compileErrors += buf2;
}

------------------------------
B] ImportFile格式串漏洞
------------------------------

在创建了错误消息后,parse()函数会立即返回,然后调用swDebugf()以便将错误消息呈现给stderr或调试器,但没有使用必须的格式参数。以下是DuneApp.cpp中的漏洞代码:

DuneApp::ImportFile(const char *openpath, Scene* scene, bool protoLibrary,
                    Node *node, int field)
    ...
    if (errors[0]) {
        swMessageBox(_mainWnd, errors, "Parse Errors", SW_MB_OK, SW_MB_WARNING);
        swDebugf(errors);
        ...

<*来源:Luigi Auriemma (aluigi@pivx.com
  
  链接:http://marc.info/?l=bugtraq&m=119930802910408&w=2
        http://secunia.com/advisories/28287/
*>

测试方法:

警 告

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

http://aluigi.org/poc/whitedunboffs.zip

建议:
厂商补丁:

Stephen F. White
----------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://129.69.35.12/dune/white_dune-0.29beta795.tar.gz

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