Post

DirtyFrag

DirtyFrag

0. 취약점 개요

CVE-2026-43500은 Linux 커널의 RxRPC 서브시스템에서 발생하는 로컬 권한 상승(Local Privilege Escalation, LPE) 취약점이다.

이 취약점은 Dirty Flag 계열 취약점으로 분류되며, Linux page cache와 fragment 소유권 처리 과정의 취약점을 이용해 읽기 전용 파일의 page cache를 변조한다.

Dirty Frag 전체 구조

1
2
3
4
5
6
7
8
9
10
11
[User Process]
↓
AF_RXRPC socket
↓
RxRPC receive path
↓
skb fragment
↓
page cache corruption
↓
root shell



1. Linux Page Cache와 Zero-Copy 구조

Page Cache

Linux 커널은 파일을 디스크에서 직접 읽지 않고, 성능 향상을 위해 메모리(RAM)에 캐시하는데 이 캐시를 page cache라고 한다. 대부분의 파일 I/O는 실제 디스크가 아닌 RAM 기반 page cache를 통해 수행된다.

즉, page cache란 파일 내용을 메모리로 캐싱한 것이다.


mmap()과 MAP_SHARED

1
mmap(NULL, 0x1000, PROT_READ, MAP_SHARED, fd, 0);

mmap()은 파일 내용을 현재 프로세스 메모리에 매핑하는 함수이다. 여기서 MAP_SHARED 인자는 프로세스 메모리와 page cache를 공유한다는 의미이다.

즉, MAP_SHARED 옵션을 사용하면 “mmap memory == page cache” 상태가 된다.


Zero-Copy I/O

파일/네트워크 I/O에서는 일반적으로 데이터를 여러 버퍼 간 반복적으로 복사한다. 예를 들어 파일을 네트워크로 전송할 때의 흐름은 아래와 같다.

1
2
3
4
5
6
7
8
9
Disk
↓
Page Cache
↓ (copy)
User Buffer
↓ (copy)
Socket Buffer
↓
NIC

이 과정에서 버퍼는 page cache -> user buffer -> socker buffer 형태로 계속 복사된다. 이러한 반복 복사는 파일의 크기가 커질 경우 CPU 사용량 증가, memory bandwidth 사용 증가, cache pollution 증가를 야기한다.

Linux에서는 이 문제를 방지하기 위해 가능한 한 데이터를 복사하지 않고 같은 memory page를 공유하는 방식인 Zero-Copy I/O 를 사용한다.



2. Linux 네트워크 버퍼와 RxRPC



3. CVE-2026-34500 분석


3.1 원인 분석


3.2 동작 원리


3.3 Exploit Flow

This post is licensed under CC BY 4.0 by the author.