当前位置: 安全纵横 > 安全公告

Sun Solaris IP隧道参数空指针引用漏洞

受影响系统:
Sun Solaris 10.0_x86
Sun Solaris 10.0
Sun OpenSolaris snv_01 - snv_76
描述:

Solaris是一款由Sun开发和维护的商业性质UNIX操作系统。

Solaris的IP隧道实现中存在空指针引用漏洞,本地攻击者可以通过发送特制的SIOCGTUNPARAM IOCTL请求导致拒绝服务或执行任意内核态代码。

以下是inet/ip/ip.c中的有漏洞代码段:

[...]
26692 void
26693 ip_process_ioctl(ipsq_t *ipsq, queue_t *q, mblk_t *mp, void *arg)
26694 {
[...]
26717 [1] ci.ci_ipif = NULL
[...]
26735 case TUN_CMD:
[...]
26740 [2] err = ip_extract_tunreq(q, mp, &ci.ci_ipif, ip_process_ioctl);
26741 if (err != 0) {
26742 ip_ioctl_finish(q, mp, err, IPI2MODE(ipip), NULL);
26743 return;
26744 }
[...]
26782if (!(ipip->ipi_flags & IPI_WR)) {
[...]
26788 [3] err = (*ipip->ipi_func)(ci.ci_ipif, ci.ci_sin, q, mp, ipip,
26789 ci.ci_lifr);
[...]

[1] ci.ci_ipif的值设置为NULL。
[2] 当调用SIOCGTUNPARAM IOCTL时,会选择switch case语句TUN_CMD,调用ip_extract_tunreq()函数。
[3] 如果ip_extract_tunreq()函数的返回值为0,之后会将ci.ci_ipif变量用作ip_sioctl_tunparam()函数的第一个参数。

[...]
9468 int
9469 ip_sioctl_tunparam(ipif_t *ipif, sin_t *dummy_sin, queue_t *q, mblk_t
*mp,
9470 ip_ioctl_cmd_t *ipip, void *dummy_ifreq)
9471 {
...
9499 [4] ill = ipif->ipif_ill;
[...]

在ip_sioctl_tunparam()函数中,使用第一个参数ipif引用某些数据([4])。

当ci.ci_ipif设置为NULL的时候,可以以返回值0从ip_extract_tunreq()函数返回([2])。由于ipif与ci.ci_ipif值同为NULL,这可能导致空指针应用([4])。

在x86平台上这个空指针引用可能导致执行任意内核态代码,而在SPARC平台上只能导致拒绝服务。

厂商补丁:

Sun已经为此发布了一个安全公告(Sun-Alert-242266)以及相应补丁:

链接:http://sunsolve.sun.com/search/printfriendly.do?assetkey=1-66-242266-1