내용 요약
Redis 7.x에 CVE‑2025‑49844 (RediShell) 라는 CVSS 10.0 등급의 심각한 UAF(Use‑After‑Free) 취약점이 발견되었습니다.
루아(Lua) 스크립트 내 가비지 컬렉터를 조작해 메모리 손상을 일으키면, Lua 샌드박스 탈출이 가능해 호스트 OS에서 임의 코드를 실행할 수 있습니다.
핵심 포인트
- RediShell은 루아 가비지 컬렉터의 UAF 결함을 이용해 샌드박스를 탈출, 외부 코드 실행을 가능케 합니다.
- 공격 벡터는 인증된 사용자(또는 내부 사용자)이며, Lua 스크립트를 통해 악의적인 객체를 조작합니다.
- 완전한 패치는 Redis 7.2.1+로 업그레이드하거나, Lua 기능을 비활성화하고, 네트워크 격리 및 모니터링을 강화하는 것이 핵심 방어 수단입니다.
기술 세부 내용
1️⃣ Redis
- 개요
- 오픈소스 인메모리 데이터베이스, key‑value 저장소, 캐시, 메시지 브로커 역할.
- 단일 스레드 모델과 이벤트 루프를 사용해 고성능과 낮은 지연을 제공.
redis-server와redis-cli가 기본 실행 엔진과 CLI 도구이며, Redis 7.x 버전에서 루아(Lua) 스크립트 기능을 강화했습니다.
- 핵심 아키텍처
- Event‑Driven I/O – epoll/kqueue를 통해 비동기 I/O 처리.
- Command Dispatch – 클라이언트 요청을 파싱해 내부 함수 포인터로 라우팅.
- Lua VM –
Lua 5.1기반으로,redis.call,redis.pcall,redis.log등 API를 제공. - Sandbox – Lua 실행 시
redis.limits에 의해 메모리/시간 제한을 적용, 외부 시스템 호출을 차단.
- 보안 포인트
- 인증/인가(ACL), TLS 암호화, 방화벽 규칙 등으로 접근을 제어.
protected-mode가 활성화되면 기본적으로 외부 접속을 차단합니다.
2️⃣ Lua 스크립트와 샌드박스
- Lua 스크립트
EVAL,EVALSHA명령어를 통해 서버에서 직접 Lua 코드를 실행.- API:
redis.call,redis.pcall,redis.log,redis.error_reply,redis.error_reply등. - Lua VM은 C 코드를 호출해 Redis 내부 구조에 접근하지만, 직접 OS 호출은 제한됩니다.
- 샌드박스 구현
lua_setfield등을 통해redis테이블을 노출, 그러나os모듈, 파일 I/O는 비활성화.- 메모리 사용량과 실행 시간 제한은
redis.conf의lua-time-limit과lua-memory-limit로 제어. - 핵심: 샌드박스는 Lua VM 내부와 외부 OS 간에 저장된 함수 포인터(callback)를 사용해 제한을 구현합니다.
- 샌드박스 탈출 가능성
- UAF: 객체가 메모리에서 해제된 뒤 여전히 참조가 남아 있을 때, 새로운 객체가 같은 메모리 영역에 할당되어 원래 객체의 데이터가 노출/오버라이트될 수 있습니다.
- Lua 스크립트에서 가비지 컬렉터를 트리거하고, 특정 객체를 불안정하게 재활용하도록 조작하면 원래의 메모리 블록에 접근할 수 있습니다.
3️⃣ CVE‑2025‑49844 (RediShell) – Use‑After‑Free
- 취약점 개요
- Vulnerability: Redis 7.x의 Lua 가비지 컬렉터 구현에서 특정 객체가
free()된 뒤에도 포인터가 남아 있습니다. - Trigger: 악의적 Lua 스크립트가
pcall,call을 반복적으로 사용해 메모리 상태를 교란시킵니다. - Impact: 공격자는 원래의 Lua 스크립트 객체를 다른 데이터(예:
client객체)로 덮어쓰거나 불법적인 포인터를 통해 OS 호출을 유도합니다.
- Vulnerability: Redis 7.x의 Lua 가비지 컬렉터 구현에서 특정 객체가
- 공격 흐름
- 인증 – Redis 서버에 연결(ACL/비밀번호)
- 스마트 스크립트 – 특정 루아 함수(
redis.call,redis.pcall)를 반복해 GC 트리거 - 메모리 상태 교란 –
free()후 새 객체를 같은 메모리 영역에 할당 - UAF 발생 – 기존 객체 포인터를 새 객체에 덮어쓰기
- 샌드박스 탈출 – 새 객체가 내부 C 함수 포인터(예:
system())를 호출, 임의 명령어 실행
- 취약점 탐지
- Redis 7.x의
redis-server -v로 버전 확인 lua-debug모듈(3rd‑party)에서 GC 트리거 로그 확인- 모니터링:
INFO stats에서used_memory_peak과gc_cycles변화 추적
- Redis 7.x의
- 위험 수준
- CVSS 10.0: 완전한 Zero‑Day 취약점으로, 인증된 사용자라도 완전 제어 가능
- 외부 공격은 인증이 필요하지만, 내부 공격(관리자 계정)에서는 더 심각
4️⃣ 방어 및 대응 전략
| 단계 | 조치 | 상세 |
|---|---|---|
| 즉각 | Redis 업그레이드 | 7.2.1(또는 최신)로 패치: UAF 버그 수정 |
| 장기 | Lua 비활성화 | redis.conf: lua-time-limit 0, lua-memory-limit 0 또는 rename-command EVAL "" |
| 네트워크 | 내부망 격리 | Redis 인스턴스를 내부 서브넷에 배치, 외부 접근 차단 (ACL, 방화벽) |
| 모니터링 | 이상 징후 탐지 | INFO stats → used_memory_peak, clients_connected → 로그 알림 |
| 정책 | 최소 권한 | ACL 설정: user <name> on >password +@all -dangerous-command |
| 보안 테스트 | 취약점 스캔 | Redscan, Qualys, Nessus 등에서 CVE‑2025‑49844 검증 |
- 구체적 패치 내용
- 가비지 컬렉터에서
sdsFree호출 후 포인터를 NULL로 초기화. robj객체의refcount관리 방식을 개선해 UAF 방지.- Lua VM 내부에서 메모리 할당 시
red->client포인터를 검증하는 체크 추가.
- 가비지 컬렉터에서
5️⃣ 실무 예시: RediShell 대응 워크플로우
- 감지
redis-cli INFO→redis_version:7.1.5→ 패치 필요redis-cli CONFIG GET lua*→lua-time-limit 1000(기본값)
- 패치
- Debian/Ubuntu:
apt-get install --only-upgrade redis-server - CentOS/RHEL:
yum update redis - Docker:
docker pull redis:7.2.1
- Debian/Ubuntu:
- 검증
redis-cli EVAL "return 1" 0→ 정상 동작 확인redis-cli EVAL "redis.call('EVAL', 'return 1', 0)" 0→ UAF 발생 여부 테스트
- 운영
redis.conf:protected-mode yes,requirepass설정ACL SETUSER default off +@all→ 비활성화된 기본 사용자
- 보고
- 보안팀에 CVE‑2025‑49844 대응 문서 공유
- 고객에게 보안 패치 권고 및 업데이트 가이드 제공
6️⃣ 보안 모범 사례 정리
- 최소 권한 원칙: Redis ACL로 필요한 명령어만 허용.
- 보안 업데이트 주기: 주 2회 이상,
apt/yum자동 업데이트 설정. - 배포 자동화: Ansible/Helm 차트에 패치 적용 스크립트 포함.
- 백업 및 복구:
RDB/AOF파일을 정기적으로 암호화 백업. - 외부 접근 제한:
iptables,cloud security groups에서6379포트 차단, VPN 사용.
마무리
RediShell은 Redis의 핵심 기능 중 하나인 Lua 스크립트를 악용한 UAF 취약점으로, 샌드박스 탈출과 임의 코드 실행을 가능케 합니다. 즉시 Redis를 최신 버전으로 업그레이드하고, 필요 시 Lua 스크립트 기능을 비활성화하며, 네트워크 격리와 모니터링을 강화해 보안 리스크를 최소화하십시오. 꾸준한 패치 관리와 보안 정책 적용이 핵심입니다.
출처: https://www.dailysecu.com/news/articleView.html?idxno=201210
728x90
반응형
'보안이슈' 카테고리의 다른 글
| [보안뉴스]잇단 통신사 해킹에 불안...통신분쟁조정 신청 늘고 있다 (0) | 2025.10.10 |
|---|---|
| [보안뉴스]송경희 제3대 개인정보위원장 “신뢰기반 AI 혁신 최선 다할 것”...취임식 개최 (0) | 2025.10.10 |
| [보안뉴스]레디스 DB 치명적 취약점 발견...해커, 원격 코드 실행 공격 가능 (0) | 2025.10.08 |
| [KRCERT]Oracle 제품 보안 업데이트 권고 (0) | 2025.10.08 |
| [데일리시큐]CISA, 오라클 EBS 제로데이 포함한 7건의 이미 공격에 악용된 취약점 공개…긴급 패치 필요 (0) | 2025.10.08 |