
CVE-2026-43284(Dirty Frag)에 대한 기술 분석으로, 읽기 전용 파일에 대한 페이지 캐시 쓰기를 가능하게 하여 root 권한 탈취로 이어지는 Linux 커널 xfrm ESP 로컬 권한 상승 취약점입니다.
Linux 커널의 CVE-2026-43284 (Dirty Frag) 로컬 권한 상승 취약점에 대한 상세 기술 분석.
CVE-2026-43284 (일반적으로 Dirty Frag 취약점 제품군의 일부로 언급됨)는 Linux 커널의 치명적인 로컬 권한 상승(LPE) 취약점입니다. 이는 xfrm ESP (Encapsulating Security Payload) 입력 서브시스템 내의 논리 결함에서 비롯됩니다. 이 버그를 통해 로컬의 비특권 공격자가 일반적인 Copy-on-Write (CoW) 보호를 우회하고 읽기 전용 시스템 파일(예: /usr/bin/su)에 임의의 페이지 캐시 쓰기 프리미티브를 달성할 수 있으며, 궁극적으로 완전한 root 권한 탈취로 이어집니다.
취약점 분석 및 공격 벡터1.
제약 사항: 커널의 IPsec 구성과 상호작용하려면 일반적으로 CAP_NET_ADMIN 권한이 필요하며, 이는 일반 사용자에게 제한된 권한입니다. 우회 방법: 로컬의 비특권 사용자는 별도의 비특권 User Namespace와 Network Namespace를 생성할 수 있습니다 (CLONE_NEWUSER | CLONE_NEWNET과 같은 플래그 사용). 이 격리된 비특권 컨테이너 공간 내에서 공격자는 해당 네임스페이스의 "root" 프로세스가 되어, 제한된 컨텍스트 내에서 CAP_NET_ADMIN 권한을 부여받습니다.
사용자 정의 네트워크 네임스페이스 내에서 CAP_NET_ADMIN을 보유한 공격자는 가짜 Security Association (SA)과 IPsec 정책을 구성합니다.
splice(2) 또는 vmsplice(2)와 같은 시스템 호출을 사용하여, 공격자는 대상 읽기 전용 파일(예: /usr/bin/su)에 속한 페이지를 소켓 버퍼(skb) 프래그먼트에 연결합니다.
제약 사항: 공격자는 커널이 esp_input() 루틴을 통해 데이터를 파싱하도록 강제해야 합니다.
전략: 공격자는 ESP-in-UDP 캡슐화 네트워크 구조를 생성하고 전송을 호스트의 루프백 인터페이스(127.0.0.1)로 지정합니다.
패킷이 루프백 채널을 통해 로컬로 수신되면, 커널의 네트워킹 스택은 UDP 패킷 래퍼를 식별하고, 캡슐화를 해제한 후 내부 페이로드를 처리하기 위해 esp_input()에 전달합니다.
IPv4/IPv6 데이터그램 추가 경로의 논리 버그로 인해, 커널은 페이지를 UDP 소켓에 splice할 때 기본 소켓 버퍼 프래그먼트를 SKBFL_SHARED_FRAG 플래그로 제대로 표시하지 못합니다.
결과적으로 esp_input()은 패킷을 비공개, 비복제 버퍼로 오인하고 "no-COW" 성능 최적화 고속 경로를 선택합니다.
esp_input()은 데이터를 안전한 사용자 버퍼로 복사하는 대신, 시스템의 페이지 캐시에서 빌려온 메모리 페이지에 대해 직접 인플레이스 복호화를 수행합니다
암호화된 페이로드 데이터를 미세 조정하고 암호화 알고리즘 구성(예: Extended Sequence Numbers)을 활용함으로써, 복호화 과정은 페이지 캐시의 대상 바이너리를 결정론적으로 덮어씁니다.
/usr/bin/su와 같은 바이너리의 페이지 캐시가 메모리 내에서 공격자의 페이로드로 오염되면, 해당 바이너리를 실행하면 실제 물리 디스크에 저장된 바이너리를 건드리거나 수정하지 않고도 root 권한으로 페이로드가 실행됩니다.
영향: 커널 패닉 위험 없이 주요 엔터프라이즈 Linux 배포판 전반에 걸쳐 높은 신뢰성과 결정론적인 로컬 권한 상승.
해결 방안: 데이터그램 splice에 대해 SKBFL_SHARED_FRAG 처리를 강제하고 ESP 처리 로직 내에 skb_cow_data()로의 안전한 폴백을 도입하는 패치가 포함된 버전으로 Linux 커널을 업데이트하십시오.