|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
--- server/scripting/script.c 2010-02-21 19:35:39.000000000 +0100
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+++ server/scripting/script.c.old 2010-06-06 09:30:51.000000000 +0200
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
@@ -44,6 +44,48 @@
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
/**************************************************************************
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ Unsafe Lua builtin symbols that we to remove access to.
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ If Freeciv's Lua version changes, you have to check how the set of
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ unsafe functions and modules changes in the new version. Update the list of
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ loaded libraries in script_lualibs, then update the unsafe symbols blacklist
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ in script_unsafe_symbols.
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ Once the variables are updated for the new version, update the value of
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ SCRIPT_SECURE_LUA_VERSION
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ In general, unsafe is all functionality that gives access to:
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ * Reading files and running processes
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ * Loading lua files or libraries
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+**************************************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+#define SCRIPT_SECURE_LUA_VERSION 501
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+static const char *script_unsafe_symbols[] = {
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ "dofile",
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ "loadfile",
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ NULL
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+};
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+#if LUA_VERSION_NUM != SCRIPT_SECURE_LUA_VERSION
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+#warning "The script runtime's unsafe symbols information is not up to date."
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+#warning "This can be a big security hole!"
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+/**************************************************************************
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ Lua libraries to load (all default libraries, excluding operating system
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ and library loading modules). See linit.c in Lua 5.1 for the default list.
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+**************************************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+static luaL_Reg script_lualibs[] = {
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ /* Using default libraries excluding: package, io and os */
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ {"", luaopen_base},
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ {LUA_TABLIBNAME, luaopen_table},
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ {LUA_STRLIBNAME, luaopen_string},
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ {LUA_MATHLIBNAME, luaopen_math},
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ {LUA_DBLIBNAME, luaopen_debug},
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ {NULL, NULL}
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+};
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+/**************************************************************************
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
Report a lua error.
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
**************************************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
static int script_report(lua_State *L, int status, const char *code)
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
@@ -383,6 +425,31 @@
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
}
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
/**************************************************************************
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ Open lua libraries in the array of library definitions in llib.
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+**************************************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+static void script_openlibs(lua_State *L, const luaL_Reg *llib)
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+{
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ for (; llib->func; llib++) {
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ lua_pushcfunction(L, llib->func);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ lua_pushstring(L, llib->name);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ lua_call(L, 1, 0);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+}
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+/**************************************************************************
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ Remove global symbols from lua state L
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+**************************************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+static void script_blacklist(lua_State *L, const char *lsymbols[])
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+{
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ int i;
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ for (i = 0; lsymbols[i] != NULL; i++) {
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ lua_pushnil(L);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ lua_setglobal(L, lsymbols[i]);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+}
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+/**************************************************************************
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
Initialize the scripting state.
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
**************************************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
bool script_init(void)
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
@@ -393,7 +460,8 @@
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
return FALSE;
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
}
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
- luaL_openlibs(state);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ script_openlibs(state, script_lualibs);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
+ script_blacklist(state, script_unsafe_symbols);
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
|
|
![](https://seccdn.libravatar.org/avatar/1b825995274bd6886e20135350cc1a52b4673c16d26628aa9498e2111bee8601?s=16&d=retro) |
95118dc |
tolua_api_open(state);
|