Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-40271 — CVE-2025-40271 MadEploits에 의해 수정됨 | Kitploit
도구/GitHubGitHub/madexploits/cve-2025-40271
Privilege EscalationVulnerability AnalysisExploitationPapers & ResearchLearning & EducationBinary Exploitation
GitHubmadexploits/cve-2025-40271

CVE-2025-40271

CVE-2025-40271 MadEploits에 의해 수정됨

저장소 보기
1122개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-40271 — proc_readdir_de() rb-tree UAF LPE

Linux 커널 proc 파일시스템의 로컬 권한 상승 취약점에 대한 개념 증명입니다. 이 버그는 RB_CLEAR_NODE() 없이 rb_erase()를 호출하여 proc_readdir_de()에서 발생하는 use-after-free로, 디렉터리 열거 중에 오래된 레드-블랙 트리 링크가 경쟁 조건에 노출됩니다.

저자: MadExploits

원본 취약점 연구 및 C PoC는 Aviral Srivastava (N-DAY RESEARCH)가 작성했습니다. 이 저장소에는 컴파일이 실용적이지 않은 환경을 위한 셸 포트(exploit.sh)가 포함되어 있습니다.


개요

필드세부사항
CVECVE-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

두 구현 모두 동일한 익스플로잇 흐름을 따릅니다:

  1. 사용자 + 네트워크 네임스페이스 진입 (net ns에서 CAP_NET_ADMIN 획득)
  2. veth 쌍 생성 → /proc/self/net/dev_snmp6/ 채우기
  3. 빠른 veth 삭제 + 힙 스프레이에 대해 getdents64() 경쟁
  4. 커널 포인터 모양의 d_ino 값을 통해 UAF 탐지
  5. 권한 상승 시도 (완전한 LPE는 커널 특정 KASLR 오프셋 필요)

요구 사항

공통

  • Linux x86_64
  • 권한 없는 사용자 네임스페이스 활성화:
    root@kitploit:~
    cat /proc/sys/kernel/unprivileged_userns_clone
    # must be 1
    
  • 루트가 아닌 사용자 (이미 루트이면 PoC 종료)

exploit.c

  • gcc 및 pthreads
  • 리눅스 헤더 (linux/netlink.h 등)
root@kitploit:~
gcc -o exploit exploit.c -lpthread

exploit.sh

  • bash
  • python3
  • ip (iproute2)
  • unshare (--map-root-user 지원이 있는 util-linux)

컴파일러 필요 없음.


사용법

셸 버전 (빠른 테스트 권장)

root@kitploit:~
chmod +x exploit.sh
./exploit.sh

C 버전

root@kitploit:~
gcc -o exploit exploit.c -lpthread
./exploit

예상 출력

취약한 커널 — UAF 트리거 (부분 성공):

root@kitploit:~
[+] 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

패치된 커널:

root@kitploit:~
[-] Kernel X.Y.Z — PATCHED
[*] Kernel is patched. Nothing to do.

익스플로잇 참고 사항

  • 힙 누출: 경쟁에서 이기면, d_ino가 x86_64 커널 포인터 패턴(0xffff000000000000)과 일치하는 값을 포함합니다. 이는 일반적으로 해제된 proc_dir_entry 데이터와 겹치는 msg_msg 헤더 m_list에서 비롯됩니다.
  • 완전한 LPE: modprobe_path를 덮어쓰려면 누출된 힙 주소와 커널 텍스트 베이스 간의 오프셋이 필요합니다. 이는 빌드별(KASLR)입니다. PoC는 UAF와 누출을 보여줍니다. 완전한 체인은 대상 커널 이미지에 대한 오프셋이 필요합니다.
  • 신뢰성: 성공은 스케줄러 타이밍에 달려 있습니다. PoC는 기본적으로 최대 30번의 경쟁 시도를 재시도합니다.

완화 방법

  • 패치된 커널로 업그레이드하십시오 (위 표 참조).
  • 사용자 네임스페이스가 필요하지 않으면 권한 없는 생성을 비활성화하십시오:
    root@kitploit:~
    sysctl -w kernel.unprivileged_userns_clone=0
    
  • CVE-2025-40271에 대한 공급업체 보안 업데이트를 적용하십시오.

면책 조항

이 프로젝트는 승인된 보안 연구, 교육 및 방어적 테스트용으로만 제공됩니다.

  • 직접 소유하거나 테스트할 명시적 서면 허가를 받은 시스템에서만 실행하십시오.
  • 제3자 시스템에 대한 무단 사용은 관련 법률을 위반할 수 있습니다.
  • 저자와 기여자는 이 코드의 오용에 대해 책임을 지지 않습니다.

크레딧

역할이름
저장소 작성자MadExploits
원본 CVE 연구 및 C PoCAviral Srivastava — N-DAY RESEARCH

라이선스

위험 부담은 사용자에게 있습니다. 어떠한 보증도 제공되지 않습니다.

도구 다운로드
수정 버전
5.10.x5.10.247+
6.1.x6.1.159+
6.6.x6.6.123+
6.12.x6.12.73+
6.18+6.18-rc6+
7.x+패치됨