Skip to content

Commit

Permalink
Neo / Next に対応
Browse files Browse the repository at this point in the history
Signed-off-by: yuu <[email protected]>
Signed-off-by: Syuugo <[email protected]>
Co-authored-by: yuu <[email protected]>
  • Loading branch information
s1204IT and mouseos authored May 14, 2024
1 parent 8654c21 commit b3e8930
Show file tree
Hide file tree
Showing 3 changed files with 406 additions and 392 deletions.
137 changes: 116 additions & 21 deletions README.md
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>
Loading

0 comments on commit b3e8930

Please sign in to comment.