首页 -> 安全研究

安全研究

安全漏洞
Linux内核Capability LSM模块进程特权信任状本地权限提升漏洞

发布日期:2004-12-22
更新日期:2004-12-28

受影响系统:
Linux kernel 2.6.9
Linux kernel 2.6.8
Linux kernel 2.6.7
Linux kernel 2.6.6
Linux kernel 2.6.5
Linux kernel 2.6.4
Linux kernel 2.6.3
Linux kernel 2.6.2
Linux kernel 2.6.1
Linux kernel 2.6
描述:
BUGTRAQ  ID: 12093
CVE(CAN) ID: CVE-2004-1337

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

Linux Kernel在处理Capability模块实现时存在问题,本地攻击者可以利用这个漏洞提升权限。

当特权操作由Capability LSM 模块控制时,系统基于进程信任状(creds)来仲裁特权操作。当Capability未被编译进内核时,内核使用默认的安全模块(security/dummy.c)仲裁特权操作,机制非常简单,仅仅检查进程euid、fsuid(进行文件系统相关特权操作时)是否为0。在这种情况下,dummy模块根本不关心进程的信任状,每个进程的信任状都拷贝其父进程的信任状。追根溯源,每个进程的信任状无论进程用户是否为超级用户,最终都拷贝Init进程的信任状,信任状中包含有超级用户进程的所有权能。在根据用户ID进行特权判断情况下,此错误未被激发。但在插入Capability模块后,特权机制转为根据进程信任状进行判断,而此前存在的任何进程的信任状都与Init进程一致,导致这些进程都具有超级用户root的特权。此错误的本质是装载Capability模块时没有对已有进程的信任状按Capability机制的要求进行重新计算。试验表明,此错误出现在2.6.* Linux内核中。

<*来源:liangbin (liangbin@venustech.com.cn
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=110384535113035&w=2
*>

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 第三方补丁如下:

在 security/capability.c中加入以下代码
static void recompute_capability_creds(struct task_struct *task)
{
        if(task->pid <= 1)
                return;


        task_lock(task);
        task->keep_capabilities = 0;
        
        if ((task->uid && task->euid && task->suid) && !task->keep_capabilities)
                cap_clear (task->cap_permitted);
        else
                task->cap_permitted = CAP_INIT_EFF_SET;



        if (task->euid != 0){
                cap_clear (task->cap_effective);
        }
        else{
                task->cap_effective = CAP_INIT_EFF_SET;
        }
        
        if(task->fsuid)
                task->cap_effective &= ~CAP_FS_MASK;
        else
                task->cap_effective |= CAP_FS_MASK;
        
        task_unlock(task);
        
        return;
}

并且在已有capability_init 函数在其返回前加入以下代码:
    
    struct task_struct *task;

        read_lock(&tasklist_lock);
        for_each_process(task){
                recompute_capability_creds(task);
        }
        read_unlock(&tasklist_lock);
        
        return 0;

厂商补丁:

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

http://www.kernel.org/

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