본문 바로가기
일반IT/IT보안

🔥 엠바고를 뚫고 풀려난 "Dirty Frag" — Linux 커널 한 줄로 root 따는 신종 LPE

by gasbugs 2026. 5. 10.

한 줄짜리 명령어로 root가 됩니다.
그리고 공식 커널 릴리즈는 아직 나오지도 않았습니다.



🎯 이 글에서 다루는 것

  • Dirty Frag(CVE-2026-43284, CVE-2026-43500)의 정체와 위험도
  • IPsec ESP, RxRPC 두 커널 모듈을 엮은 익스플로잇 체인의 동작 원리
  • "엠바고가 깨졌다"는 표현이 보안 업계에서 갖는 무게
  • 지금 당장 해야 할 임시 완화 조치
  • Dirty COW → Dirty Pipe → Copy Fail → Dirty Frag로 이어진 페이지 캐시 변조 계보

 

📌 또 너냐 Linux 커널 — 페이지 캐시 변조 시리즈의 새 챕터

2026년 5월 7일, Linux 보안 메일링 리스트(oss-security)에 한 줄짜리 PoC가 올라왔습니다. 한국 보안 연구자 김현우(@v4bel)가 발견한 신종 권한 상승 취약점, Dirty Frag입니다. CVSS 3.1 기준 7.8점(High). 비권한 일반 사용자가 한 줄 명령어로 root를 가져갑니다.

이름이 익숙하지 않으시면, 이 이름들은 어떠신가요?

  • 🐮 Dirty COW (2016, CVE-2016-5195) — 모든 Android·Linux를 뒤흔든 race condition
  • 🪈 Dirty Pipe (2022, CVE-2022-0847) — 파이프(pipe)로 읽기 전용 파일 덮어쓰기
  • Copy Fail (2026, CVE-2026-31431) — 불과 일주일 전에 공개된 같은 계열 취약점

그리고 이번이 Dirty Frag입니다. 별칭은 "Copy Fail 2: Electric Boogaloo". 농담이 아니라 진짜 그렇게 부릅니다.

🔍 Dirty Frag, 정확히 무엇인가

Dirty Frag는 두 개의 별개 커널 결함을 엮은 익스플로잇 체인입니다.

결함 1: xfrm-ESP Page-Cache Write (CVE-2026-43284)

  • 위치: IPsec(VPN에 쓰이는 그것)의 ESP(Encapsulating Security Protocol) 처리 모듈
  • 도입: 2017년 1월 17일 커밋
  • 트리거 조건: 비권한 사용자가 namespace를 생성할 수 있어야 함
  • 우분투에서는 AppArmor가 namespace 생성을 막아 단독으로는 통하지 않음

결함 2: RxRPC Page-Cache Write (CVE-2026-43500)

  • 위치: AFS(분산 파일 시스템)에서 쓰이는 RxRPC 프로토콜 모듈
  • 도입: 2023년 6월 커밋
  • 트리거 조건: namespace 권한 불필요. 다만 rxrpc.ko 모듈 자체가 일부 배포판엔 빠져 있음

이 둘을 합쳐 쓴다는 것이 Dirty Frag의 핵심입니다. ESP가 막히면 RxRPC로, RxRPC가 빠지면 ESP로 — 환경에 따라 한쪽으로 우회합니다. algif_aead 블랙리스트로 막은 Copy Fail 완화책이 적용된 시스템에서도 Dirty Frag는 여전히 통합니다.

 

무엇을 하는가: 페이지 캐시 덮어쓰기

Linux는 디스크에서 읽은 파일 내용을 RAM의 페이지 캐시(page cache) 에 둡니다. 같은 파일을 자주 읽는 부담을 덜기 위함이지요. 그런데 이 페이지 캐시는 보호된 메모리 입니다. 일반 사용자가 함부로 쓸 수 없습니다.

 

Dirty Frag는 esp4, esp6, rxrpc가 페이지 버퍼를 '제자리에서(in-place) 복호화'하는 코드 경로를 노립니다. splice(2)나 sendfile(2)로 들어온 파이프 페이지가 그대로 소켓까지 도달하면, 비권한 프로세스가 그 평문 페이지에 대한 참조를 계속 들고 있을 수 있게 됩니다. 결과적으로 읽기 전용 시스템 파일(예: /etc/passwd, /etc/shadow, /usr/bin/sudo)의 페이지 캐시를 덮어쓸 수 있는 쓰기 프리미티브가 생깁니다.

 

여기에 root 권한 부여 코드를 끼워 넣으면 — 끝입니다. race condition 기반 익스플로잇과 달리, 이 버그 클래스는 결정적(deterministic)이고 신뢰성이 매우 높습니다. 시도가 실패할 일이 거의 없다는 뜻입니다.

 

⏰ "엠바고가 깨졌다"는 게 무슨 뜻인가

보안 업계엔 책임 있는 공개(Coordinated Disclosure) 라는 관행이 있습니다. 흐름은 이렇습니다.

  1. 연구자가 취약점 발견
  2. 벤더(Linux 커널 메인테이너)에게 비공개로 알림
  3. 벤더가 패치를 만들고, 주요 배포판에 백포팅
  4. 모든 준비가 끝나면 약속된 날짜(엠바고 해제일) 에 동시 공개

여기서 엠바고(embargo) 는 그 약속된 비공개 기간을 말합니다.

