安全研究

安全漏洞
Linux 2.4内核execve()系统调用竞争条件洞

发布日期:2003-06-06
更新日期:2003-07-01

受影响系统:
Linux kernel 2.4.9
Linux kernel 2.4.8
Linux kernel 2.4.7
Linux kernel 2.4.6
Linux kernel 2.4.5
Linux kernel 2.4.4
Linux kernel 2.4.3
Linux kernel 2.4.21
Linux kernel 2.4.20
Linux kernel 2.4.2
Linux kernel 2.4.19
Linux kernel 2.4.17
Linux kernel 2.4.16
Linux kernel 2.4.15
Linux kernel 2.4.14
Linux kernel 2.4.13
Linux kernel 2.4.12
Linux kernel 2.4.11
Linux kernel 2.4.10
Linux kernel 2.4.1
Linux kernel 2.4
Linux kernel 2.4.18
    - Conectiva Linux 8.0
    - Conectiva Linux 7.0
    - Debian Linux 3.0
    - Mandrake Linux 9.0
    - Mandrake Linux 8.2
    - RedHat Linux 9.0
    - RedHat Linux 8.0
    - RedHat Linux 7.3
    - Slackware Linux 9.0
    - Slackware Linux 8.1
描述:
BUGTRAQ  ID: 8042

Linux是开放源代码的操作系统。

Linux execve()系统调用存在竞争条件漏洞,本地攻击者可以利用这个漏洞读取某个本无权读取的SUID程序的内容。

execve()函数存在如下代码(fs/binfmt_elf.c):

static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs *
regs)
{
    struct file *interpreter = NULL; /* to shut gcc up */

[...]

    retval = kernel_read(bprm->file, elf_ex.e_phoff, (char *)
elf_phdata, size);
    if (retval < 0)
        goto out_free_ph;

    retval = get_unused_fd();
    if (retval < 0)
        goto out_free_ph;
    get_file(bprm->file);
    fd_install(elf_exec_fileno = retval, bprm->file);

在执行新的二进制程序中,把打开的可执行文件描述符放到当前进程(当前execve()调用者)文件表中,并执行。这可以通过系统clone系统调用在父子进程间创建共享文件描述符然后读取该文件描述符。这允许攻击者读取suid程序的内容(即使攻击者本无权读取)。攻击者也有可能利用这一漏洞以特权状态下执行任意代码,但目前尚未经证实。



<*来源:Paul Starzetz (paul@starzetz.de
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=105664924024009&w=2
*>

建议:
厂商补丁:

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

http://www.kernel.org/

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