首页 -> 安全研究

安全研究

安全漏洞
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 */



建议:
暂无

浏览次数:7234
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障