
Redis 8.2.1 Lua 파서 use-after-free에 대한 개념 증명 익스플로잇으로, 조작된 loadstring 호출을 통해 가비지 컬렉션을 경합시켜 원격 코드 실행을 달성합니다.
Lua 청크 이름 GC 경쟁으로 인해 Redis 8.2.1에서 use-after-free 및 원격 코드 실행이 발생합니다.
Redis는 스크립팅을 위해 Lua 5.1을 내장합니다. 8.2.1 이하 버전에서 luaY_parser 함수는 렉서를 호출하기 전에 청크 이름 문자열을 Lua 스택에 고정(anchor)하지 않습니다. 악의적으로 조작된 스크립트는 파서가 해제된 문자열을 여전히 참조하는 동안 가비지 컬렉션을 트리거할 수 있으며, 이로 인해 UAF가 발생하여 네이티브 코드 실행으로 이어집니다.
redis-cliCVE-2025-49844.lua – 파서에 수천 개의 loadstring 호출과 GC가 활성화된 청크 이름을 주입하여 레이스를 이깁니다.while redis-cli -h localhost -p 6379 --eval CVE-2025-49844.lua >/dev/null; do
printf '.'
done
예상 결과:
취약한 빌드에서는 결국 Redis 프로세스가 충돌하거나 연결이 끊어집니다. 패치된 8.2.2(d5728cb5795c966c5b5b1e0f0ac576a7e69af539 커밋)는 청크 이름을 고정하므로 스크립트는 무해하게 실행됩니다.
Redis 8.2.2 이상으로 업그레이드하거나 신뢰할 수 없는 사용자에게 Lua 스크립팅을 비활성화합니다.