CVE:CVE-2008-2710
CNNVD:CNNVD-200806-223
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])，而ilgilg_filter值会用作l_copy的参数(请见[6])，这就会由于l_copy中的越界写操作而导致内核内存破坏。
solution:Upgrade sun opensolaris to a higher version than 10,and avoid the version 10; Upgrade sun solaris to a higher version than 10,and avoid the version (,10]; Upgrade sun sunos to a higher version than -,and avoid the version (,-]