[공격] 분석 — CVE-2026-23231
A local privilege escalation risk via UAF in nf_tables requiring specific kernel versions and low-privileged access, necessitating immediate patching of the Linux kernel.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00788 · 악용난이도 hard
🔍 공격 기법
이 취약점은 nf_tables 내의 Race Condition으로 인한 Use-After-Free(UAF) 결함이다.
- 공격 표면 및 트리거:
- 노출 엔드포인트: Netfilter (
nf_tables) 서브시스템. - 트리거 함수:
nf_tables_addchain()$\rightarrow$nft_chain_add()$\rightarrow$nf_tables_register_hook(). - 조건: 체인 추가 과정 중
nf_tables_register_hook()가 실패하여 에러 경로로 진입할 때,synchronize_rcu()없이nft_chain_del()후 즉시nf_tables_chain_destroy()가 호출되는 찰나의 타이밍을 공략한다.
- 노출 엔드포인트: Netfilter (
- 공격 체인 및 단계:
- 초기 접근 (PR:L): 공격자는 로컬 사용자 권한(Low-privileged)으로 시스템에 진입해 있어야 한다. CVSS 벡터
AV:L은 네트워크 외부에서 직접 트리거가 불가능함을 의미한다. - 정찰 및 환경 조성: 커널 버전이 영향 범위(3.16 ~ 6.19.4 등 다수) 내에 있는지 확인하고,
nf_tables를 조작할 수 있는 권한(CAP_NET_ADMIN추정 또는 관련 네임스페이스 권한)을 확보한다. - UAF 유도 (Race Condition):
- Thread A: 의도적으로
nf_tables_register_hook()를 실패하게 만들어 체인을 빠르게 해제(free)시킨다. - Thread B (Control-plane): 동시에
nf_tables_dump_chains()를 호출하여 RCU Lock 하에서 해당 체인 리스트를 순회하게 한다. - Thread C (Packet path): IPv4 훅이 일시적으로 설치된 틈을 타 패킷을 유입시켜
nft_do_chain()에서 해제된chain->blob_gen_X를 참조하게 만든다.
- Thread A: 의도적으로
- 실행 및 권한 상승: 해제된 메모리 영역에 공격자가 제어하는 데이터(Fake Object)를 배치하여 커널 함수 포인터를 덮어쓰고, 임의 코드 실행을 통해 Root 권한을 획득한다.
- 초기 접근 (PR:L): 공격자는 로컬 사용자 권한(Low-privileged)으로 시스템에 진입해 있어야 한다. CVSS 벡터
악용 가능성: 본 취약점은 AV:L 및 PR:L 조건에 따라 공격자가 이미 시스템 내부에 낮은 권한의 계정을 확보한 상태에서만 트리거 가능한 Local Privilege Escalation(LPE) 경로입니다. 공격 표면은 Linux 커널의 netfilter 서브시스템, 구체적으로는 nf_tables 관련 Netlink 인터페이스와 nf_tables_addchain() 함수가 됩니다. 공격자는 특수하게 조작된 체인 생성 요청을 통해 nf_tables_register_hook() 단계에서 의도적인 실패를 유도함으로써, RCU grace period 없이 메모리가 해제되는 Use-After-Free(UAF) 상태를 만들어야 합니다. EPSS 수치가 0.00788로 낮고 KEV에 등재되지 않은 점은 현재 야생(In-the-wild)에서 자동화된 공격 도구가 보급되지 않았음을 의미하며, 이는 커널 메모리 레이아웃의 불확실성과 정교한 Race Condition 타이밍 제어가 필요하기 때문입니다. 결과적으로 이론적 심각도는 높으나, 실제 악용을 위해서는 nf_tables_dump_chains()나 패킷 경로와의 경쟁 상태를 정확히 맞추어야 하므로 공격 난이도는 Hard로 판정됩니다.
💥 영향 분석
- 권한 상승 (LPE): 로컬 일반 사용자가 커널 메모리 오염을 통해 최고 권한(Root)을 획득할 수 있다.
- 시스템 불안정성: UAF 트리거 실패 시 Kernel Panic으로 인한 서비스 거부(DoS)가 발생한다.
🔗 관련 취약점·체이닝
본 결함은 단독으로 RCE를 일으키기보다, 로컬 권한 상승을 위한 체이닝의 핵심 고리로 작동한다.
- 추정 체이닝 경로:
정보 노출(KASLR 우회) $\rightarrow$ Memory Corruption (UAF) $\rightarrow$ 커널 권한 상승. - 유형 수준 분석:
Memory-Corruption유형 특성상, KASLR(Kernel Address Space Layout Randomization)을 무력화할 수 있는 다른 정보 유출 취약점과 체이닝될 가능성이 매우 높다.- RCU Grace Period 누락으로 인한 UAF는 전형적인 Race Condition 패턴이며, 이는
Slab-out-of-bounds나Double Free와 유사하게 커널 힙(Heap) 스프레이 기법을 통해 제어 가능한 메모리 영역을 확보하는 방식으로 이어진다.
🔎 탐지
- 커널 로그:
nf_tables관련 에러 메시지와 함께 발생하는 갑작스러운 Kernel Panic 또는 Oops 로그 확인. - 행위 기반: 일반 사용자가 짧은 시간 내에 다수의 Netfilter 체인을 생성/삭제하며 시스템 부하를 일으키는 패턴 모니터링.
- 패턴 예시:
nft유틸리티의 비정상적인 반복 호출 및 커널 내nf_tables_addchain관련 함수 호출 빈도 급증.
🛡️ 완화 방안
- 근본 해결: 영향받는 Linux 커널 버전을 패치된 최신 버전으로 업데이트하여
nft_chain_del()과nf_tables_chain_destroy()사이에synchronize_rcu()가 적용되도록 한다. - 즉시 조치:
- 불필요한 사용자 네임스페이스(
unprivileged_userns_clone) 비활성화를 통해 일반 사용자의 Netfilter 조작 권한을 제한한다. - 다중 소스 교차검증 결과 신뢰도가 1.0이며 영향 범위가 매우 광범위하므로, 우선순위를
scheduled로 설정하여 이번 주 내 패치를 완료할 것을 권고한다. (EPSS 0.00788 및 exploit=hard 수치는 실제 악용 사례가 드물다는 뜻이지 위험하지 않다는 뜻이 아니며, CVSS 7.8의 잠재적 파급력을 고려한 결정임)
- 불필요한 사용자 네임스페이스(
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00788 · exploit=hard · in_scope=None