Retour à la leçon
Mission

Mission : le mini-jeu communautaire qui s'échappe du sandbox

Identifier une fuite critique de sandbox via la bibliothèque debug, et construire une protection à la fois contre l'évasion et contre une boucle infinie.

Contexte

Un serveur de mini-jeux communautaires construit ce sandbox pour exécuter les scripts des joueurs :

lua
local function playerSandbox()
  return {
    print = print, pairs = pairs, ipairs = ipairs,
    math = math, string = string, table = table,
    debug = debug,   -- ajouté "pour permettre le débogage des scripts joueurs"
  }
end

Un joueur malveillant soumet un script de mini-jeu qui utilise debug.getupvalue pour remonter jusqu'à l'environnement global réel du serveur et modifier des variables internes du moteur, complètement en dehors du sandbox prévu. Un autre joueur soumet un script contenant while true do end, qui gèle le mini-jeu pour tout le monde.