Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Copy-Fail-CVE-2026-31431-Kubernetes-PoC — PoC: CVE-2026-31431 페이지 캐시 손상 + 공유 이미지 레이어를 통한 Kubernetes에서 완전 비특권 컨테이너 이스케이프에서 노드 수준 코드 실행까지. Alibaba Cloud ACK, Amazon EKS 및 Google GKE에서 검증됨. | Kitploit
도구/GitHubGitHub/percivalll/copy-fail-cve-2026-31431-kubernetes-poc
Privilege EscalationVulnerability AnalysisExploitationCloud SecurityPapers & ResearchLearning & EducationContainer Escape
GitHubpercivalll/copy-fail-cve-2026-31431-kubernetes-poc

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Copy-Fail-CVE-2026-31431-Kubernetes-PoC

PoC: CVE-2026-31431 페이지 캐시 손상 + 공유 이미지 레이어를 통한 Kubernetes에서 완전 비특권 컨테이너 이스케이프에서 노드 수준 코드 실행까지. Alibaba Cloud ACK, Amazon EKS 및 Google GKE에서 검증됨.

저장소 보기
18428495개월 전Kitploit 검토 완료

Copy Fail (CVE-2026-31431) — Kubernetes 컨테이너 탈출 PoC

공유 컨테이너 이미지 레이어를 통해 CVE-2026-31431 리눅스 커널 페이지 캐시 손상 버그를 악용하여 완전히 권한이 없는 컨테이너가 Kubernetes에서 노드 수준 코드 실행을 달성할 수 있는 방법을 보여주는 개념 증명입니다.

핵심 공격 원리는 다음과 같습니다: 공격자가 제어하는 컨테이너와 이미지 레이어를 공유하는 모든 권한 있는 DaemonSet이 컨테이너 탈출에 무기화될 수 있습니다. 이 PoC는 kube-proxy를 구체적인 예로 사용하지만, 이 기술은 클러스터의 모든 권한 있는 워크로드에 일반화됩니다.

Alibaba Cloud ACK, Amazon EKS, Google GKE에서 검증됨 — 권한 없는 파드가 권한 있는 kube-proxy DaemonSet을 통해 호스트 파일 시스템에 [*] success를 기록합니다:

Alibaba Cloud ACK (커널 6.6.88)Amazon EKS (커널 6.12.79)Google GKE (커널 6.12.68)
ACKEKSGKE

면책 조항: 이 저장소는 교육 및 방어 목적으로만 게시됩니다. 귀하가 소유하거나 테스트할 명시적 권한이 있는 시스템에서만 사용하십시오.

배경

CVE-2026-31431 ("Copy Fail")은 페이지 캐시 Copy-on-Write(CoW) 경로의 리눅스 커널 취약점입니다. AF_ALG splice 경합 조건을 통해 권한 없는 프로세스가 읽기 전용 파일의 페이지 캐시 페이지를 손상시킬 수 있습니다. 손상은 커널 페이지 캐시에 지속되며 이후 그 파일을 읽거나 실행하는 모든 프로세스(다른 컨테이너나 호스트의 프로세스 포함)에서 볼 수 있습니다.

원래 취약점에 대한 자세한 내용은 copy.fail을 참조하세요.

공격 원리

이 공격은 Kubernetes 클러스터에서 일반적으로 공존하는 세 가지 속성을 악용합니다:

  1. 커널 페이지 캐시 손상 (CVE-2026-31431) — 권한 없는 프로세스가 읽기 전용으로 열 수 있는 모든 파일의 메모리 내 캐시된 페이지를 덮어쓸 수 있습니다.
  2. 이미지 레이어 공유 — 컨테이너 런타임(containerd, CRI-O)은 오버레이 파일 시스템을 사용하며, 동일한 이미지 레이어가 여러 컨테이너에서 동일한 페이지 캐시 페이지에 매핑됩니다.
  3. 권한 있는 DaemonSet — 많은 클러스터가 상승된 권한(privileged: true, hostNetwork: true, 광범위한 capabilities 등)으로 DaemonSet을 실행하며, 이들은 주기적으로 이미지에서 바이너리를 실행합니다.

이러한 조건이 일치하면, 권한 없는 파드가 공유 이미지 레이어의 바이너리를 손상시킬 수 있고, 동일한 노드의 권한 있는 DaemonSet이 손상된 바이너리를 상승된 권한으로 알지 못한 채 실행하여 완전한 노드 수준 코드 실행을 달성합니다.

