Что защищает Lua от перезаписи буфера? - PullRequest
0 голосов
/ 23 сентября 2018

Я просматривал исходный код Lua.Я выяснил, где VM получает следующую инструкцию.Это первая строка макроса vmfetch:

#define vmfetch()       { \
  i = *(ci->u.l.savedpc++); \
  if (L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) \
    Protect(luaG_traceexec(L)); \
  ra = RA(i); /* WARNING: any stack reallocation invalidates 'ra' */ \
  lua_assert(base == ci->u.l.base); \
  lua_assert(base <= L->top && L->top < L->stack + L->stacksize); \
}

Однако мне не удалось найти код в vmfetch или в luaV_execute проверяет, является ли ci->u.l.savedpc++ действительным адресом.Что мешает Lua случайно выполнить данные по некоторому случайному адресу?

1 Ответ

0 голосов
/ 23 сентября 2018

Защита находится на этапе компиляции.Генерация байт-кода не будет создавать чанк без некоторого завершения в нем.

Разрешение пользователям добавлять скомпилированный lua без какого-либо «доверия» является уязвимостью.Такие игры, как WoW, которые позволяют пользователю lua принимать только исходный код, обеспечивая контроль над процессом компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...