Writeup – Android – Config Editor

ORHUS - Writeup Mobile - Config Editor

Writeup – Android – Config Editor

par

Régis Senet
Objectif

Exploiter une vulnérabilité induite par une librairie pour obtenir une RCE (Remote Code Execution) sur une application Android.


Outils

Sources

Installation

Pour commencer, nous allons installer l’application sur un périphérique virtuel (bien que cela fonctionne également avec les périphériques physiques), le tout grâce à ADB :

$ adb install com.mobilehackinglab.configeditor.apk
Performing Streamed Install
Success

L’application est installée avec succès et se lance parfaitement :

ORHUS - Writeup Mobile - Config Editor

A première vue, il s’agit d’une application permettant de charger / sauvegarder des fichiers. Commençons l’analyse !

Les librairies

L’objectif de l’exercice étant clair — identifier une vulnérabilité dans une librairie — concentrons-nous directement sur cet aspect.

Il est important de garder en tête que deux types de librairies existent sous Android :

  • Les librairies Java/Kotlin. Écrites en Java ou Kotlin et compilées en bytecode DEX, elles sont directement intégrées dans les fichiers classes.dex de l’APK.
  • Les librairies natives (JNI/NDK). Écrites en C ou C++ et compilées pour chaque architecture sous forme de fichiers .so placés dans le dossier lib/ de l’APK.

Pour lister ces deux types de librairies, nous allons utiliser Android Lib Detector :

ORHUS - Writeup Mobile - Config Editor


Aucune librairie native n’a été identifiée. Néanmoins, la librairie SnakeYAML peut sembler intéressante à analyser. En effet, SnakeYAML est une libraire permettant de lire et d’écrire des fichiers YAML.

En poussant la phase de reconnaissance un peu plus loin, il est possible via une simple recherche Google (« SnakeYAML vulnerability ») d’identifier une vulnérabilité (CVE-2022-1471) permettant d’exécuter du code arbitraire :

ORHUS - Writeup Mobile - Config Editor
SnakeYAML et désérialisation

La librairie SnakeYAML est une librairie Java couramment utilisée pour lire et écrire des fichiers YAML. Elle peut également être embarquée dans des applications Android.

Elle permet notamment de convertir dynamiquement des structures YAML en objets Java, via un processus appelé désérialisation, qui consiste à reconstruire un objet à partir de données structurées (YAML, JSON, XML, etc.). Dans notre cas, un fichier YAML est converti en objet Java via la méthode Yaml.load().

Désérialiser du contenu non maîtrisé peut présenter un risque de sécurité. En effet, il peut être possible d’instancier n’importe quelle classe Java accessible dans le code — y compris des classes contenant des effets de bord (un gadget).

Au sein de notre APK, le problème vient du fait que, lorsque l’on utilise Yaml.load(), SnakeYAML instancie n’importe quelle classe Java si elle est accessible depuis le classpath, sans restriction :

ORHUS - Writeup Mobile - Config Editor


Rappel technique : un gadget est une classe Java déjà présente dans l’application, dont le constructeur ou une méthode spéciale peut provoquer un effet de bord involontaire : exécution de commande, suppression de fichier, etc. Ces classes ne sont pas des vulnérabilités en elles-mêmes, mais deviennent dangereuses si un attaquant peut les instancier à distance via une désérialisation non sécurisée.

Exploitation de la vulnérabilité

Pour que l’exploitation de la désérialisation soit effective, il est nécessaire d’identifier un gadget pouvant avoir un effet de bord qu’un attaquant pourrait vouloir exploiter.

Pour cela, il est possible d’identifier des fonctions potentiellement dangereuses via des recherches manuelles ou via MobSF :

ORHUS - Writeup Mobile - Config Editor

MobSF nous aide à identifier une potentielle exécution de commande au sein du fichier com/mobilehackinglab/configeditor/LegacyCommandUtil.java. Après analyse, la fonction LegacyCommandUtil permet d’exécuter du code arbitraire sans aucune restriction :

ORHUS - Writeup Mobile - Config Editor

Maintenant que nous avons identifié la présence de la bibliothèque vulnérable (SnakeYAML), ainsi qu’un gadget exploitable (LegacyCommandUtil), il est temps de construire un scénario d’exploitation concret.

En explorant le code désassemblé avec Jadx, il est possible d’identifier deux méthodes principales dans MainActivity : loadYaml() et saveYaml(). C’est la première qui nous intéresse particulièrement, car elle contient l’appel vulnérable à SnakeYAML :

Yaml yaml = new Yaml();
Object loadedObject = yaml.load(inputStream);

Aucun SafeConstructor n’est utilisé, ce qui signifie que SnakeYAML désérialisera n’importe quel type déclaré dans le fichier YAML.

Il est alors possible de forger un fichier exploit.yml contenant les commandes que l’on veut exécuter par le biais du gadget LegacyCommandUtil de cette manière. Ces commandes permettront de créer le répertoire orhus (mkdir) ainsi que le fichier rce.txt (touch) :

ORHUS - Writeup Mobile - Config Editor

En chargeant le fichier (via le bouton Load,l’application fera appel à la fonction loadYaml(), elle-même intégrant la fonction yaml.load() vulnérable permettant alors d’exécuter du code arbitraire directement sur le périphérique :

ORHUS - Writeup Mobile - Config Editor

Enfin, il est important de noter que l’application déclare plusieurs permissions sensibles dans au sein du fichier AndroidManifeste.xml, notamment READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE et MANAGE_EXTERNAL_STORAGE. Cette dernière, introduite à partir d’Android 11, permet un accès complet au stockage partagé, y compris les répertoires d’autres applications.

Dans le contexte d’une exécution de code arbitraire, ces permissions élargissent considérablement la surface d’attaque : un fichier YAML malveillant pourrait non seulement exécuter des commandes, mais aussi lire et/ou modifier l’ensemble des fichiers présents sur la carte mémoire, exfiltrer des documents, ou injecter des fichiers dans d’autres applications.

Ce que nous faisons de mieux

effet glitch-court

Évaluez la sécurité de vos systèmes d’information afin d’anticiper les cyber-attaques.

Tests d'intrusion

Test d'intrusion

Mettez-vous dans la peau d’un attaquant

pour éprouver votre sécurité.

Audits

Audit

Identifions ensemble les points
de sécurité primordiaux à améliorer.

Formations

Formation

La formation est le premier
rempart de sécurité à mettre en place.

Tests d'intrusion

Test d'intrusion

Mettez-vous dans la peau d’un attaquant pour éprouver votre sécurité.

Audits

Audit

Identifions ensemble les points
de sécurité primordiaux à améliorer.

Formations

Formation

La formation est le premier
rempart de sécurité à mettre en place.

Ils nous font confiance

effet glitch-court

Qui sommes-nous ?

effet glitch-court

Depuis 2018, ORHUS s’est imposé comme un acteur clé de la cybersécurité, présent sur de nombreux challenges étatiques et engagé auprès de centaines d’entreprises à travers 3 continents. Fondée avec la volonté de dépasser les limites des audits partiels, ORHUS repose sur une approche exigeante et manuelle de l’audit de sécurité, menée par une équipe de 7 experts. Chaque jour, notre équipe met son expertise au service de votre réussite, avec pour priorité l’écoute de vos besoins et l’assurance d’un haut niveau de sécurité.

Vous souhaitez renforcer votre sécurité ?