
CVE-2026-43494(PinTheft)에 대한 개념 증명: RDS zerocopy 참조 카운트 버그와 io_uring 고정 버퍼를 악용하여 SUID 바이너리 페이지 캐시를 덮어쓰는 Linux 커널 로컬 권한 상승.
개념 증명 — WSL2(6.6.87.2-microsoft-standard-WSL2)에서 ./sley 실행 후 uid=1000(raken) → uid=0(root)
CVE-2026-43494(PinTheft)를 위한 단일 파일 개념 증명(PoC)입니다. RDS zerocopy 참조 카운트 버그와 io_uring 고정 버퍼를 연쇄적으로 사용하여 SUID-root 바이너리의 페이지 캐시를 덮어쓰는 Linux 커널 로컬 권한 상승입니다.
면책 조항: 이 저장소는 승인된 보안 연구, 교육 및 방어적 테스트 전용입니다. 소유하지 않았거나 테스트에 대한 명시적 허가가 없는 시스템에 대해 이 도구를 실행하는 것은 불법이며 비윤리적입니다. 저자는 오용에 대한 책임을 지지 않습니다.
최초 공개 연구와 PoC는 V12 Security 팀(Aaron Esau)이 발표했습니다. SLEY는 실험실 사용 및 학습을 위한 스타일링된 터미널 UI를 갖춘 독립적이고 간결한 재구현입니다.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]su, mount, passwd, …)를 찾습니다.FOLL_PIN 바이어스 ≈ 1024).execve하면 삽입된 스텁이 root로 실행됩니다.CONFIG_RDS=y 및 CONFIG_RDS_TCP=yCONFIG_IO_URING=y 및 kernel.io_uring_disabled = 0rds / rds_tcp 모듈이 로드되어 있거나(권한 없는 사용자가 자동 로드 가능)IORING_REGISTER_CLONE_BUFFERS API를 위한 커널 ≥ 6.13sudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
정적 링크(선택 사항, 최소 실험실 이미지용):
gcc -O2 -static -o sley sley.c
./sley
모든 상태 출력은 stderr로 전송됩니다(ANSI 256색 UI, 진행률 표시줄, 단계별 로깅). 터미널이 상자 그리기 UI를 지원하려면 UTF-8 및 truecolor/256색을 지원해야 합니다.
단계 예시:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
성공적으로 익스플로잇되는 구성에서는 체인이 완료되고 첫 페이지가 덮어써진 발견된 SUID 바이너리로 넘어갑니다. 경쟁 조건과 커널 상태가 맞아떨어지면 root 셸을 얻습니다.
패치된 커널, 강화된 호스트, 또는 RDS/io_uring이 없는 환경에서는 PoC가 조기에 실패합니다(SUID 대상 없음, mmap/io_uring/socket 오류 등).
배포판별 보안 권고에서 백포트된 패치를 제공할 수 있으므로 벤더의 커널 보안 큐를 추적하세요.
.
├── README.md # This file
├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root)
├── sley.c # Single-file PoC + terminal UI
└── .gitignore
이 소프트웨어는 연구 및 교육 목적으로 있는 그대로(as-is) 제공됩니다. 소유하지 않은 시스템을 테스트하기 전에 관련 법률을 준수하고 서면 승인을 받을 책임은 사용자에게 있습니다.
MIT — 추가된 경우 저장소의 라이선스 파일을 참조하세요. 책임감 있게 사용하십시오.
| 항목 | 세부 정보 |
|---|
| CVE | CVE-2026-43494 |
| 공개 이름 | PinTheft |
| 구성 요소 | net/rds — zerocopy 전송 경로(rds_message_zcopy_from_user) |
| 프리미티브 | 페이지 핀 실패 시 put_page() 이중 호출 → FOLL_PIN 참조 탈취 |
| 무기화 | io_uring 고정 버퍼 + 실패하는 RDS zerocopy → 페이지 캐시 UAF 쓰기 |
| 영향 | 취약한 구성에서 로컬 루트 |
| 업스트림 패치 | e17492979319 |
| 조치 | 참고 |
|---|
| 커널 패치 | 커밋 e17492979319를 포함하는 안정 버전 패치 적용 |
| RDS 비활성화 | 필요하지 않은 경우 modprobe -r rds_tcp rds(및 자동 로드 차단) |
| io_uring 제한 | sysctl로 kernel.io_uring_disabled=1 또는 2 설정 |
| 최소 권한 | 불필요한 SUID 바이너리 제거; 강화된 프로파일의 컨테이너 사용 |
| 모니터링 | RDS zerocopy 실패 폭증 + io_uring 버퍼 등록 패턴에 대한 알림 |