
Docker-basiertes Labor zur Analyse und Ausnutzung von CVE-2023-4911 (Looney Tunables), einem Pufferüberlauf in glibc ld.so, der zu einer lokalen Privilegienausweitung führt. Enthält PoC, GDB-Analyse und Exploit-Entwicklungsumgebung.
Docker-basierte Laborumgebung zur Analyse der Buffer-Overflow-Schwachstelle (Local Privilege Escalation) im dynamischen Lader der GNU C Library (glibc) und zur Entwicklung von Exploits.
| Eintrag | Wert |
|---|---|
| CVE-Nummer | CVE-2023-4911 |
| Alias | Looney Tunables |
| Betroffene Versionen | GNU C Library (glibc) 2.34 ~ 2.38 |
| Verwundbare Version | Ubuntu 22.04 — libc6 2.35-0ubuntu3.3 und niedriger |
| Patch-Version | libc6 2.35-0ubuntu3.4 (USN-6404-1, 2023-10-04) |
| Typ | Buffer Overflow in ld.so |
| Auswirkung | Local Privilege Escalation (normaler Benutzer → root) |
| Entdecker | Qualys Security Research Team |
Der dynamische Lader der glibc (ld.so) parst beim Ausführen eines Programms die Umgebungsvariable GLIBC_TUNABLES.
Bei der Ausführung eines SUID-Binärprogramms wird __libc_enable_secure = 1 gesetzt, und ld.so betritt einen Codepfad, der diese Umgebungsvariable ungültig macht (nullify).
In diesem Prozess kommt es bei Eingaben im Format tunable1=tunable2=value aufgrund einer fehlerhaften Längenberechnung zu einem Buffer-Overflow.
일반 바이너리: __libc_enable_secure = 0 → nullify 코드 미진입 → 취약점 없음
SUID 바이너리: __libc_enable_secure = 1 → nullify 코드 진입 → 버퍼 오버플로우 발생
Exploit-Ablauf:
GLIBC_TUNABLES 오버플로우
↓
ld.so BSS 영역 link_map 포인터 덮어쓰기
↓
라이브러리 검색 경로를 evil_lib/ 경로로 변조
↓
evil.so 로드 → constructor 자동 실행
↓
setuid(0) + execve("/bin/bash") → root shell 획득
Diese Umgebung wurde über die reine PoC-Ausführung hinaus mit dem Ziel entworfen, die Funktionsweise der Schwachstelle direkt zu analysieren und den Exploit zu entwickeln.
ld.so und des Binärprogrammsresearcher) → Root-RechteerweiterungCVE-2023-4911/
├── Dockerfile # 취약 환경 이미지 정의 (Multi-stage 빌드)
├── run.sh # Docker 빌드/실행 관리 스크립트
├── check_environment.sh # 컨테이너 시작 시 환경 자동 검증
├── poc/
│ ├── exploit.py # 기본 PoC — crash(SIGSEGV) 확인용
│ ├── exploit_lpe.py # LPE 익스플로잇 — GDB 분석 후 완성
│ └── evil_lib/
│ ├── evil.c # root shell 실행하는 악성 공유 라이브러리
│ └── Makefile
└── test_targets/
├── test_suid.c # SUID 테스트 바이너리 소스
└── test_heap.c # 힙 할당 테스트 바이너리 소스
./run.sh build && ./run.sh run
Beim Start des Containers wird das Sudo-Passwort abgefragt.
비밀번호: password
# SIGSEGV 발생 여부 확인
python3 /workspace/poc/exploit.py --check-only
# 직접 트리거
GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA \
/workspace/test_targets/test_suid
# 컨테이너 내부 직접 분석
gdb -q /workspace/test_targets/test_suid
# 원격 디버깅 (gdbserver)
# 컨테이너 내부
gdbserver :1234 /workspace/test_targets/test_suid
# 로컬 호스트
gdb
(gdb) target remote localhost:1234
Nach Analyse von OVERFLOW_OFFSET und TARGET_ADDR mit GDB die Werte am Anfang von exploit_lpe.py aktualisieren und ausführen.
python3 /workspace/poc/exploit_lpe.py
# 취약 함수 위치
/workspace/glibc-source/elf/dl-tunables.c
# 주요 함수
__tunables_init() # 진입점
parse_tunables() # 오버플로우 발생 지점
tunables_strdup() # 버퍼 할당
# strace로 시스템 콜 추적
strace -e trace=mmap GLIBC_TUNABLES="..." /workspace/test_targets/test_suid
# GDB로 __tunables_init 분석
gdb /workspace/test_targets/test_suid
(gdb) break __tunables_init
(gdb) set environment GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA
(gdb) run
Diese Umgebung ist nur für Bildungs- und Sicherheitsforschungszwecke bestimmt.
--privileged-Modus ausgeführt, daher nur in isolierter Umgebung verwenden.| Befehl | Beschreibung |
|---|
./run.sh build | Docker-Image erstellen |
./run.sh run | Container im interaktiven Modus ausführen |
./run.sh analysis | Analysemodus ausführen |
./run.sh test | Schnelle Schwachstellenüberprüfung |
./run.sh clean | Images und Container bereinigen |
| Eintrag | Wert |
|---|
| Base-Image | ubuntu:jammy-20230916 (vor Patch) |
| glibc-Version | 2.35-0ubuntu3.3 (verwundbar) |
| ld.so-Version | 2.35-0ubuntu3.3 (verwundbar) |
| Analyse-Konto | researcher / password |
| glibc-Quellcode | /workspace/glibc-source (2.35) |
| Haupt-Port | 1234 (gdbserver) |
| Container-Optionen | --privileged, --pid=host |