【ChinaBeta.Cn 网络安全】
受影响系统: Sun Solaris 10_x86 Sun Solaris 10.0 Sun OpenSolaris
描述: Solaris是一款由Sun开发和维护的商业性质UNIX操作系统。
Solaris的内核没有正确的处理SIOCSIPMSFILTER IOCTL请求,本地攻击者可以利用这个漏洞以内核级权限执行任意指令。
以下是inet/ip/ip_multi.c中的漏洞代码:
static int ip_set_srcfilter(conn_t *connp, struct group_filter *gf, struct ip_msfilter *imsf, ipaddr_t grp, ipif_t *ipif, boolean_t isv4mapped) { [...] int i, err, insrcs, infmode, new_fmode; <-- [1] [...] insrcs = imsf->imsf_numsrc; <-- [2] [...] /* Make sure we can handle the source list */ if (insrcs > MAX_FILTER_SIZE) <-- [3] return (ENOBUFS); [...] fp->sl_numsrc = insrcs; <-- [4] ilg->ilg_filter = fp; <-- [5] [...] l_copy(ilg->ilg_filter, new_filter); <-- [6] [...] 在[2]处将用户所提供的imsf->imsf_numsrc值分配给了insrcs,imsf->imsf_numsrc变量为无符int型,而insrcs为有符int型。如果用户所提供的imsf->imsf_numsrc值为很大的整数的话,insrcs就可能成为负值。
在netinet/in.h文件中:
struct ip_msfilter { struct in_addr imsf_multiaddr; struct in_addr imsf_interface; uint32_t imsf_fmode; uint32_t imsf_numsrc; <-- [7] struct in_addr imsf_slist[1]; };
当insrcs为负值的时候,就可以绕过[3]处的检查,之后用户所提供的数据用作了ilg->ilg_filter的值(请见[4]和[5]),而ilg->ilg_filter值会用作l_copy的参数(请见[6]),这就会由于l_copy中的越界写操作而导致内核内存破坏。
厂商补丁: Sun已经为此发布了一个安全公告(Sun-Alert-237965)以及相应补丁: Sun-Alert-237965:A Security Vulnerability in IP Multicast Filter processing of Sockets may lead to a system panic or possible execution of Arbitrary Code 链接:http://sunsolve.sun.com/search/printfriendly.do?assetkey=1-66-237965-1
(责任编辑:hahack)
注:本站所有资料均为个人爱好与广大网友分享!如用于非法!造成一切后果自负·与本站无关! |