Linux Kernel Netfilter “ipt_CLUSTERIP.c”缓冲区溢出漏洞


发布日期:2011-03-17
更新日期:2011-03-17

受影响系统:
Linux kernel 2.6.x
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 46921

Linux Kernel是开放源码操作系统Linux所使用的内核。

Linux Kernel Netfilter中的"ipt_CLUSTERIP.c"存在缓冲区溢出漏洞,本地攻击者可以通过此漏洞以内核权限执行任意代码,完全控制受影响计算机,导致Kernel崩溃,拒绝服务合法用户。

"buffer"字符串是从用户空间中复制的。程序没有检查其是否以零结尾。可导致simple_strtoul()内的溢出。建议不要复制多于用户提供的"size"字节。这是在git epoch版本之前引入的问题。默认情况下,文件"ipt_CLUSTERIP/*"仅是根可写,但是在一些设置下,权限可能放发到网络管理用户。

<*来源:Vasiliy Kulikov (segoon@openwall.com)
 
  链接:http://marc.info/?l=netfilter-devel&m=130036157327564&w=2
       
*>

测试方法:
--------------------------------------------------------------------------------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

Vasiliy Kulikov (segoon@openwall.com)提供了如下测试方法:

---
net/ipv4/netfilter/ipt_CLUSTERIP.c |    5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
index 1e26a48..af7dec6 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -669,8 +669,11 @@ static ssize_t clusterip_proc_write(struct file *file, const char __user *input,
    char buffer[PROC_WRITELEN+1];
    unsigned long nodenum;

-    if (copy_from_user(buffer, input, PROC_WRITELEN))
+    if (size > PROC_WRITELEN)
+        return -EIO;
+    if (copy_from_user(buffer, input, size))
        return -EFAULT;
+    buffer[size] = 0;

    if (*buffer == '+') {
        nodenum = simple_strtoul(buffer+1, NULL, 10);
--
1.7.0.4
--

建议:
--------------------------------------------------------------------------------
厂商补丁:

Linux
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://www.kernel.org/

相关内容