
커널 Dirty Frag 취약점 패치 (CVE-2026-43284, CVE-2026-43500)
Hyunwoo Kim (@v4bel)이 발견한 Dirty Frag 취약점 클래스에 대한 패치 시리즈입니다.
Dirty Frag는 권한이 없는 로컬 사용자가 읽기 전용 파일(예: /usr/bin/su, /etc/passwd)의 페이지 캐시의 임의 바이트를 덮어쓸 수 있게 하여, 모든 주요 Linux 배포판에서 루트로의 로컬 권한 상승을 초래합니다.
이 저장소의 패치는 이 저장소의 관리자가 작성한 것이 아닙니다.
- CVE-2026-43284 (ESP 패치): Hyunwoo Kim (@v4bel)과 Kuan-Ting Chen이 작성했습니다. 커밋
f4c50a4034e6에서 Linux 커널 메인라인에 병합되었습니다.- CVE-2026-43500 (RxRPC 패치): Hyunwoo Kim (@v4bel)이 작성했습니다.
afKV2zGR6rrelPC7@v4bel에서 netdev 메일링 리스트에 제출되었으며, 병합 대기 중입니다.이 저장소는 해당 패치들의 형식화된 미러로,
git am형식으로 편의를 위해 수집되었습니다. 모든 크레딧은 원저작자에게 있습니다. 원본 연구 및 PoC: https://github.com/V4bel/dirtyfrag
4.10(커밋 cac2661c53f3, 2017-01-17)부터 f4c50a4034e6 이전의 6.x까지의 커널6.4(커밋 2dc334f1a63a, 2023-06-08)부터 업스트림까지 (아직 병합된 패치 없음)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# 패치 1 적용 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# 패치 2 적용 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch로 적용 (컨텍스트 불일치로 git am이 실패하는 경우)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
패치를 즉시 적용할 수 없는 경우, 취약한 모듈을 블랙리스트에 등록하세요:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
경고:
esp4/esp6를 제거하면 IPsec ESP가 비활성화됩니다. 프로덕션 시스템에 적용하기 전에 영향을 평가하세요.
두 변종 모두 동일한 근본 원인을 공유합니다: 커널의 제로카피 splice() 경로가 copy-on-write 의미론 없이 읽기 전용 페이지-캐시 페이지를 직접 skb frag에 심습니다. 이후의 제자리(in-place) 암호화 작업이 해당 페이지-캐시 페이지에 쓰기를 수행하여 캐시된 파일 내용을 영구적으로 수정합니다.
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- CoW 없음!
│
▼
[esp_input / rxkad_verify_packet_1]
제자리 AEAD/fcrypt 복호화 src == dst == &P
│
▼
page_cache_page_P에 STORE <- 읽기 전용 파일 캐시에 대한 임의 쓰기
| 변종 |
|---|
| 파일 | CVE | 서브시스템 | 상태 |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c, net/ipv6/esp6.c, net/ipv4/ip_output.c, net/ipv6/ip6_output.c | ✅ 메인라인에 병합됨 (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c, net/rxrpc/conn_event.c | ⏳ netdev ML에 제출됨 (afKV2zGR6rrelPC7@v4bel), 병합 대기 중 |
| 접근 방식 |
|---|
| ESP | splice frag를 SKBFL_SHARED_FRAG로 표시; esp_input()/esp6_input()에서 이 플래그를 확인하여 제자리 암호화 전에 skb_cow_data()를 강제 |
| RxRPC | skb_cloned() 게이트를 (skb_cloned(skb) || skb->data_len)으로 확장하여 비선형 skb(스플라이스 frag를 포함할 수 있음)가 제자리 복호화 전에 항상 복사되도록 함 |