
CVE-2025-40271 MadEploits에 의해 수정됨
Linux 커널 proc 파일시스템의 로컬 권한 상승 취약점에 대한 개념 증명입니다. 이 버그는 RB_CLEAR_NODE() 없이 rb_erase()를 호출하여 proc_readdir_de()에서 발생하는 use-after-free로, 디렉터리 열거 중에 오래된 레드-블랙 트리 링크가 경쟁 조건에 노출됩니다.
저자: MadExploits
원본 취약점 연구 및 C PoC는 Aviral Srivastava (N-DAY RESEARCH)가 작성했습니다. 이 저장소에는 컴파일이 실용적이지 않은 환경을 위한 셸 포트(
exploit.sh)가 포함되어 있습니다.
| 필드 | 세부사항 |
|---|---|
| CVE | CVE-2025-40271 |
| 구성 요소 | fs/proc — proc_readdir_de() / remove_proc_entry() |
| 유형 | Use-after-free (rb-tree 오래된 링크) |
| 영향 | 로컬 권한 상승 (LPE) |
| 아키텍처 | x86_64 |
| 영향받는 버전 | Linux kernels through 6.18-rc5 |
proc 디렉터리 항목이 제거될 때, 해당 항목의 rb-노드에 대해 rb_erase()가 RB_CLEAR_NODE() 없이 호출됩니다. 해제된 노드는 오래된 트리 링크를 통해 접근 가능한 상태로 남을 수 있습니다. /proc/self/net/dev_snmp6/ 아래에서 인터페이스 제거와 getdents64()가 경쟁 조건을 일으키면, 커널은 해제된 메모리(종종 스프레이된 msg_msg 객체가 회수한 메모리)를 읽어 커널 힙 포인터를 누출하는 비정상적인 d_ino 값을 반환할 수 있습니다.
PoC는 실행 중인 커널 버전을 확인하고 패치된 빌드에서는 종료됩니다.
| 브랜치 |
|---|
| 파일 | 설명 |
|---|---|
exploit.c | 완전한 C PoC — netlink veth 관리, pthread 경쟁, msg_msg 스프레이 |
exploit.sh | 컴파일 불필요 셸 포트 — unshare, ip, 시스템 콜/경쟁을 위한 내장 Python 3 |
두 구현 모두 동일한 익스플로잇 흐름을 따릅니다:
CAP_NET_ADMIN 획득)/proc/self/net/dev_snmp6/ 채우기getdents64() 경쟁d_ino 값을 통해 UAF 탐지cat /proc/sys/kernel/unprivileged_userns_clone
# must be 1
exploit.cgcc 및 pthreadslinux/netlink.h 등)gcc -o exploit exploit.c -lpthread
exploit.shbashpython3ip (iproute2)unshare (--map-root-user 지원이 있는 util-linux)컴파일러 필요 없음.
chmod +x exploit.sh
./exploit.sh
gcc -o exploit exploit.c -lpthread
./exploit
취약한 커널 — UAF 트리거 (부분 성공):
[+] Kernel X.Y.Z — VULNERABLE
[+] Namespace ready...
[+] Created 32 veth pairs (/proc/self/net/dev_snmp6 populated)
[+] UAF HIT! d_ino=0xffff8880........ (kernel heap pointer)
[+] Kernel heap leak: 0xffff8880........
[*] PARTIAL SUCCESS: UAF + heap leak DEMONSTRATED
패치된 커널:
[-] Kernel X.Y.Z — PATCHED
[*] Kernel is patched. Nothing to do.
d_ino가 x86_64 커널 포인터 패턴(0xffff000000000000)과 일치하는 값을 포함합니다. 이는 일반적으로 해제된 proc_dir_entry 데이터와 겹치는 msg_msg 헤더 m_list에서 비롯됩니다.modprobe_path를 덮어쓰려면 누출된 힙 주소와 커널 텍스트 베이스 간의 오프셋이 필요합니다. 이는 빌드별(KASLR)입니다. PoC는 UAF와 누출을 보여줍니다. 완전한 체인은 대상 커널 이미지에 대한 오프셋이 필요합니다.sysctl -w kernel.unprivileged_userns_clone=0
이 프로젝트는 승인된 보안 연구, 교육 및 방어적 테스트용으로만 제공됩니다.
| 역할 | 이름 |
|---|---|
| 저장소 작성자 | MadExploits |
| 원본 CVE 연구 및 C PoC | Aviral Srivastava — N-DAY RESEARCH |
위험 부담은 사용자에게 있습니다. 어떠한 보증도 제공되지 않습니다.
| 수정 버전 |
|---|
| 5.10.x | 5.10.247+ |
| 6.1.x | 6.1.159+ |
| 6.6.x | 6.6.123+ |
| 6.12.x | 6.12.73+ |
| 6.18+ | 6.18-rc6+ |
| 7.x+ | 패치됨 |