diff --git a/src/main/java/dev/amble/lib/script/AbstractScriptManager.java b/src/main/java/dev/amble/lib/script/AbstractScriptManager.java index a683a66..953ee11 100644 --- a/src/main/java/dev/amble/lib/script/AbstractScriptManager.java +++ b/src/main/java/dev/amble/lib/script/AbstractScriptManager.java @@ -3,13 +3,13 @@ import dev.amble.lib.AmbleKit; import dev.amble.lib.script.lua.LuaBinder; import dev.amble.lib.script.lua.MinecraftData; +import dev.amble.lib.script.lua.SandboxedGlobals; import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; import net.minecraft.resource.Resource; import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; -import org.luaj.vm2.lib.jse.JsePlatform; import java.io.InputStreamReader; import java.util.HashMap; @@ -72,7 +72,8 @@ public LuaScript load(Identifier id, ResourceManager manager) { return cache.computeIfAbsent(id, key -> { try { Resource res = manager.getResource(key).orElseThrow(); - Globals globals = JsePlatform.standardGlobals(); + // Use sandboxed globals to prevent access to dangerous APIs like luajava + Globals globals = SandboxedGlobals.create(); // Create and cache the minecraft data for this script MinecraftData data = createMinecraftData(); @@ -89,7 +90,7 @@ public LuaScript load(Identifier id, ResourceManager manager) { ); chunk.call(); - LuaScript script = new LuaScript(globals); + LuaScript script = new LuaScript(globals); // Call onRegister when script is first loaded into the manager if (script.onRegister() != null && !script.onRegister().isnil()) { diff --git a/src/main/java/dev/amble/lib/script/lua/LuaBinder.java b/src/main/java/dev/amble/lib/script/lua/LuaBinder.java index daa93e4..58d4e10 100644 --- a/src/main/java/dev/amble/lib/script/lua/LuaBinder.java +++ b/src/main/java/dev/amble/lib/script/lua/LuaBinder.java @@ -343,6 +343,7 @@ public Varargs invoke(Varargs args) { } meta.set("__index", index); + return meta; } } diff --git a/src/main/java/dev/amble/lib/script/lua/SandboxedGlobals.java b/src/main/java/dev/amble/lib/script/lua/SandboxedGlobals.java new file mode 100644 index 0000000..c8617fe --- /dev/null +++ b/src/main/java/dev/amble/lib/script/lua/SandboxedGlobals.java @@ -0,0 +1,79 @@ +package dev.amble.lib.script.lua; + +import org.luaj.vm2.Globals; +import org.luaj.vm2.LoadState; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.compiler.LuaC; +import org.luaj.vm2.lib.BaseLib; +import org.luaj.vm2.lib.Bit32Lib; +import org.luaj.vm2.lib.StringLib; +import org.luaj.vm2.lib.TableLib; +import org.luaj.vm2.lib.jse.JseMathLib; + +/** + * Creates a sandboxed Lua environment that prevents access to dangerous APIs. + *
+ * This specifically excludes: + *