2 points par GN⁺ 2024-06-30 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Analyse de la vulnérabilité de sécurité Lua de Factorio

Qu'est-ce que Factorio ?

  • Factorio est un jeu dans lequel on automatise des usines pour fabriquer une fusée et s'échapper d'une planète
  • Plus de 3 500 000 exemplaires du jeu ont été vendus, ce qui en fait une cible attrayante pour les chercheurs en sécurité

Comment Lua est utilisé dans le jeu

  • Lua est utilisé pour implémenter la logique du jeu, ainsi que pour créer des mods et des cartes personnalisées
  • La communauté du modding est très active, avec des milliers de mods disponibles
  • Le mod Alien Biomes a enregistré 551K téléchargements

Exposition réseau de l'interpréteur Lua

  • Le mode multijoueur de Factorio utilise un lockstep déterministe pour synchroniser les clients
  • Lorsqu'un joueur exécute du code Lua, les autres joueurs doivent également exécuter le même code
  • Cela ouvre la possibilité d'exécuter du code Lua malveillant via le réseau

Chemin d'exploitation habituel

  • Héberger un serveur Factorio qui fournit une carte malveillante
  • Quand un client se connecte au serveur, il télécharge la carte et exécute le code Lua
  • Exploiter une faiblesse de l'implémentation Lua pour créer de faux objets
  • Modifier le comportement du programme par fuite/corruption mémoire
  • Utiliser ces primitives puissantes pour obtenir une exécution de code

Les risques du bytecode Lua

  • Lua est un langage interprété : le code écrit n'est pas exécuté directement, il est compilé en bytecode
  • Si le bytecode peut être exécuté directement, un bytecode malformé peut être utilisé pour provoquer des fuites ou des corruptions mémoire

Validateur de bytecode

  • Les développeurs de Lua avaient implémenté un validateur de bytecode pour protéger l'interpréteur contre le bytecode malveillant, mais comme des contournements ont été découverts à répétition, il a été supprimé dans Lua 5.2
  • Les développeurs de Factorio ont implémenté leur propre validateur de bytecode, mais il n'est pas parfait en raison de certains problèmes off-by-one

Création de faux objets

  • En créant de faux objets, il devient possible d'exploiter toutes les fonctionnalités de l'interpréteur
  • Les chaînes peuvent servir à divulguer des données arbitraires, et les tableaux à écrire dans une mémoire arbitraire
  • S'il est possible d'appeler des fonctions natives, on peut contrôler le flux d'exécution

Fuite d'adresses

  • La fonction print de Lua peut divulguer des adresses
  • Comme elle a été supprimée dans Factorio, une méthode de fuite d'adresses reposant sur une confusion de types est utilisée

Comprendre les TValues

  • Lua est un langage dynamique, donc le type des variables peut changer à l'exécution
  • En interne, Lua utilise la structure TValue pour représenter les objets
  • TValue possède les propriétés type (tt_) et valeur (value_)

Confusion de types avec FORLOOP

  • L'opcode FORLOOP peut provoquer une confusion de types en considérant la valeur initiale de la boucle comme un nombre
  • Cela permet de divulguer des adresses

Double précision IEEE 754

  • La double précision est composée d'un signe, d'un exposant et d'une mantisse
  • Lua ne représente pas les entiers, ce qui permet de divulguer des adresses jusqu'à 53 bits sans perte de précision

Recherche de faux objets

  • En comprenant les upvalues et les closures, il est possible de rechercher de faux objets
  • Les upvalues permettent d'accéder aux variables d'une fonction externe
  • En modifiant le bytecode pour changer l'index d'une upvalue, il est possible de rechercher de faux objets

L'avis de GN⁺

  • Cet article est très utile pour comprendre les vulnérabilités de sécurité des langages dynamiques
  • Il explique bien les problèmes de sécurité qui peuvent survenir dans un jeu populaire comme Factorio
  • Des vulnérabilités similaires peuvent aussi exister dans d'autres projets utilisant des langages comme Lua
  • Lorsqu'on adopte une nouvelle technologie ou un projet open source, une revue de sécurité est indispensable
  • Parmi les autres projets dotés de fonctionnalités similaires, on peut citer le système de modding de Minecraft

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.