취약점 대상은 kube-proxy에 국한되지 않습니다. 공격자가 제어하는 이미지와 이미지 레이어를 공유하는 모든 권한 있는 DaemonSet(모니터링 에이전트, CNI 플러그인, 로그 수집기, 보안 에이전트 등)이 실행 가능한 대상입니다.

작동 방식

공격 체인은 세 단계로 구성됩니다: 페이지 캐시 손상, 컨테이너 간 전파, 권한 있는 실행.

1. AF_ALG Splice 경합 조건을 통한 페이지 캐시 손상

커널의 AF_ALG(암호화) 서브시스템은 사용자 공간 암호화 작업을 위한 소켓 기반 인터페이스를 제공합니다. 익스플로잇은 커널이 파일에서 AF_ALG 소켓으로 splice()를 처리하는 방식의 경합 조건을 남용합니다:

  1. 대상 바이너리를 읽기 전용으로 엽니다.
  2. authencesn(hmac(sha256),cbc(aes))에 바인딩된 AF_ALG AEAD 소켓을 생성합니다.
  3. MSG_MORE 플래그와 함께 AF_ALG 소켓을 통해 작은 페이로드 청크를 전송하여 커널에 더 많은 데이터가 올 것임을 알립니다.
  4. 대상 파일의 내용을 fd → 파이프 → AF_ALG 소켓으로 splice()합니다.
  5. CoW 버그로 인해 커널은 공격자의 페이로드 바이트를 적절히 격리하는 대신 대상 파일의 페이지 캐시 페이지에 기록합니다.

익스플로잇은 전체 대상 바이너리의 캐시된 페이지가 사용자 정의 페이로드로 덮어쓰여질 때까지 각 4바이트 윈도우에 대해 이 과정을 반복합니다.

파일에 대한 쓰기 권한은 필요하지 않습니다. 디스크의 파일은 변경되지 않으며, 메모리 내 페이지 캐시만 손상됩니다.

2. 이미지 레이어 공유를 통한 컨테이너 간 전파

컨테이너 런타임은 오버레이 파일 시스템을 사용합니다. 두 컨테이너가 동일한 이미지 레이어를 공유할 때, 커널은 동일한 페이지 캐시 페이지에서 파일 읽기를 제공합니다.

공격자는 대상 권한 있는 DaemonSet과 동일한 기본 이미지를 FROM하여 PoC 이미지를 빌드합니다. 두 컨테이너가 동일한 오버레이 하위 디렉터리를 공유하기 때문에 공유 레이어의 바이너리는 동일한 페이지 캐시 페이지에 매핑됩니다.

권한 없는 PoC 컨테이너가 바이너리의 페이지 캐시를 손상시키면, 손상은 즉시 동일한 노드의 권한 있는 컨테이너에 표시됩니다 — 컨테이너 간 통신은 전혀 없습니다.

3. 대상 DaemonSet에 의한 권한 있는 실행

권한 있는 DaemonSet이 다음에 손상된 바이너리를 실행할 때(정상 작동 주기를 통해), 커널은 손상된 페이지 캐시 페이지를 로드합니다. 공격자의 페이로드는 DaemonSet의 전체 권한으로 실행되며, 여기에는 다음이 포함될 수 있습니다:

  • 노드에서 완전한 루트
  • 모든 capabilities
  • 호스트 네임스페이스(네트워크, PID, 마운트)에 대한 액세스

이 PoC의 페이로드(payload/payload.c)는 단순히 호스트 루트 파일 시스템을 마운트하고 노드 수준 코드 실행의 증명으로 마커 파일을 /root/res에 기록합니다.

공격 흐름도

┌──────────────────────────┐     ┌──────────────────────────┐
│   PoC 컨테이너            │     │   권한 있는 DaemonSet     │
│   (권한 없음)              │     │   (예: kube-proxy,       │
│                          │     │    모니터링 에이전트 등)   │
│  1. 대상 바이너리 열기    │     │                          │
│     (읽기 전용)           │     │                          │
│                          │     │                          │
│  2. AF_ALG splice 경합   │     │                          │
│     조건으로 페이지 캐시  │     │                          │
│     손상                 │     │                          │
│          │               │     │                          │
└──────────┼───────────────┘     └──────────────────────────┘
           │                                  │
           ▼                                  │
  ┌─────────────────────┐                     │
  │  커널 페이지 캐시    │                     │
  │                      │◄────────────────────┘
  │  공유 레이어 바이너리 │     3. DaemonSet이 손상된
  │  (손상됨)             │        바이너리 실행
  │  공격자의 페이로드    │        → 손상된 페이지 로드
  │  바이트 포함         │        → 페이로드가 DaemonSet의
  └─────────────────────┘           권한으로 실행됨

