Sun Solaris aio_suspend()整数溢出本地拒绝服务漏洞

QQ空间 新浪微博 微信 QQ facebook twitter
漏洞ID 1184036 漏洞类型 数字错误
发布时间 2009-01-15 更新时间 2009-01-31
CVE编号 CVE-2009-0132 CNNVD-ID CNNVD-200901-193
漏洞平台 N/A CVSS评分 4.9
|漏洞来源
http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-200901-193
|漏洞详情
Solaris是一款由Sun开发和维护的商业性质UNIX操作系统。Solaris内核中用于在32位模式系统上处理SYS_kaio系统调用请求的代码存在整数溢出漏洞,本地攻击者可以利用这个漏洞导致由于内核忙碌而触发的系统崩溃。由于所有的Solaris区共享相同的内核,因此即使由普通的非全局区触发也可以导致整个系统崩溃。/uts/common/os/aio.c中的源码:[..]221staticint64_t222kaioc(223longa0,224longa1,225longa2,226longa3,227longa4,228longa5)229{230interror;231longrval=0;232233switch((int)a0&~AIO_POLL_BIT){...266caseAIOSUSPEND:267[1]error=aiosuspend((void*)a1,(int)a2,(timespec_t*)a3,268(int)a4,&rval,AIO_64);269break;[..][1]aiosuspend()函数的a1、a2、a3和a4参数是受控的。/uts/common/os/aio.c中的源码:[..]897staticint898aiosuspend(899void*aiocb,900intnent,901structtimespec*timout,902intflag,903long*rval,904intrun_mode)905{...925aiop=curproc->p_aio;926[2]if(aiop==NULL||nent<=0)927return(EINVAL);...951if(model==DATAMODEL_NATIVE)952[3]ssize=(sizeof(aiocb_t*)*nent);953#ifdef_SYSCALL32_IMPL954else955[3]ssize=(sizeof(caddr32_t)*nent);956#endif/*_SYSCALL32_IMPL*/957958[4]cbplist=kmem_alloc(ssize,KM_NOSLEEP);[..][2]由于nent是受控的,如果nent>0就可以绕过这个检查[3]使用用户控制的nent值计算ssize值,对nent提供0x3fffffff值
|参考资料

来源:BID
名称:33188
链接:http://www.securityfocus.com/bid/33188
来源:sunsolve.sun.com
链接:http://sunsolve.sun.com/search/document.do?assetkey=1-21-117350-59-1
来源:MISC
链接:http://www.trapkit.de/advisories/TKADV2009-001.txt
来源:SECTRACK
名称:1021553
链接:http://www.securitytracker.com/id?1021553
来源:VUPEN
名称:ADV-2009-0099
链接:http://www.frsirt.com/english/advisories/2009/0099
来源:SUNALERT
名称:247986
链接:http://sunsolve.sun.com/search/document.do?assetkey=1-26-247986-1
来源:SECUNIA
名称:33516
链接:http://secunia.com/advisories/33516