Linux knfsd 拒绝服务攻击
发布日期:2000-05-03
更新日期:2000-05-03
受影响系统:Linux kernel 2.3.x
Linux kernel 2.2.x
+ RedHat Linux 6.2 sparc
+ RedHat Linux 6.2 i386
+ RedHat Linux 6.2 alpha
Linux kernel 2.1.x
不受影响系统:Linux kernel 2.3.99-pre7
Linux kernel 2.3.99-pre6
Linux kernel 2.3.99-pre5
Linux kernel 2.3.99-pre4
Linux kernel 2.3.99-pre3
Linux kernel 2.3.99-pre2
Linux kernel 2.3.99-pre1
Linux kernel 2.2.15pre20
描述:
在低于2.3.99pre7-pre1和2.2.15pre20 [1]的Linux内核代码中存在一个错误,没有正确检查
变量的类型.可能导致远程攻击knfsd.
The faulty code is in kernel/net/sunrpc/svcauth.c, svcauth_unix()
错误代码在kernel/net/sunrpc/svcauth.c中的svcauth_unix()
int slen;
...
slen = ntohl(*bufp++); /* gids length */
if (slen > 16 || (len -= slen + 2) < 0)
goto badcred;
...
bufp += (slen - i);
这里并没有检查slen为负数的情况,因此当slen=-1时,就变成了一个很大的无符号整数,
可能使指针移动超出正常范围,导致程序错误。
<* 来源: Chris Evans (chris@FERRET.LMH.OX.AC.UK) *>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
升级到2.3.99pre1-pre7 或者2.2.15pre20 [1]
补丁代码:
--- net/sunrpc/svcauth.c.old Tue Apr 18 05:13:47 2000
+++ net/sunrpc/svcauth.c Tue Apr 18 06:36:20 2000
@@ -4,6 +4,9 @@
* The generic interface for RPC authentication on the server side.
*
* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
+ *
+ * CHANGES
+ * 19-Apr-2000 Chris Evans - Security fix
*/
#include <linux/types.h>
@@ -117,7 +120,8 @@
struct svc_buf *resp = &rqstp->rq_resbuf;
struct svc_cred *cred = &rqstp->rq_cred;
u32 *bufp = argp->buf;
- int len = argp->len, slen, i;
+ int len = argp->len;
+ u32 slen, i;
if ((len -= 3) < 0) {
*statp = rpc_garbage_args;
@@ -127,7 +131,7 @@
bufp++; /* length */
bufp++; /* time stamp */
slen = (ntohl(*bufp++) + 3) >> 2; /* machname length */
- if (slen > 64 || (len -= slen) < 0)
+ if (slen > 64 || (len -= slen + 3) < 0)
goto badcred;
bufp += slen; /* skip machname */
建议:
暂无
浏览次数:7271
严重程度:0(网友投票)