검증된 클라우드 환경

PoC는 다음 관리형 Kubernetes 플랫폼에서 성공적으로 검증되었습니다:

Alibaba Cloud ACK

속성값
플랫폼Alibaba Cloud Container Service for Kubernetes (ACK)
Kubernetesv1.35.2
노드 커널6.6.88-4.2.alnx4.x86_64
kube-proxyregistry-cn-*.ack.aliyuncs.com/acs/kube-proxy:v1.35.2-aliyun.1
기본 이미지registry.k8s.io/kube-proxy:v1.35.2 (업스트림)
루트 장치/dev/vda3 (ext4)

ACK PoC 결과

Amazon EKS

속성값
플랫폼Amazon Elastic Kubernetes Service (EKS)
Kubernetesv1.35.4
노드 커널6.12.79-101.147.amzn2023.x86_64
kube-proxy***.dkr.ecr.***.amazonaws.com.cn/eks/kube-proxy:v1.35.3-eksbuild.2
기본 이미지public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base-iptables:2026-03-11-1773190710.2023
루트 장치/dev/nvme0n1p1 (xfs)

EKS PoC 결과

Google GKE

속성값
플랫폼Google Kubernetes Engine (GKE)
Kubernetesv1.35.3-gke.1234000
노드 OSContainer-Optimized OS (COS) 125, BUILD_ID 19216.220.72
노드 커널6.12.68+ x86_64
kube-proxyus-central1-artifactregistry.gcr.io/gke-release/gke-release/kube-proxy:v1.35.3-gke.1234000
기본 이미지kube-proxy와 동일 (GKE 제공업체 관리 Artifact Registry 이미지)
루트 장치/dev/dm-0 (ext2, 읽기 전용); /dev/sda1 (ext4, 쓰기 가능한 상태 파티션)
마커 경로/mnt/stateful_partition/copyfail-res

GKE PoC 결과

세 경우 모두, 권한 없는 PoC 파드가 호스트 파일 시스템에 [*] success 마커 파일을 성공적으로 기록했습니다 — 이는 권한 있는 kube-proxy DaemonSet을 통한 노드 수준 코드 실행을 증명합니다.

전체 워크스루(이미지 레이어 분석, 빌드 단계, 배포)는 다음을 참조하세요:

  • EKS: docs/eks-poc.md
  • GKE: docs/gke-poc.md

구체적인 예: kube-proxy

이 PoC는 가장 일반적인 권한 있는 DaemonSet 중 하나인 kube-proxy를 대상으로 사용합니다. 세 가지 변형이 제공됩니다:

  • 기본 (ACK / 업스트림): FROM registry.k8s.io/kube-proxy:v1.35.2로 빌드됨 (Dockerfile 참조)
  • EKS: FROM public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base-iptables:2026-03-11-1773190710.2023로 빌드됨 (Dockerfile.eks 참조)
  • GKE: FROM us-central1-artifactregistry.gcr.io/gke-release/gke-release/kube-proxy:v1.35.3-gke.1234000로 빌드됨 (Dockerfile.gke 참조)

모든 변형은 /usr/sbin/ipset, /usr/sbin/nft, /usr/sbin/xtables-legacy-multi, /usr/sbin/xtables-nft-multi와 같은 바이너리를 손상시킵니다.

중요한 주의 사항:

  • kube-proxy는 ipvs 모드로 구성된 경우에만 ipset을 호출합니다. 기본 모드(iptables)는 ipset을 사용하지 않습니다. ipvs 폐기 계획은 kubernetes/enhancements#5495를 참조하세요.
  • 일부 관리형 Kubernetes 배포판(예: 특정 클라우드 제공업체)은 kube-proxy를 권한 없는 컨테이너로 실행하여 탈출의 영향을 제한합니다.
  • PoC는 여러 바이너리(ipset, nft, xtables-legacy-multi, xtables-nft-multi)를 대상으로 하여 다양한 프록시 모드를 포괄하지만, 호출 여부는 클러스터 구성에 따라 다릅니다.
도구 다운로드