安全研究

安全漏洞
OpenOffice rtl_allocateMemory()函数远程代码执行漏洞

发布日期:2008-08-27
更新日期:2008-08-28

受影响系统:
OpenOffice OpenOffice 2.4.1
OpenOffice OpenOffice 2.4
描述:
BUGTRAQ  ID: 30866
CVE(CAN) ID: CVE-2008-3282

OpenOffice是个整合性的软件,包含了许多文字处理、表格、公式等办公工具。

OpenOffice.org的内存分配程序在64平台上存在计算错误。sal/rtl/source/alloc_global.c文件中的rtl_allocateMemory()函数接受sal_Size n参数。在x86_64等64位平台上,sal_Size被定义为无符长整形。这个请求的内存块大小之后内存对齐为size (type sal_Size),并使用size计算g_alloc_table[]数组的int索引:

  int index = (size - 1) >> RTL_MEMALIGN_SHIFT;

但是,由于在64位系统上sizeof(int) == 4且sizeof(sal_Size) == 8,计算出的值可能不适合索引(当使用很大的参数调用rtl_allocateMemory()时会出现这种情况),存储在数组中的值会被环绕/截尾,导致数组为负数。

在使用数组之前,会检查其值没有超过固定的上限,但没有检查是否>= 0:

  if (index < RTL_MEMORY_CACHED_LIMIT >> RTL_MEMALIGN_SHIFT)

在g_alloc_table[index]中使用负值会导致OpenOffice访问g_alloc_table[]数组之外的内存,精心创建的文档会导致OpenOffice崩溃或执行任意代码。

<*来源:Tomas Hoger (thoger@redhat.com
  
  链接:https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=458056
        http://scary.beasts.org/security/CESA-2008-006.html
        https://www.redhat.com/support/errata/RHSA-2008-0835.html
*>

测试方法:

警 告

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

http://scary.beasts.org/misc/pcx.odt

建议:
厂商补丁:

RedHat
------
RedHat已经为此发布了一个安全公告(RHSA-2008:0835-01)以及相应补丁:
RHSA-2008:0835-01:Important: openoffice.org security update
链接:https://www.redhat.com/support/errata/RHSA-2008-0835.html

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

http://www.openoffice.org/issues/show_bug.cgi?id=92217

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