Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2025-21479_iqooneo8 — Exploit local root pour CVE-2025-21479 (Adreno KGSL) sur iQOO Neo8 (SM8475) - accès r/w à la mémoire physique, désactive SELinux, ouvre un shell root | Kitploit
Outils/GitHubGitHub/qingizi7/cve-2025-21479_iqooneo8
Sécurité AndroidEscalade de PrivilègesFrameworks d'ExploitationExploitationRétro-ingénierieSécurité MobileSécurité Matériel et IoTDéveloppement de Charges UtilesExploitation de Binaires

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
GitHubqingizi7/cve-2025-21479_iqooneo8

cve-2025-21479_iqooneo8

Exploit local root pour CVE-2025-21479 (Adreno KGSL) sur iQOO Neo8 (SM8475) - accès r/w à la mémoire physique, désactive SELinux, ouvre un shell root

Voir le dépôt
63102il y a 1 moisPas encore vérifié

CVE-2025-21479 — Exploitation de l'élévation de privilèges du GPU Qualcomm Adreno (SM8475 / iQOO Neo8)

Code d'exploitation pour l'élévation de privilèges locale ciblant CVE-2025-21479, sur le GPU Qualcomm Adreno (KGSL) du vivo V2301A (iQOO Neo8 / PD2301, Snapdragon 8+ Gen 1 / SM8475, Adreno A730, Android 14, noyau GKI 5.10).

En principe, l'exploitation de la vulnérabilité pilote le SMMU du GPU via la commande CP_SMMU_TABLE_UPDATE de KGSL, obtenant ainsi une capacité de lecture et écriture arbitraires en mémoire physique, puis désactive SELinux, localise les symboles du noyau et obtient un shell root — le tout sans flasher l'appareil, ni dépendre du déverrouillage du Bootloader.

Recherche de sécurité limitée aux appareils que vous possédez ou pour lesquels vous disposez d'une autorisation.


Ce qu'il fait

  1. Primitive de mémoire physique GPU. La vérification d'accès du microcode Adreno A730 (eureka_panther) (and $12, 0x3) est défectueuse et identifie à tort un paquet Self-Draw-State (SDS) comme un RingBuffer (RB). Ainsi, en soumettant un faux CP_SMMU_TABLE_UPDATE dans un bloc SDS depuis l'espace utilisateur, il est possible d'écraser le TTBR0 du GPU, faisant pointer la table de pages du GPU vers une page physique arbitraire — dès lors, le GPU peut lire et écrire n'importe quelle mémoire physique.
  2. Stabilisation de la lecture/écriture. Via stabilize_rw, le mapping est consolidé en une zone auto-mappée de 2 Mo, permettant des lectures rapides en masse (fast_pread_bytes, etc.).
  3. Désactivation de SELinux. Le champ selinux_state.enforcing est mis à zéro dans la mémoire physique. Ensuite, l'image du noyau est extraite depuis l'adresse physique fixe 0xA8000000 (limite par défaut de 43 Mo) — SM8475 n'a pas de KASLR physique — et les structures kallsyms sont analysées directement depuis le dump brut (détection automatique du boutisme), de sorte que le KASLR virtuel n'a pas non plus d'effet.
  4. Charge utile root. Un shellcode AArch64 (prepare_kernel_cred(0) → commit_creds(), et désactivation de seccomp) est utilisé pour patcher __do_sys_capset. Le processus enfant issu du fork appelle capset() → devient uid 0 → restaure le code noyau écrasé → le processus enfant réexécute la commande que vous spécifiez dans le domaine u:r:shell:s0 (par défaut sh). Le code noyau finit par être identique octet pour octet à ce qu'il était avant l'exécution.

Appareil de test

