发布日期: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)
链接:?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
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: