
CVE-2026-43494 (PinTheft)에 대한 개념 증명(PoC): RDS zerocopy refcount 버그 + io_uring 고정 버퍼를 통한 Linux LPE → SUID 페이지 캐시 덮어쓰기. 승인된 연구 목적으로만 사용하십시오.
Proof of concept — uid=1000(raken) → uid=0(root) after ./sley on WSL2 (6.6.87.2-microsoft-standard-WSL2)
CVE-2026-43494(PinTheft)에 대한 단일 파일 PoC입니다. RDS zerocopy 참조 카운트 버그와 **io_uring 고정 버퍼(fixed buffers)**를 연결하여 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.13sudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# 또는 배포판에 해당하는 헤더 패키지
# 패치됨? (예시 — 배포판에 맞게 조정하세요)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS 사용 가능?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring 활성화?
cat /proc/sys/kernel/io_uring_disabled # 0이어야 함
gcc -O2 -Wall -Wextra -o sley sley.c
정적 링크(선택 사항, 최소 실습 이미지용):
gcc -O2 -static -o sley sley.c
./sley
모든 상태 출력은 stderr로 전달됩니다(ANSI 256색 UI, 진행 바, 단계별 로그). 단계별 로그와 UI를 표시하려면 터미널이 UTF-8과 트루컬러/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) |
| 원시(primitive) | 페이지 핀 실패 시 이중 put_page() → FOLL_PIN 참조 탈취 |
| 무기화(Weaponization) | 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 버퍼 등록 패턴에 대한 경고 설정 |