Linux Kernel 程序file.c 本地竞争条件漏洞

admin 2022-08-05 13:53:39 CNNVD漏洞 来源:ZONE.CI 全球网 0 阅读模式

漏洞信息详情

Linux Kernel 程序file.c 本地竞争条件漏洞

  • CNNVD编号:CNNVD-200901-123
  • 危害等级: 低危
  • CVE编号: CVE-2008-4307
  • 漏洞类型: 竞争条件
  • 发布时间: 2009-01-13
  • 威胁类型: 本地
  • 更新时间: 2009-05-20
  • 厂        商: linux
  • 漏洞来源: Eugene Teo eugenet...

漏洞简介

Linux kernel是美国Linux基金会发布的开源操作系统Linux所使用的内核。NFSv4 implementation是其中的一个分布式文件系统协议。

RHEL4/5内核处理POSIX锁定时fcntl调用可能与关闭相同文件描述符出现竞争,本地攻击者可以利用这个漏洞导致拒绝服务或获得权限提升。

fcntl以如下方式获得POSIX锁定:

sys_fcntl()

fget()

do_fcntl()

fcntl_setlk()

fput()

if(!count) __fput()

locks_remove_flock()

fcntl_setlk()调用可能阻塞很长时间,允许同一进程中的其他线程关闭文件描述符:

sys_close()

filp_close()

locks_remove_posix()

fput()

if(!count) __fput()

locks_remove_flock()

如果其中一个线程仍在fcntl_setlk中阻断期间但在许可锁定之前(在将file_lock结构放置到inode的i_lock列表之前)从另一个线程关闭了文件描述符,关闭路径中的locks_remove_posix调用就会错过POSIX锁定。此时还无法调用locks_remove_flock,因为fcntl_setlk中线程仍持有对文件的引用。

当__fput调用locks_remove_flock时,sys_fcntl返回路径的最终fput可以触发漏洞:

/*

* This function is called on the last close of an open file.

*/

void locks_remove_flock(struct file *filp)

{

[...]

while ((fl = *before) != NULL) {

if (fl->fl_file == filp) {

if (IS_FLOCK(fl)) {

locks_delete_lock(before);

continue;

}

if (IS_LEASE(fl)) {

lease_modify(before, F_UNLCK);

continue;

}

if (IS_POSIX(fl))

continue;

/* What? */

BUG(); <----

}

before = &fl->fl_next;

}

unlock_kernel();

}

漏洞公告

目前厂商已经发布了升级补丁以修复这个安全问题,补丁下载链接:

http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/old/patch-2.6.25-git6.log

参考网址

来源: bugzilla.redhat.com

链接:https://bugzilla.redhat.com/show_bug.cgi?id=456282

来源: UBUNTU

名称: USN-751-1

链接:http://www.ubuntu.com/usn/usn-751-1

来源: REDHAT

名称: RHSA-2009:0451

链接:http://www.redhat.com/support/errata/RHSA-2009-0451.HTML

来源: www.kernel.org

链接:http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.26

来源: DEBIAN

名称: DSA-1794

链接:http://www.debian.org/security/2009/dsa-1794

来源: DEBIAN

名称: DSA-1787

链接:http://www.debian.org/security/2009/dsa-1787

来源: SECUNIA

名称: 35015

链接:http://secunia.com/advisories/35015

来源: SECUNIA

名称: 35011

链接:http://secunia.com/advisories/35011

来源: SECUNIA

名称: 34981

链接:http://secunia.com/advisories/34981

来源: SECUNIA

名称: 34962

链接:http://secunia.com/advisories/34962

来源: SECUNIA

名称: 34917

链接:http://secunia.com/advisories/34917

来源: REDHAT

名称: RHSA-2009:0473

链接:http://rhn.redhat.com/errata/RHSA-2009-0473.HTML

来源: REDHAT

名称: RHSA-2009:0459

链接:http://rhn.redhat.com/errata/RHSA-2009-0459.HTML

来源: MLIST

名称: [oss-security] 20090113 CVE-2008-4307 kernel: local denial of service in locks_remove_flock

链接:http://openwall.com/lists/oss-security/2009/01/13/1

来源: git.kernel.org

链接:http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.27.y.git;a=commit;h=c4d7c402b788b73dc24f1e54a57f89d3dc5eb7bc

受影响实体

  • Linux Linux_kernel:2.6.25.9  
  • Linux Linux_kernel:2.6.25.9:X86_64  
  • Linux Linux_kernel:2.6.25:X86_64  
  • Linux Linux_kernel:2.6.22.13  
  • Linux Linux_kernel:2.6.22.12  

补丁

    暂无

weinxin
特别声明
本站(ZONE.CI)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
评论:0   参与:  0