Retour sur la THCon 2024

XMCO s'est rendu à Toulouse pour l'édition 2024 de la Toulouse Hacking Convention (ou THCon). Durant celle-ci, de nombreuses présentations ont eu lieu, tant par des membres de la communauté universitaire que par des collaborateurs de sociétés privées. Nous revenons dans cet article sur 4 conférences nous ayant particulièrement marqués.


PHP Filter Chains – Rémi Matasse

Dans cette présentation, Rémi Matasse, pentester chez Synacktiv, nous a présenté ses recherches sur l'exploitation des PHP filter chains.

Rémi débute cette présentation en définissant la notion de wrappers du langage PHP. Agissant comme des pseudos protocoles, ils permettent de spécifier diverses manières d'interagir avec des données distantes ou du système de fichiers, par exemple via les fonctions fopen(), copy(), file_exists() ou encore filesize().

Nous est ensuite présenté le wrapper php://filter, à la base des attaques décrites dans la présentation. Ce dernier permet d'agir à la volée sur les données accédées, leur faisant subir un nombre arbitraire de conversions ou transformations. À titre d'exemple, Rémi liste notamment les filtres String.rot13, Convert.base64-encode ou encore Convert.iconv.*. Ce dernier est particulièrement intéressant d'un point de vue offensif pour la possibilité qu'il offre de générer des chaines de caractères arbitraires.

Pour illustrer cette génération de caractères, Rémi suppose l'existence d'une application sujette à une vulnérabilité de Local File Inclusion (ou LFI) via l'utilisation de la fonction file_get_contents(). Un fichier nommé test et contenant la chaine de caractère "STARTING" est présent sur le serveur.

Un utilisateur injecte alors la chaine de filtres suivante en entrée de la fonction file_gets_contents:

