Une grave vulnérabilité dans le chargeur de démarrage OnePlus 3/3T permet aux attaquants de faire basculer l'état SELinux de Enforcing à Permissive! Lisez la suite pour en savoir plus !
Le OnePlus3 et le OnePlus 3T sont parmi les meilleurs téléphones que vous pouvez acheter actuellement. Alors que les produits phares à venir de 2017 n'ont pas encore été révélés aux consommateurs, en leur absence, le OnePlus 3/3T domine les performances du monde réel à un prix abordable.
Mais si nous voulons être justes dans l’évaluation de l’appareil, nous devons reconnaître que malgré tous les efforts de OnePlus, les OnePlus 3/3T ne sont pas sans défauts. Par exemple, nous avons déjà signalé des problèmes de sécurité tels que OnePlus divulgue les détails IMEI sur le réseau lorsque vous recherchez des mises à jour sur votre téléphone. Et maintenant, nous avons un autre problème de sécurité à ajouter à la liste, celui-ci avec des ramifications potentiellement plus dangereuses.
Une vulnérabilité dans le chargeur de démarrage du OnePlus 3/3T ouvre la porte à des attaques malveillantes. Comme l'a découvert Roee Hay de l'équipe de recherche sur la sécurité des applications IBM X-Force et
révélé sur la plateforme IBM X-Force Exchange, cette vulnérabilité permet à un attaquant de manipuler l'état SELinux sur les appareils, le faisant ainsi passer en mode permissif. Tout ce dont l'attaquant a besoin est soit un accès physique à l'appareil, ou accès à distance à une connexion ADB à l'appareil.SELinux, ou Security-Enhanced Linux, est un module de sécurité du noyau Linux qui permet l'accès et la gestion des politiques de sécurité. SELinux a été introduit sur Android à partir d'Android 4.3 et a été configuré pour Application mode par défaut depuis Android 4.4. Ce système de contrôle d'accès obligatoire permet de faire respecter les droits de contrôle d'accès existants et tente de prévenir les attaques par élévation de privilèges. Cela constitue un obstacle au contrôle non autorisé de votre appareil, comme une application ou une vulnérabilité visant à obtenir un accès root de manière malveillante. Définir SELinux sur Application par défaut sur Android constitue la première étape pour protéger les utilisateurs normaux contre de telles attaques.
La vulnérabilité est plutôt simple à exploiter. En fait, elle semble être un énorme oubli de la part de OnePlus plutôt que ce à quoi vous imagineriez votre exploit typique. Tout d'abord, un attaquant redémarre le OnePlus 3/3T en mode « fastboot »: si vous disposez d'un accès physique, appuyez simplement sur le bouton d'augmentation du volume pendant le démarrage, mais si vous ne le faites pas, vous pouvez émettre la commande ADB. adb reboot bootloader
à l'appareil. Le mode de démarrage rapide sur l'appareil expose une interface USB, qui ne devrait permettre à aucune commande sensible en matière de sécurité de s'exécuter sur des appareils verrouillés. Mais sur le OnePlus 3/3T, il suffit d'émettre le fastboot oem selinux permissive
La commande via l'interface fastboot fait basculer le mode SELinux de Application à Permissif.
fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s...
OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $
Pour compliquer encore le problème, les OnePlus 3 et 3T ne possèdent aucune entrée dans l'écran « À propos » pour mentionner l'état SELinux actuel de l'appareil. Une victime continuera à ignorer l’état compromis de son appareil si elle n’a pas été témoin de l’utilisation active de l’exploit. L'absence d'entrée d'état SELinux dans l'écran « À propos » est absente des versions bêta ouverte basées sur Android 6.0 ainsi que des ROM officielles d'Android 7.0.
Plusieurs applications existent pour faire basculer l'état SELinux sur Permissif, comme SELinuxModeChanger application. Basculer SELinux via cette méthode ne permet pas à l'état de persister lors d'un redémarrage. Cependant, vous pouvez utiliser des scripts pour maintenir le Permissif État SELinux lors des redémarrages durs. Ces deux méthodes nécessitent un accès root, ce qui implique que l'utilisateur a déjà connaissance des risques auxquels il est exposé. Mais la différence majeure avec le changement du mode SELinux en Permissif l'utilisation de la vulnérabilité ci-dessus est que non seulement persiste lors des redémarrages durs, c'est le cas sans avoir besoin d'un accès root.
Aucun remède n’existe à ce jour contre cette vulnérabilité.
MISE À JOUR:
Nous avons contacté Sultanxda, l'un des développeurs de ROM personnalisées les plus reconnus pour les appareils OnePlus, pour voir s'il pouvait nous aider à en savoir plus sur ce problème. Il a rapidement fouillé dans le code pour trouver la source racine, voici ce qu'il a trouvé :
La façon dont le "fastboot oem selinux
- Les utilisateurs peuvent faire passer au chargeur de démarrage un indicateur qui rendrait normalement Selinux permissif sur une version ROM d'ingénierie/débogage.
- OnePlus a modifié l'initialisation d'Android afin d'honorer l'indicateur "androidboot.selinux", même pour les versions de ROM de production
Voici où l'initialisation d'Android est configurée pour ignorer l'indicateur "androidboot.selinux" pour les versions de production: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7
L'indicateur ALLOW_DISABLE_SELINUX dans le code source est uniquement défini sur 1 pour les versions de débogage utilisateur et d'ingénierie.
(Ma ROM n'est pas affectée par cela car je construis ma ROM en mode production (utilisateur))
Donc "androidboot.selinux" est simplement ignoré dans ma ROM, le "fastboot oem selinux
- Modifiez hexadécimalement le chargeur de démarrage pour remplacer toutes les instances de la chaîne "selinux" par quelque chose de différent (comme "sclinux") afin que l'indicateur ne soit pas reconnu par l'initialisation d'Android.
- Modifiez hexadécimalement le binaire d'initialisation Android dans OxygenOS pour remplacer toutes les instances de "androidboot.selinux" par quelque chose de différent (comme "androidboot.sclinux") pour qu'Android init ne reconnaisse pas le indicateur androidboot.selinux
- Ajouter un hack au pilote de ligne de commande du noyau similaire à mon contournement SafetyNet afin de masquer l'indicateur "androidboot.selinux" de l'initialisation d'Android
Nous aimerions remercier Sultanxda pour le temps et les efforts qu'il a consacrés à nous aider à comprendre ce qui se passe dans les coulisses. Nous avons également contacté OnePlus, qui est au courant de la situation et étudie la question.
Nous espérons que OnePlus reconnaît publiquement le problème grave et fait preuve de transparence dans ses plans pour le résoudre.