
CVE-2026-43494 (PinTheft)용 개념 증명(PoC): RDS zerocopy refcount 버그 + io_uring 고정 버퍼를 통한 Linux LPE → SUID 페이지 캐시 덮어쓰기. 승인된 연구 목적으로만 사용하십시오.
개념 증명 — 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를 통해 SUID 바이너리가 주입된 스텁을 root로 실행합니다.CONFIG_RDS=y 및 CONFIG_RDS_TCP=yCONFIG_IO_URING=y 및 kernel.io_uring_disabled = 0rds / rds_tcp 모듈이 로드되어 있어야 함(또는 권한 없는 사용자가 자동 로드할 수 있어야 함)IORING_REGISTER_CLONE_BUFFERS API에는 커널 ≥ 6.13 필요sudo 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
이 소프트웨어는 연구 및 교육 목적으로 있는 그대로 제공됩니다. 소유하지 않은 시스템을 테스트하기 전에 관련 법률을 준수하고 서면 승인을 받는 것은 전적으로 사용자의 책임입니다.
MIT — 추가된 경우 저장소 라이선스 파일을 참조하세요. 책임감 있게 사용하세요.
| 항목 | 세부 정보 |
|---|
| CVE | CVE-2026-43494 |
| 공개 이름 | PinTheft |
| 구성 요소 | net/rds — zerocopy 전송 경로 (rds_message_zcopy_from_user) |
| 프리미티브 | 페이지 핀 실패 시 put_page() 이중 호출 → FOLL_PIN 참조 탈취 |
| 무기화 | io_uring 고정 버퍼 + RDS 실패 zerocopy → 페이지 캐시 UAF 쓰기 |
| 영향 | 취약한 구성에서 로컬 root 권한 획득 |
| 업스트림 수정 | e17492979319 |
| 조치 | 비고 |
|---|
| 커널 패치 | 커밋 e17492979319를 포함한 안정 버전 수정 적용 |
| RDS 비활성화 | 필요하지 않다면 modprobe -r rds_tcp rds 실행(및 자동 로드 차단) |
| io_uring 제한 | sysctl로 kernel.io_uring_disabled=1 또는 2 설정 |
| 최소 권한 | 불필요한 SUID 바이너리 제거, 강화된 프로파일의 컨테이너 사용 |
| 모니터링 | 대량의 RDS zerocopy 실패 및 io_uring 버퍼 등록 패턴에 대한 알림 설정 |