0Pricing
Lua Academy · Leçon

Empêcher les sorties du bac à sable

Bloquez l’accès à la bibliothèque debug, les utilisations abusives de rawget/rawset et les fuites d’upvalues.

Empêcher les sorties du bac à sable est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Le problème des évasions

Même avec un environnement fondé sur une liste blanche, des attaquants ingénieux peuvent trouver des moyens d’accéder au véritable environnement global. Cette leçon présente les vecteurs d’évasion connus et explique comment les neutraliser.

Exploitation de la métatable des chaînes

Dans Lua, les chaînes possèdent une métatable partagée qui expose la bibliothèque de chaînes. Le code exécuté dans le bac à sable peut utiliser une chaîne pour obtenir une référence à string.rep, puis accéder à d’autres bibliothèques.

-- Escape vector (before patching):
local s = "hello"
local getenv = s.rep  -- reaches string library
-- Fix: use setmetatable on all sandboxed strings (not practical)
-- Better fix: override debug.getmetatable in the sandbox

Blocage via rawget/rawset

Si rawget se trouve dans le bac à sable, le code peut l’utiliser pour contourner les restrictions de __index et lire directement les véritables tables.

-- Fix: exclude rawget, rawset, rawequal, rawlen from the sandbox env

Accès à la bibliothèque debug

La bibliothèque debug peut lire et modifier n’importe quelle variable externe, y compris _ENV. Excluez-la entièrement du bac à sable.

Table package.loaded

Si require ou package est accessible, le code exécuté en bac à sable peut accéder aux modules déjà chargés, notamment os et io.

-- Fix: exclude require and package from the sandbox env

Coroutines et reprise

Une coroutine en bac à sable reprise par l'hôte pourrait être utilisée pour exfiltrer l'état. Utilisez coroutine.wrap avec précaution et ne reprenez pas des coroutines en bac à sable avec des privilèges élevés.

Parcours des valeurs externes

Sans la bibliothèque de débogage, le code en bac à sable ne peut pas parcourir les valeurs externes. Toutefois, si debug.getupvalue est inclus par inadvertance, il peut être utilisé pour atteindre _G.

__newindex sur safeEnv

Ajoutez un __newindex à la métatable de l'environnement du bac à sable afin d'empêcher le code en bac à sable de créer de nouvelles variables globales qui masqueraient celles qui sont sûres.

setmetatable(safeEnv, {
  __newindex = function(_, k, v)
    -- allow only whitelisted keys or reject
    error("Global assignment not allowed: " .. k)
  end
})

Proxy de la bibliothèque math

Au lieu de transmettre la véritable table math (qui partage une métatable avec la bibliothèque standard), créez-en une copie superficielle contenant uniquement les fonctions nécessaires.

Tests automatisés d'évasion

Maintenez une suite de tests de génération aléatoire qui essaie des schémas d'évasion connus contre votre bac à sable. Exécutez-la après chaque modification du code du bac à sable.

Défense en profondeur

Aucun bac à sable n'est parfait. Superposez les défenses : environnement restreint + limites d'instructions + limites de mémoire + isolation des processus au niveau de l'OS (sous-processus ou conteneur distinct).

Bac à sable au niveau de l'OS

Pour une sécurité maximale, exécutez Lua dans un sous-processus avec des restrictions au niveau de l'OS : seccomp (Linux), App Sandbox (macOS) ou Docker avec un système de fichiers en lecture seule.

Question sur l'évasion du bac à sable

Pourquoi faut-il exclure rawget d'un bac à sable ?

Récapitulatif : empêcher les évasions du bac à sable

Excluez debug, rawget/rawset, package, require et load du bac à sable. Protégez l'environnement du bac à sable avec __newindex. Copiez les tables des bibliothèques au lieu de référencer les originales. Ajoutez une isolation au niveau de l'OS pour une sécurité maximale.

Questions Fréquemment Posées

La leçon « Empêcher les sorties du bac à sable » est-elle gratuite ?

Oui — le texte complet de « Empêcher les sorties du bac à sable » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Empêcher les sorties du bac à sable » ?

Bloquez l’accès à la bibliothèque debug, les utilisations abusives de rawget/rawset et les fuites d’upvalues. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Empêcher les sorties du bac à sable » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le modèle _ENV de Lua 5.2+
  2. Construire un bac à sable restreint
  3. Empêcher les sorties du bac à sable
  4. Limites de ressources et instrumentation
← Retour à Lua Academy