安全研究

安全漏洞
Microsoft Visual C++标准库时间函数拒绝服务漏洞

发布日期:2007-02-12
更新日期:2007-02-13

受影响系统:
Microsoft Visual C++ 8.0
描述:
CVE(CAN) ID: CVE-2007-0842

Microsoft Visual C++是基于Windows平台的C++编译器。

Microsoft Visual C++标准库时间函数实现上存在漏洞,攻击者可能利用此漏洞导致相关的应用程序崩溃。

在64位版本的时间函数中,如:

localtime()
localtime_s()
gmtime()
gmtime_s()
ctime()
ctime_s()
wctime()
wctime_s()
fstat()

如果time_t参数大于等于_MAX__TIME64_T(代表3000年1月1日00:00:00)的话,就可能出现异常行为。根据MSDN文档,时间函数必须通过返回空指针或EINVAL指示错误,具体取决于函数类,但不应该调用任何无效的参数处理程序。实际上时间函数调用了无效的类似于assert()的宏,导致所调用的应用程序拒绝服务。

localtime_s函数(loctim64.c)中的示例:

        /*
         * Check for illegal __time64_t value
         */
        _VALIDATE_RETURN_ERRCODE_NOEXC( (*ptime >= 0), EINVAL);
        _VALIDATE_RETURN_ERRCODE( (*ptime <= _MAX__TIME64_T), EINVAL);

最后的字符串初始化了断言,对于负数和超大的值都必须使用无效的VALIDATE_RETURN_ERRCODE_NOEXC。有效代码为:

        /*
         * Check for illegal __time64_t value
         */
        _VALIDATE_RETURN_ERRCODE_NOEXC( (*ptime >= 0), EINVAL);
        _VALIDATE_RETURN_ERRCODE_NOEXC( (*ptime <= _MAX__TIME64_T), EINVAL);

如果使用了任何上述函数的话,使用Microsoft Visual C++ 8.0编译器动态或静态函数库所编译的应用程序都受这个漏洞影响。

<*来源:3APA3A (3APA3A@security.nnov.ru
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=117132421311016&w=2
*>

测试方法:

警 告

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

http://securityvulns.com/news/MICROSOFT/Time/Assert.html

建议:
临时解决方法:

1. 定义_USE_32BIT_TIME_T使用32位函数。
2. 检查函数的time参数应小于_MAX__TIME64_T。请注意这个临时解决方案并不可靠,因为无法防范通过时间计算得到time_t的攻击方式。

厂商补丁:

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

http://www.microsoft.com/technet/security/

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