file_get_contents('php://filter/convert.iconv.UTF8.UTF16|convert.iconv.L6.UTF8|convert.iconv.UTF8.UTF16|convert.base64-decode|convert.base64-encode/resource=test);

En sortie de la fonction, le serveur retourne la chaine de caractère 8STARTING, mettant en évidence la génération du chiffre 8 à partir du contenu d'un ficher ne l'incluant pas.

Cette démarche est généralisable pour permettre de créer des chaines de caractères arbitraires via des chaines de filtres PHP. Rémi a créé un outil permettant d'automatiser la génération de chaines de caractères spécifiques à partir des filtres PHP. Cet outil a notamment permis d'exploiter la vulnérabilité CVE-2023-6553 sur un plugin WordPress en générant la chaine de caractères <?php system("id"); die(); ?> et en l'ajoutant au début du contenu d'un fichier lors de son chargement. Le code ainsi généré permet l'exécution de commandes arbitraires (ici, la commande id) et ouvre donc la voie à la compromission du système.

Enfin, Rémi nous a présenté un autre outil appelé wrapwrap exploitant également les filtres PHP mais permettant cette fois-ci d'ajouter des données à la fin d'un fichier. Cette technique a permis de pouvoir téléverser un fichier JSON valide avec à la fin une charge utile permettant révélé le contenu d'un fichier arbitraire (CVE-2024-29858).

Lien vers l'article: https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it

Lien vers l'outil publié par Rémi: https://github.com/synacktiv/php_filter_chain_generator

Lien vers l'outil wrapwrap: https://github.com/ambionics/wrapwrap


Towards understanding alerts raised by Unsupervised Network Intrusion Detection systems

Maxime Lanvin, doctorant à l'INRIA, nous présente le fruit ses de recherches sur l'utilisation d’intelligence artificielle et notamment d'apprentissage non supervisé appliqué aux outils de type NIDS (Network Intrusion Detection System).

En introduction, deux solutions permettant de mettre en place une détection et remontée d'alertes automatisées sont présentées. La première est basée sur les signatures de certaines attaques (Signature based alert) et l'autre sur les anomalies calculées par rapport à un trafic réseau nominal (Anomaly based alert).

La première solution présente l'avantage d'être plus complète en termes d'informations (signature, catégorie, CVE…) pour qualifier une attaque et commencer une investigation. Elle ne permet pas cependant pas de détecter des comportements non référencés. La deuxième solution le permet théoriquement, mais manque d'"explicabilité" dans la mesure où les alertes générées ne contiennent pas d'information sur la donnée ayant causé leur remontée. Maxime nous a présenté les travaux menés avec son équipe visant à faciliter l'interprétation des alertes remontées par ce second type de modèles.

Dans le cadre des NIDS non supervisés et basés sur les anomalies, la technique la plus courante consiste à représenter les données réseau sous une forme intermédiaire, comme un graphe. Des vecteurs sont ensuite dérivés de cette représentation intermédiaire. Ces vecteurs sont typiquement composés des différents attributs que peuvent contenir des trames réseau (adresse IP source, méthode HTTP, durée de la connexion…). Ils sont ensuite traités par un réseau neuronal de type Auto encoder, dont l'architecture peut être divisée en deux parties:

  • Un "Encoder" qui permet de compresser les données entrées en réduisant leur dimension.
  • Un "Decoder" dont le but est de retrouver les données originales à partir des données de sortie de l'encoder.

À l'issue de ces deux étapes, on observe une erreur de reconstruction. La phase d'apprentissage vise à minimiser cette erreur. Lors de la phase de détection, une anomalie peut être relevée lorsqu'un vecteur génère une erreur trop grande en sortie du modèle.

Maxime nous a ensuite présenté un comparatif de méthodes utilisées pour classer les différentes dimensions d'un vecteur afin de détecter les principales anomalies.

Les trois méthodes étudiées sont le classement par valeur absolue, par valeur de Shapley et enfin par p-valeur.

Il est ressorti de ce comparatif que le classement par p-valeur présentait le meilleur compromis entre vitesse de traitement et précision.

Grâce à cette méthode, il est donc possible de classer les paramètres réseau aidant à caractériser une anomalie et ainsi compléter l'alerte afin d'en faciliter l'analyse.

Enfin, il nous a été présenté l'application de ce projet au jeu de donnée CICIDS17 représentant 5 jours de trafic réseau et 15 machines dont certaines soumises à des attaques.

Lien vers l'article de recherche : https://dl.acm.org/doi/10.1145/3607199.3607247

Lien vers le projet d'Auto Encoder : https://gitlab.inria.fr/mlanvin/ae-pvalues


E-Spoofer: Attacking and defending Xiaomi Electric Scooter Ecosystem

Marco Casagrande, doctorant à Eurecom, a présenté ses recherches sur la sécurité des trottinettes électriques Xiaomi et de l'infrastructure les supportant. Xiaomi domine les ventes sur ce secteur en plein essor, et les conséquences de ces travaux de recherches sont donc susceptibles d'impacter des millions d'utilisateurs.

Dans un premier temps, Marco a exposé l'architecture générale de l'écosystème Xiaomi, mettant en lumière ses principales composantes :

  • Les trottinettes connectées, qui intègrent plusieurs sous-systèmes tels que le module de communication Bluetooth, le module de commande du moteur et le module de gestion de la batterie.
  • L'application mobile MiHome, indispensable à l'utilisation des trottinettes par leurs propriétaires. Cette application communique avec les trottinettes via un protocole propriétaire basé sur le Bluetooth Low Energy (BLE). Elle permet d'associer une trottinette à un compte Xiaomi, offrant notamment à l'utilisateur connecté la possibilité de désactiver le frein moteur, principale mesure de sécurité physique contre le vol des trottinettes.
  • Le backend de Xiaomi, fournissant des services web consommés par l'application mobile.

Les recherches de Marco se sont concentrées sur les attaques ayant le plus fort impact potentiel, notamment le vol de trottinettes ou l'envoi de commandes arbitraires à celles-ci. Ces attaques se limitent aux échanges Bluetooth entre la trottinette et l'application mobile.

Au cours de son analyse initiale des échanges entre l'application mobile et différentes versions de trottinettes, Marco a identifié quatre versions de protocoles utilisés :

  • La version P1, dépourvue de toute sécurité. Les échanges sont en clair et ne comportent aucune vérification d'intégrité, permettant à un attaquant connaissant la structure des paquets de voler n'importe quel appareil en l'appariant à son téléphone.
  • La version P2, utilisant la fonction XOR pour obfusquer les messages avec une clé. Cependant, cette clé peut être facilement obtenue par une écoute passive ou via une demande d'appariement, si l'attaquant peut physiquement activer ce mode sur la trottinette via l'appui sur un bouton. De plus, il est possible de forcer la transition vers le protocole P1 en envoyant une commande spécifique.
  • La version P3, utilisant l'algorithme AES-ECB pour dériver la clé à partir d'une constante et du nom de la trottinette. La constante étant identique pour toutes les trottinettes et le nom étant visible par un attaquant à proximité, ce mécanisme de sécurité peut être contourné.
  • La version P4, présente sur les appareils à jour, utilise l'algorithme de Diffie-Hellman pour échanger une clé privée. Bien que l'algorithme soit robuste, la demande d'appariement n'est pas authentifiée et peut être initiée par un attaquant capable d'appuyer sur le bouton d'appariement. De plus, le bouton d'appariement est le même que celui utilisé par les utilisateurs légitimes pour allumer les feux de la trottinette, ce qui, selon les observations de Marco, active également le mode d'appariement pendant 17 secondes sans que cela soit manifeste pour l'utilisateur. Ainsi, un attaquant à proximité d'un utilisateur légitime n'a qu'à attendre que celui-ci allume les feux pour initier un appariement malveillant et prendre le contrôle total de la trottinette.

Informée de ces différentes vulnérabilités, Xiaomi a répondu ne pas être en mesure de reproduire les scénarios décrits et n'a donc pas implémenté les correctifs suggérés par Marco. Le chercheur a par la suite publié le projet E-Spoofer, ensemble d'outils permettant d'exploiter les différentes vulnérabilités découvertes.

Lien vers l'article de recherche: https://francozappa.github.io/publication/2023/espoofer/paper.pdf


Ubuntu Shiftfs: Unbalanced Unlock Exploitation Attempt (CVE-2023-2612)

Jean-Baptise Cayrou, expert en cybersécurité au sein de la société Synacktiv, nous a présenté sa recherche sur la sécurité du système de fichier shiftfs au sein du kernel Ubuntu Linux. À travers une analyse du code de ce module peu étudié, Jean-Baptiste nous a détaillé la découverte d'un bug et les tentatives d'exploitation de celui-ci.

Le choix de cibler shiftfs s'explique par son caractère peu exploré, laissant supposer la présence de vulnérabilités non découvertes.

Tout d'abord, Jean-Baptiste introduit la notion de namespaces, qui permet la mise en place de divers degrés d'isolation entre les différents processus d'un système. En particulier, les namespaces mount permettent d'isoler des points de montage d'un système de fichier. Divers types de systèmes de fichiers existent, mais ceux offrant la surface d'attaque la plus intéressante sont ceux pouvant être créés par un utilisateur non privilégié. Ceux-ci sont identifiables par la présence du flag FS_USERNS_MOUNT au niveau de leur définition dans le code source. Les namespaces de type shiftfs, uniquement disponibles sur les systèmes Ubuntu, présentent cette caractéristique et ont donc été ciblés pour la suite des recherches.

Le système de fichiers shiftfs est un système de fichier virtuel (VFS) agissant comme une interface vers un autre système de fichier, mais dont il modifie dynamiquement les permissions apparentes. Le code de la fonction shiftfs_create_object, permettant de créer des objets (fichiers, répertoires…) sur le système de fichiers sous-jacent, présente un switch portant sur le type d'objet à créer. Jean-Baptiste a observé que si le type d'objet spécifié n'était pas pris en charge par le système de fichiers sous-jacent, le résultat de ce processus entraînait la création d'un pointeur nul, déverrouillant ainsi le nœud inode parent. Or, le déverrouillage, opération inverse du verrouillage permettant d'éviter les accès concurrents en écriture, se manifeste par la décrémentation du compteur d'utilisation du fichier. Le bug découvert permet donc de le décrémenter de manière arbitraire et d'aboutir à la situation où un processus accède un fichier qui est effectivement supprimé, son compteur d'utilisation ayant atteint zéro.

Pour exploiter ce bug, il est donc nécessaire de trouver un système de fichier n'implémentant pas une des méthodes définies dans le code de shiftfs_create_object. Les systèmes de fichiers de type mqueue remplissent cette condition, n'implémentant notamment pas la méthode mkdir.

Bien que l'exploitation de cette faille soit théoriquement possible, elle implique notamment de remporter une véritable "course" (race condition) pour atteindre une situation de Use after free. Bien que l'exploitation complète n'ait pas été démontrée, notamment en raison des correctifs apportés au noyau Ubuntu qui ont rendu la vulnérabilité obsolète sur les systèmes à jour, Jean-Baptiste a prouvé sa faisabilité, mettant en lumière diverses méthodes efficaces pour maximiser ses chances de succès dans une situation de race condition.

Lien vers les slides de la présentation: https://www.synacktiv.com/sites/default/files/2023-11/ubuntu_shiftfs.pdf

Nathan Saucet & Paul Azoulai

Experts XMCO

Découvrir d'autres articles

  • Conférences

    Retour sur WestDataFestival 2024

    Lire l'article
  • Conférences

    DORA et la résilience opérationnelle des fournisseurs

    Lire l'article
  • Conférences

    Retour sur la Black Hat Europe 2023

    Lire l'article