[방어] 분석 — CVE-2026-31494
CVE-2026-31494 is an out‑of‑bounds write in the macb driver’s ethtool/netlink statistics handling; immediately blacklist the macb module and deny ETHTOOL_GSTATS/ioctl for non‑privileged users while applying kernel patches.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00135 · 악용난이도 hard
🔍 공격 기법
- 로컬 사용자(또는 컨테이너 내부 프로세스)가
CAP_NET_ADMIN권한을 보유하고 있을 경우,ethtool -S <macb‑iface>(ioctl ETHTOOL_GSTATS) 혹은- 직접 만든 Netlink 메시지(
RTM_NEWLINK/RTM_DELLINK)를 통해 macb 드라이버에 전달한다.
gem_get_ethtool_stats()가 활성 큐 수보다 큰MACB_MAX_QUEUES전체에 대해 메모리를 복사하면서 OOB write가 발생하고, 커널 힙이 손상된다.- 손상된 메모리를 이용해 임의 코드 실행 → 루트 권한 획득 또는 컨테이너 네임스페이스 탈출이 가능하다.
악용 가능성: CVSS 벡터 AV:L/AC:L/PR:L/UI:N은 공격자가
💥 영향 분석
- 성공 시 공격자는 커널 수준에서 임의 코드를 실행하여 전체 시스템(호스트·컨테이너) 루트 권한을 얻는다.
- 기밀성·무결성·가용성이 모두
High수준으로 손상되며, 특히 클러스터 환경에서는 하나의 노드 탈취가 전체 서비스 중단으로 이어질 수 있다.
🔗 관련 취약점·체이닝
- 동일한 메모리‑오염(CWE‑119) 패턴을 이용하는 다른 네트워크 드라이버(OOB write)와 연계하면, 이미 존재하는
CAP_NET_ADMIN남용 혹은 부적절하게 서명된 커널 모듈 로드 취약점과 결합해 공격 범위가 확대될 수 있다.
🔎 탐지
로그 지표
dmesg·/var/log/kern.log에"KASAN: vmalloc-out-of-bounds"와 함수명gem_get_ethtool_stats가 포함된 항목.audit.log에서syscall=ioctl,a0=ETHTOOL_GSTATS,exe="/usr/sbin/ethtool"혹은 Netlink 관련socketcall이벤트(family=AF_NETLINK,type=RTM_NEWLINK|RTM_DELLINK)가 기록됨.
SIEM 쿼리 예시 (Splunk 형식)
text
1index=kernel_logs "KASAN: vmalloc-out-of-bounds" AND "gem_get_ethtool_stats" 2| stats count by host, _timetext
1index=audit_logs eventtype="syscall" syscall="ioctl" a0="ETHTOOL_GSTATS" exe="/usr/sbin/ethtool" 2| where user!="root" 3| timechart span=5m counttext
1index=kernel_logs "netlink.*RTM_NEWLINK.*macb" OR "netlink.*RTM_DELLINK.*macb" 2| stats count by host, _time정규식 (로그 전체 탐색)
KASAN: vmalloc-out-of-bounds.*gem_get_ethtool_stats
ethtool.*ETHTOOL_GSTATS.*macb
netlink.*RTM_(NEW|DEL)LINK.*macb
오탐 튜닝
- 정상적인 고성능 macb 장비에서 활성 큐 수가
MACB_MAX_QUEUES와 동일하면 KASAN 로그가 발생하지 않는다. 따라서 “user!=root” 조건을 추가하고, “iface=macb*” 로 필터링해 비특권 사용자의 호출만 경보하도록 한다. - Netlink 메시지는 관리용 스크립트가 주기적으로 실행될 수 있으니,
auditd에pid혹은exe(예:/usr/sbin/ip)를 화이트리스트에 추가해 false‑positive 를 감소시킨다.
🛡️ 완화 방안
-
CAP_NET_ADMIN 제한
- 컨테이너 런타임 설정(
docker run --cap-drop=NET_ADMIN, KubernetessecurityContext.capabilities.drop: ["NET_ADMIN"])을 적용해 비신뢰 프로세스가 해당 권한을 얻지 못하도록 한다.
난이도: 낮‑중, 운영 영향: 네트워크 관리 작업(예: bridge 설정) 제한될 수 있음.
검증: 컨테이너 내부에서capsh --print로CAP_NET_ADMIN없음을 확인.
- 컨테이너 런타임 설정(
-
패치된 드라이버 임시 적용
- 커널 공급자가 제공한 백포트가 포함된 소스 트리를 이용해 macb 모듈을 재컴파일하고, 기존 모듈을 교체한다 (
make modules && insmod ./macb.ko).
난이도: 높음(소스 빌드 필요), 운영 영향: 재부팅 없이 적용 가능하지만 커널 모듈 호환성 검증 필요.
검증:dmesg에 “macb: patched version loaded” 메시지 확인 후, 동일 조건에서 KASAN 로그가 발생하지 않는지 테스트.
- 커널 공급자가 제공한 백포트가 포함된 소스 트리를 이용해 macb 모듈을 재컴파일하고, 기존 모듈을 교체한다 (
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00135 · exploit=hard · in_scope=None