본문 바로가기
CVE 취약점

PinTheft (CVE-2026-43494)

by HackingPractice 2026. 5. 24.
반응형

반응형

1. PinTheft 이란?

‘PinTheft’라는 새로운 리눅스 로컬 권한 상승 취약점이 발견되었습니다. 이 취약점은 커널 RDS(Reliable Datagram Sockets) 제로카피 전송 경로에 존재하는 참조 카운트(refcount) 버그 io_uring을 연쇄적으로 악용하여 메모리 내의 SUID 루트 바이너리를 덮어씁니다. 그 결과, 권한이 없는 로컬 계정에서도 루트 셸을 획득할 수 있습니다.


2. 기술적 분석

1️⃣ RDS (Reliable Datagram Sockets) — 버그의 발원지

RDS zerocopy 전송 경로에 버그가 있습니다. rds_message_zcopy_from_user() 함수는 유저 페이지를 하나씩 pin(고정)하는데, 중간에 페이지 오류가 나면 이미 pin한 페이지들을 해제합니다. 그런데 이후 RDS 메시지 정리 단계에서 scatterlist 항목들이 살아있어서 같은 페이지를 또 해제해버립니다 (Double Free).

2️⃣ io_uring — 공격의 증폭기

실패한 zerocopy 전송마다 첫 번째 pin된 페이지에서 FOLL_PIN 참조를 하나씩 훔칩니다. 이 과정은 미묘하고 결정론적이라 레이스 컨디션 없이 안정적으로 동작합니다.

이걸 반복하면 → 페이지 캐시 조작  SUID root 바이너리를 메모리에서 덮어쓰기  root 셸 획득


3. 공격 시연

Step 1) 리눅스 커널 7.0.3 환경에서 주요 취약점 발생 지점인 'RDS 모듈'과 'io_uring' 기능이 활성화되어 있는지 확인

 

Step 2) mount 명령어로 임시 쓰기 공간을 2GB로 늘리고 df 명령어로 루트 파일 시스템 용량을 확인합니다.

 

Step 3) git과 커널 코드 컴파일을 위한 빌드 베이스(base-devel), 커널 헤더(linux-headers) 패키지를 설치합니다.

 

Step 4) 일반 사용자 계정 white를 생성합니다.

 

Step 5) [Ctrl + Alt + F2]를 눌러 생성한 사용자 계정 white로 로그인합니다.

 

Step 6) PoC 공격 코드를 다운로드합니다.

 

Step 7) pintheft 디렉터리로 이동 후 poc.c 코드를 컴파일을 합니다.

 

Step 8) 페이지 캐시 오염을 통해 권한 상승(LPE)에 완전히 성공하여 root 권한을 획득을 할 수 있습니다.

 

Step 9) 공격 시연 영상입니다.

 

 


4. 대응방안

✅ 방법 1: 커널 업데이트 (근본 해결책)

# Ubuntu/Debian
sudo apt update && sudo apt upgrade linux-image-generic

# Arch Linux
sudo pacman -Syu

 

✅ 방법 2: RDS 모듈 차단 (임시 조치)

# /etc/modprobe.d/blacklist-rds.conf 생성
echo "blacklist rds" | sudo tee /etc/modprobe.d/blacklist-rds.conf
echo "blacklist rds_tcp" | sudo tee -a /etc/modprobe.d/blacklist-rds.conf
sudo modprobe -r rds rds_tcp  # 즉시 언로드

 

✅ 방법 3: io_uring 비활성화 (커널 6.6 이상)

sudo sysctl -w kernel.io_uring_disabled=2
# 영구 적용:
echo "kernel.io_uring_disabled=2" | sudo tee -a /etc/sysctl.conf

✅ 내 시스템이 취약한지 확인하는 방법

# RDS 모듈 로드 여부 확인
lsmod | grep rds

# io_uring 상태 확인
cat /proc/sys/kernel/io_uring_disabled

결과가 0이면 io_uring 활성화 상태 (위험할 수 있음)

반응형

'CVE 취약점' 카테고리의 다른 글

NGINX-Rift (CVE-2026-42945)  (0) 2026.05.30
Fragnesia (CVE-2026-46300)  (0) 2026.05.16
ORM Injection (CVE-2026-30951)  (0) 2026.05.01
Pack2TheRoot (CVE-2026-41651)  (0) 2026.04.26
GNU Inetutils (CVE-2026-24061)  (0) 2026.01.31