Modèlevivo V2301A (iQOO Neo8, nom de code PD2301, carte mère taro)
SoCSM8475 (Snapdragon 8+ Gen 1) + Adreno 730
Android14 (UP1A.231005.007, SDK 34, qssi-user)
Noyau5.10.198-gki-gfb2f5774872c
SELinuxEnforcing (désactivé à l'exécution par cet outil)

Les informations complètes sur l'appareil se trouvent dans device_info.txt.

Structure du dépôt

├── source/
│   ├── cheese.c            # 漏洞利用主程序(include 了下面两个文件)
│   ├── kallsyms_lookup.c   # 针对原始内核映像的 kallsyms 解析器
│   └── adrenaline.h        # KGSL ioctl / 命令定义(作者 hawkes)
├── exploit                 # 预编译 arm64 二进制(动态链接,minSdk 21,
│                           #  NDK r30-beta2)
├── device_info.txt         # 用于调参的目标设备信息
└── README.md

Remarque : cheese.c fait un #include de kallsyms_lookup.c et adrenaline.h, lors de la compilation, les trois fichiers doivent être placés dans le même répertoire.

Compilation

N'importe quel Android NDK relativement récent (r25+) convient, exemple :

# 静态链接(自包含、任意 API 等级可运行;体积较大)
aarch64-linux-android34-clang -o cheese source/cheese.c -static

# 动态链接(体积小,依赖设备自带的 libc;API 等级需匹配设备)
aarch64-linux-android34-clang -o exploit_dyn source/cheese.c
# 若要兼容 API 21+ 设备,请改用 aarch64-linux-android21-clang

Utilisation

#推送exploit
adb push exploit /data/local/tmp/

#运行exploit
adb shell
chmod +x /data/local/tmp/exploit
/data/local/tmp/exploit

详细教程点我(里面有一键工具)

成功后你会得到一个 uid=0 的 shell,且本会话的 SELinux 已被关闭。进程在完成提权后会重新执行 argv[1..](缺省为 sh)。每次运行会有一段倒计时("pte wait 3 second")和 43 MB 内核读取进度("Read X / 43 MB")。 提权成功,uid=0

Variables d'environnement

VariableRôle
CHEESE_PHYADDR=<phys>Force l'adresse physique de base du noyau (contourne la table de détection intégrée gPhyAddrs).
CHEESE_ATTEMPT=<n>Utilise gPhyAddrs[n] au lieu de gPhyAddrs[0] ; après un échec d'initialisation du GPU, maybe_retry incrémente automatiquement la tentative.
CHEESE_SWAPPER_PG_DIR_OFF=<off>Contourne le scan de swapper_pg_dir et utilise directement cet offset absolu.
CHEESE_READ_FULL_KERNEL=1Lit l'image complète du noyau (la limite de lecture par défaut est DEFAULT_KERNEL_SIZE_MB = 43 MB).
CHEESE_KALLSYMS_MAX_MB=<MB>Remplace la limite de lecture de kallsyms.
CHEESE_FORCE_MANUAL_PATCHFINDER=1Force l'utilisation du patchfinder manuel en secours (init_cred, prepare_kernel_cred).
CHEESE_SKIP_GPU=1Ignore la phase de lecture/écriture GPU (uniquement pour le débogage).
CHEESE_NO_RETRY=1Quitte directement après un échec, sans réessayer avec une autre adresse.

Désactivation de vr.ko

En raison du mécanisme particulier des modèles vivo, il est nécessaire de le désactiver sur l'iQOO Neo8 pour maintenir la stabilité des permissions root (le principe précis n'est pas détaillé ici. Il peut ne pas être universel pour d'autres modèles vivo et versions de noyau ; il faut extraire vr.ko soi-même puis l'analyser par rétro-ingénierie). Avant d'exécuter les opérations suivantes, assurez-vous d'abord que la session shell actuelle a obtenu les permissions root.

#备份原始apanic

dd if="$(readlink -f /dev/block/by-name/apanic)" of=/sdcard/apanic_full.bin
#adb shell内执行
adb pull /sdcard/apanic_full.bin ./
#主机端执行

#禁用vr.ko(风险自行评估)
printf '\370\037\000\000\000\000\000\000\000\000\000\000' | dd of=$(readlink -f /dev/block/by-name/apanic) bs=1 seek=$(( $(blockdev --getsize64 /dev/block/by-name/apanic) - 65472 )) conv=notrunc && sync

Ensuite, si un redémarrage à froid du téléphone fait perdre les permissions root, il suffit de relancer l'exploit puis d'exécuter le jailbreak

Jailbreak ReSukiSU (persistance des permissions root)

$(find /data/app -type f -name "libksud.so" | grep resukisu) late-load --kmi android12-5.10

Portage vers d'autres appareils

Les constantes liées à l'appareil se trouvent en haut de source/cheese.c :

  • KERNEL_PHYS_BASE — adresse physique de base du noyau (par défaut 0xA8000000, SM8475)
  • IDMAP_PG_DIR_OFFSET — décalage de idmap_pg_dir (par défaut 0x245a000)
  • selinux_state_offset — décalage utilisé pour localiser selinux_state (par défaut 0x729030, adresse physique réelle = adresse physique de idmap_pg_dir + ce décalage)
  • gPhyAddrs[] — adresses physiques de base candidates essayées successivement
  • DEFAULT_KERNEL_SIZE_MB — valeur de repli / limite supérieure pour la lecture du noyau

Prérequis : GPU de la série Adreno A730/A7xx (firmware affecté) et système de l'appareil sans le correctif de sécurité publié par Qualcomm en juin 2025, noyau dont les kallsyms sont analysables dans le dump physique, et absence de KASLR physique.

Questions fréquentes

Télécharger l’outil