그런데 Dirty Frag는 이 흐름이 깨졌습니다. 취약점은 fix가 리버스 엔지니어링되며 세부 정보가 공개되어, 엠바고 만료 전에 공개되었습니다. 누군가가 공개 git 트리에 먼저 머지된 패치 커밋을 거꾸로 돌려서 익스플로잇을 만들어 GitHub에 올린 것이지요. 결국 메인라인 커널엔 패치가 들어갔지만 공식 커널 릴리즈는 아직 나오지 않았고, 대부분의 배포판은 부랴부랴 백포트 패치를 푸는 중입니다.

엠바고 파기는 단순한 "비밀 누설"이 아닙니다. 패치를 적용 못 한 수많은 시스템이 공격자에겐 보이고 방어자에겐 가려진 채로 며칠을 보내야 한다는 뜻입니다.

📦 영향받는 배포판

각 벤더의 발표를 종합하면 거의 모든 주류 배포판이 영향권입니다.

배포판  상태
Linux Kernel (ESP, ~2017년 이후) 영향
Linux Kernel (RxRPC, ~2023년 이후) 영향
Ubuntu (다중 버전) 영향 (PoC 검증됨)
RHEL 8 / 9 / 10 영향
AlmaLinux 8 / 9 / 10 영향
CentOS Stream 10 영향
Fedora 최신 영향
openSUSE Tumbleweed 영향
OpenShift 4 영향 가능

 

클라우드 VM, 베어메탈, 사내 워크스테이션 — 어디든 해당될 가능성이 있습니다.

 

🛡️ 지금 당장 해야 할 일

① 커널 패치 적용 (최우선)

배포판에서 패치가 나왔다면 망설일 이유가 없습니다.

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

# RHEL / AlmaLinux / Fedora
sudo dnf update kernel

업데이트 후 반드시 재부팅해야 새 커널이 적용됩니다.

 

② 패치 전이라면, 취약 모듈 로드 차단

sudo tee /etc/modprobe.d/dirty-frag.conf <<EOF
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
EOF

# 이미 로드된 모듈 제거 시도
sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true

# 부팅 시 자동 로드 차단
sudo update-initramfs -u

⚠️ 주의: esp4, esp6을 막으면 IPsec VPN이 동작하지 않습니다. rxrpc을 막으면 AFS 분산 파일 시스템이 영향을 받습니다. 운영 환경에서 적용하기 전 의존성을 반드시 확인하셔야 합니다.

 

③ IPsec이 꼭 필요한 환경의 차선책

ESP 변종만이라도 막고 싶다면 비권한 사용자 namespace 생성을 비활성화하는 방법이 있습니다.

echo "user.max_user_namespaces=0" | sudo tee /etc/sysctl.d/dirty-frag.conf
sudo sysctl --system

⚠️ 단, 이 조치는 rootless 컨테이너, 샌드박스 브라우저, Flatpak의 동작에 영향을 줄 수 있고, RxRPC 변종은 막지 못합니다.

 

④ 침해 의심 시 페이지 캐시 비우기

이미 익스플로잇이 시도된 흔적이 있다면, 변조된 페이지 캐시를 디스크 원본으로 되돌릴 수 있습니다.

echo 3 | sudo tee /proc/sys/vm/drop_caches

 

물론 이건 응급 조치일 뿐입니다. 침해가 의심되는 시스템은 격리 후 포렌식이 우선입니다.

⚠️ 자주 빠지는 함정

  • "우리 시스템엔 IPsec 안 써요" → RxRPC 변종은 IPsec과 무관합니다. 모듈이 로드 가능하기만 하면 됩니다.
  • "지난주에 Copy Fail 패치했으니 안전하다" → Copy Fail의 algif_aead 블랙리스트 완화책으로는 Dirty Frag를 못 막습니다. 별개 취약점입니다.
  • "컨테이너 안이라 괜찮다" → 기본 seccomp 프로파일이 적용된 Kubernetes 환경에선 위험이 줄지만, VM이나 덜 제한된 환경은 여전히 위험합니다.
  • 재부팅 누락 → 모듈 차단 설정만 하고 재부팅을 안 하면 이미 메모리에 올라간 모듈은 그대로 살아 있습니다.

✅ 정리 / 이번 사건이 남긴 것

  • Dirty Frag = CVE-2026-43284 + CVE-2026-43500, CVSS 7.8 (High), 페이지 캐시 변조형 LPE
  • IPsec ESP 또는 RxRPC, 둘 중 하나만 노출돼도 root 가능
  • 엠바고 파기로 PoC가 먼저 풀렸고, 공식 커널 릴리즈는 아직 (각 배포판이 백포트 중)
  • Dirty COW → Dirty Pipe → Copy Fail → Dirty Frag — 페이지 캐시 변조 계보의 또 다른 갱신
  • 지금 당장 ① 커널 업데이트, ② 안 되면 모듈 차단, ③ 의존성 확인 후 재부팅

페이지 캐시는 성능을 위해 만들어진 구조입니다. 그러나 "비권한 사용자가 그 페이지를 어떻게든 만지게 하면 권한 상승이 된다" 는 패턴이 벌써 네 번째입니다. 다음 발표가 또 같은 계열일 거란 데에 1만 원 정도는 걸어볼 만하지 않으실는지요. 🪤