RedHat Linux中有一个文件备份工具"dump".它被安装在 /sbin下并且被设置了setuid/setgid root位。当传送一个很长的字符串给"-f a"参数时,dump将发生堆栈溢出。如果提供的参数经过精心构造,攻击者就可能替代堆栈中保存的EIP(指令指针或者返回地址)并以gid root权限来执行任意代码。Dump在crash时会丢弃setuid root权限,但是没有丢弃setgid root权限。因此攻击者可能利用这个漏洞获得setgid root权限,进而可能获取对整个系统的控制权。
MandrakeSoft Linux Mandrake 7.0
MandrakeSoft Linux Mandrake 6.1
RedHat Linux 6.2
RedHat Linux 6.1
RedHat Linux 6.0
RedHat Linux 5.2
RedHat Linux 5.1
Yong-jun, Kim提供了一个patch:
[root@loveyou SOURCES]# diff -ru dump-0.4b13/dump/main_orig.c dump-0.4b13/dump/main.c
--- dump-0.4b13/dump/main_orig.c Mon Feb 28 14:40:01 2000
+++ dump-0.4b13/dump/main.c Mon Feb 28 14:40:57 2000
@@ -273,6 +273,9 @@
exit(X_STARTUP);
}
disk = *argv++;
+ if ( strlen(disk) > 255 )
+ exit(X_STARTUP);
+
argc--;
if (argc >= 1) {
(void)fprintf(stderr, "Unknown arguments to dump:");
临时解决办法:
去掉dump的suid位: chmod a-s /sbin/dump
暂无评论