安全研究

安全漏洞
GNU Tar和GNU Cpio远程堆溢出漏洞

发布日期:2010-03-10
更新日期:2010-03-11

受影响系统:
GNU cpio 2.10
GNU tar 1.22
不受影响系统:
GNU cpio 2.11
GNU tar 1.23
描述:
BUGTRAQ  ID: 38628
CVE(CAN) ID: CVE-2010-0624

GNU Tar和GNU Cpio都是流行的用于管理档案文件的程序。

GNU Tar/Cpio的rmt客户端实现中存在堆溢出漏洞,可能导致执行任意代码。以下是lib/rtapelib.c文件rmt_read__函数中有漏洞的代码段:

/* Read up to LENGTH bytes into BUFFER from remote tape connection HANDLE.
Return the number of bytes read on success, SAFE_READ_ERROR on error.  */
size_t
rmt_read__ (int handle, char *buffer, size_t length)
{
char command_buffer[COMMAND_BUFFER_SIZE];
size_t status;
size_t rlen;
size_t counter;

sprintf (command_buffer, "R%lu\n", (unsigned long) length);
if (do_command (handle, command_buffer) == -1
  || (status = get_status (handle)) == SAFE_READ_ERROR)
return SAFE_READ_ERROR;

for (counter = 0; counter < status; counter += rlen, buffer += rlen)
{
  rlen = safe_read (READ_SIDE (handle), buffer, status - counter);
  if (rlen == SAFE_READ_ERROR || rlen == 0)
    {
      _rmt_shutdown (handle, EIO);
      return SAFE_READ_ERROR;
    }
}

return status;
}

函数首先使用sprintf()和do_command()向服务器写入所要读取的字节数,之后使用get_status()向status变量读入可用的字节数。在for循环中,函数从服务器将status字节读入到缓冲区,但没有检查status是否小于或等于length参数所指定的缓冲区长度,因此恶意rmt服务器可以覆盖缓冲区后堆上数据。

<*来源:Jakob Lell (jakob@cs.tu-berlin.de
  
  链接:http://marc.info/?l=bugtraq&m=126825951926671&w=2
        https://www.redhat.com/support/errata/RHSA-2010-0145.html
        https://www.redhat.com/support/errata/RHSA-2010-0144.html
        https://www.redhat.com/support/errata/RHSA-2010-0143.html
        https://www.redhat.com/support/errata/RHSA-2010-0142.html
        https://www.redhat.com/support/errata/RHSA-2010-0141.html
*>

建议:
临时解决方法:

* 不要使用集成的rmt客户端。
* 在解压tar文件时检查文件名中不要包含有冒号,或使用--force-local选项。

厂商补丁:

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

http://www.gnu.org

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

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