[공격] 분석 — CVE-2025-38721
A reference count leak in Linux kernel's netfilter ctnetlink can lead to a Denial of Service (DoS) by blocking network namespace dismantlement, requiring kernel updates.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00154 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: ctnetlink_dump_table() 함수 실행 중 특정 조건(res < 0)에서 nf_conntrack_get()이 호출될 때, 현재 객체(ct)가 이전 객체(last)와 동일한 경우 reference count가 중복 증가하며 누수(Leak)가 발생함.
(2) 공격 단계:
- 정찰: 대상 시스템의 Linux 커널 버전 및
netfilter모듈 활성화 여부 확인. - 초기 접근: 로컬 사용자 권한 획득 (AV:L, PR:L).
- 실행:
ctnetlink인터페이스를 통해 conntrack 테이블 덤프 요청을 반복적으로 수행하여 refcount 누수를 유도. (전제:CAP_NET_ADMIN등 관련 권한 필요 추정) - 영향: 누적된 refcount로 인해
cnet->count가 0으로 떨어지지 않음 $\rightarrow$nf_conntrack_cleanup_net_list()가 무한 대기 상태에 빠짐. - 관측 지표:
kworker프로세스가nf_conntrack_cleanup_net_list에서 CPU를 점유하며 스핀(Spinning)하는 현상 발생.
(3) 공격 표면:
- 엔드포인트/인터페이스: Netlink socket (
AF_NETLINK), 구체적으로는ctnetlink패밀리. - 함수:
ctnetlink_dump_table()내의 refcount 관리 로직.
(4) CVSS 벡터 연결:
- AV:L / PR:L: 공격자가 시스템에 이미 로그인한 상태에서 Netlink 소켓에 접근할 수 있어야 함.
- AC:L / UI:N: 특별한 사용자 상호작용 없이 특정 조건의 덤프 요청만으로 트리거 가능.
악용 가능성: 본 취약점은 AV:L 및 PR:L 벡터가 시사하듯, 공격자가 이미 시스템에 로그인하여 낮은 권한의 쉘을 확보한 상태에서만 트리거 가능한 로컬 취약점입니다. 공격 표면은 Linux 커널의 netfilter 서브시스템 내 ctnetlink_dump_table() 함수이며, Netlink 프로토콜을 통해 Conntrack 테이블 덤프를 요청하는 과정에서 발생합니다. 특정 조건(ct == last)이 충족될 때 발생하는 Reference Count 누수는 메모리 오염보다는 커널 오브젝트의 해제를 방해하여 netns 제거 또는 conntrack 모듈 언로드를 영구적으로 차단하는 Denial of Service(DoS) 상태를 유발합니다. EPSS 수치가 0.00154로 매우 낮고 KEV에 등재되지 않은 점은, 일반적인 원격 공격자가 즉시 악용할 가능성이 희박하며 정교한 타이밍 공격이 필요함을 의미합니다. 결과적으로 공격 난이도는 'Hard'이며, 단독으로 권한 상승(LPE)을 일으키기보다 커널의 특정 자원 해제 프로세스를 마비시켜 시스템 관리 기능을 무력화하는 방향으로 악용될 가능성이 높습니다.
💥 영향 분석
(1) 기술적 위험: 서비스 거부(DoS). netns (Network Namespace) 제거 또는 conntrack 모듈의 rmmod가 불가능해지며, 커널 스레드(kworker)의 무한 루프로 인한 시스템 자원 고갈 및 불안정성 초래.
(2) 비즈니스 영향: 컨테이너 환경(Kubernetes 등)에서 네트워크 네임스페이스 삭제 실패로 인한 좀비 리소스 증가 및 가용성 저하.
🔗 관련 취약점·체이닝
- 추정: 단독으로는 권한 상승이나 데이터 유출이 불가능한 단순 DoS 유형임.
- 체이닝 경로: [로컬 권한 획득] $\rightarrow$ [본 취약점을 이용한 커널 리소스 고갈/교착 상태 유도] $\rightarrow$ [시스템 관리자의 강제 재부팅 또는 복구 작업 중 발생하는 다른 설정 오류나 취약점 악용] 형태로 이어질 수 있음.
🔎 탐지
(1) 로그 지표: dmesg 또는 /var/log/syslog에서 커널 덤프, soft lockup 경고, 또는 특정 kworker의 CPU 점유율 급증 기록 확인.
(2) 탐지 규칙:
- 로직:
top또는htop에서kworker프로세스가 지속적으로 높은 CPU를 사용하며, 스택 트레이스에nf_conntrack_cleanup_net_list가 포함되어 있는지 확인. - 의사코드:
IF (process == "kworker") AND (cpu_usage > 90%) AND (stack CONTAINS "nf_conntrack_cleanup_net_list") THEN ALERT_DOS
(3) 오탐 시나리오: 대규모 네트워크 트래픽 처리 중 일시적인 커널 부하. $\rightarrow$ 튜닝: 단순 CPU 상승이 아닌,netns삭제 요청 후 응답 없음 상태와 결합하여 탐지.
🛡️ 완화 방안
- 즉시(긴급 차단): 불필요한 일반 사용자의 Netlink 소켓 접근 권한 제한 (Capability 제어). [난이도: 하 / 영향: 낮음 / 검증:
capsh --print확인] - 단기(완화): 시스템 모니터링을 통해
kworker의 비정상적 CPU 점유 및 Netlink 관련 오류 감시. [난이도: 하 / 영향: 없음 / 검증: 모니터링 대시보드 설정] - 근본(해결): 영향받는 커널 버전(2.6.19 ~ 6.16.2 등)을 최신 수정 버전으로 업데이트. 다중 소스 교차검증 결과 일관성이 확인되었으며, EPSS 0.00154 및 실측 악용 예측 'hard' 등급에 따라 우선순위는
monitor로 결정되었으나, 커널 패치가 가장 확실한 해결책임. [난이도: 중 / 영향: 재부팅 필요 / 검증:uname -r버전 확인]
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00154 · exploit=hard · in_scope=None