FreeBSD IP堆栈远程拒绝服务漏洞
2008-04-11 09:36:29来源:互联网 阅读 ()
发布日期:2000-06-23
更新日期:2000-06-23
受影响系统:
不受影响系统:
- FreeBSD 3.4
- FreeBSD 4.0
- FreeBSD 5.0
描述:
- 2000-06-08 (3.4-STABLE)
- 2000-06-08 (4.0-STABLE)
- 2000-06-02 (5.0-CURRENT)
FreeBSD IP堆栈对IP选项的处理中存在几个安全漏洞,由于缺乏对参数的边界检查,
以及其他的一些代码错误,当内核接受到一些特别的IP包时,将导致产生对内存区
域的非法访问以至内核崩溃,FreeBSD可能会重新启动。
<* 来源: NetBSD Security Advisory 2000-002
Jun-ichiro itojun Hagino <itojun@kame.net>
FreeBSD Security Advisory -- FreeBSD-SA-00:23
*>
建议:
1) 升级你的FreeBSDU系统到正确日期以后的3.4-STABLE, 4.0-STABLE 或者5.0-CURRENT版本
(正确日期见"不受影响的系统"一栏)
2) 打如下的补丁程序,重新编译内核
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-00:23/ip_options.diff
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-00:23/ip_options.diff.asc
# cd /usr/src/sys/netinet
# patch -p < /path/to/patch_or_advisory
也可以直接使用如下补丁:
Index: ip_icmp.c
===================================================================
RCS file: /ncvs/src/sys/netinet/ip_icmp.c,v
retrieving revision 1.39
diff -u -r1.39 ip_icmp.c
--- ip_icmp.c 2000/01/28 06:13:09 1.39
ip_icmp.c 2000/06/08 15:26:39
@@ -662,8 662,11 @@
if (opt == IPOPT_NOP)
len = 1;
else {
if (cnt < IPOPT_OLEN sizeof(*cp))
break;
len = cp[IPOPT_OLEN];
- if (len <= 0 || len > cnt)
if (len < IPOPT_OLEN sizeof(*cp) ||
len > cnt)
break;
}
/*
Index: ip_input.c
===================================================================
RCS file: /ncvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.130
diff -u -r1.130 ip_input.c
--- ip_input.c 2000/02/23 20:11:57 1.130
ip_input.c 2000/06/08 15:25:46
@@ -1067,8 1067,12 @@
if (opt == IPOPT_NOP)
optlen = 1;
else {
if (cnt < IPOPT_OLEN sizeof(*cp)) {
code = &cp[IPOPT_OLEN] - (u_char *)ip;
goto bad;
}
optlen = cp[IPOPT_OLEN];
- if (optlen <= 0 || optlen > cnt) {
if (optlen < IPOPT_OLEN sizeof(*cp) || optlen > cnt) {
code = &cp[IPOPT_OLEN] - (u_char *)ip;
goto bad;
}
@@ -1174,6 1178,10 @@
break;
case IPOPT_RR:
if (optlen < IPOPT_OFFSET sizeof(*cp)) {
code = &cp[IPOPT_OFFSET] - (u_char *)ip;
goto bad;
}
if ((off = cp[IPOPT_OFFSET]) < IPOPT_MINOFF) {
code = &cp[IPOPT_OFFSET] - (u_char *)ip;
goto bad;
Index: ip_output.c
===================================================================
RCS file: /ncvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.99
diff -u -r1.99 ip_output.c
--- ip_output.c 2000/03/09 14:57:15 1.99
ip_output.c 2000/06/08 15:27:08
@@ -1302,8 1302,10 @@
if (opt == IPOPT_NOP)
optlen = 1;
else {
if (cnt < IPOPT_OLEN sizeof(*cp))
goto bad;
optlen = cp[IPOPT_OLEN];
- if (optlen <= IPOPT_OLEN || optlen > cnt)
if (optlen < IPOPT_OLEN sizeof(*cp) || optlen > cnt)
goto bad;
}
switch (opt) {
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash