[공격] 분석 — CVE-2026-23112
A critical memory corruption vulnerability in Linux kernel's nvmet-tcp allows remote attackers to cause a system crash or potentially execute code via malformed PDU packets; immediate patching is required.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.00399 · 악용난이도 moderate
🔍 공격 기법
- 트리거 조건:
nvmet_tcp_build_pdu_iovec()함수에서 PDU(Protocol Data Unit)의 length 또는 offset 값이sg_cnt를 초과하여 전달될 때 발생. 경계 검사(bounds check) 부재로 인해cmd->req.sg범위를 벗어난 메모리 영역을 참조하며, 잘못된sg->length/offset값을 사용하여_copy_to_iter()호출 시 GPF(General Protection Fault) 또는 KASAN 위반을 유발함. - 공격 단계:
- 정찰: 타겟 서버가 NVMe-over-TCP(nvmet-tcp) 대상(Target)으로 동작 중인지 포트 스캔 및 프로토콜 핸드셰이크 확인.
- 초기 접근: 네트워크를 통해 인증되지 않은 상태로 TCP 연결 수립 (AV:N, PR:N).
- 실행/권한 획득: 조작된 PDU 패킷(비정상적인 length/offset 포함)을 전송하여 커널 메모리 오염 유도. 추정: 단순 Crash를 넘어 Out-of-bounds Read/Write를 통한 임의 코드 실행 시도 가능.
- 영향: 커널 패닉으로 인한 서비스 거부(DoS) 또는 권한 상승.
- 공격 표면:
- 프로토콜: NVMe over TCP (TCP 기반).
- 함수/엔드포인트:
nvmet_tcp_build_pdu_iovec내의 PDU 처리 로직. - 파라미터: PDU 헤더 내의 데이터 길이 및 오프셋 필드.
- CVSS 벡터 분석:
AV:N/AC:L/PR:N/UI:N은 인증이나 사용자 상호작용 없이 네트워크상에서 매우 낮은 복잡도로 공격이 가능함을 의미하며, 이는 커널 레벨의 Memory-Corruption과 결합되어 즉각적인 치명성을 가짐.
악용 가능성: 본 취약점은 AV:N/AC:L/PR:N/UI:N 벡터가 가리키듯, 인증되지 않은 원격 공격자가 네트워크를 통해 특수하게 조작된 NVMe-over-TCP PDU(Protocol Data Unit)를 전송함으로써 트리거할 수 있어 진입 장벽이 매우 낮습니다. 공격 표면은 Linux 커널의 nvmet-tcp 모듈 내 nvmet_tcp_build_pdu_iovec() 함수이며, 특히 PDU의 length 또는 offset 파라미터를 조작하여 경계 검사를 우회하는 것이 핵심입니다. EPSS 수치가 0.00399로 낮고 KEV에 등재되지 않은 점은 현재까지 대규모 자동화 공격 도구(Weaponized Exploit)가 보급되지 않았음을 의미하지만, 이론적 심각도와 별개로 커널 메모리 영역의 GPF/KASAN을 유발하는 Out-of-bounds Read/Write 특성상 실전에서는 시스템 가용성을 즉시 파괴하는 DoS 공격으로 악용될 가능성이 큽니다. 만약 공격자가 정교하게 조작된 sg_idx와 bvec 값을 통해 커널 메모리 레이아웃을 제어할 수 있다면, 단순 크래시를 넘어 권한 상승(LPE)이나 임의 코드 실행으로 이어지는 체이닝의 시작점이 될 수 있습니다. 결과적으로 네트워크에 노출된 NVMe-over-TCP 타겟 서버라면 별도의 사용자 상호작용 없이도 즉각적인 공격 대상이 되는 구조입니다.
💥 영향 분석
- 기술적 위험:
- 시스템 중단: 잘못된 메모리 참조로 인한 Kernel Panic(GPF) 발생 $\rightarrow$ 전체 시스템 다운 및 서비스 불능 상태.
- 데이터 유출/변조: 추정: OOB Read를 통해 커널 메모리의 민감 정보가 유출되거나, OOB Write를 통해 커널 구조체가 변조될 위험이 있음.
- 비즈니스 영향:
- 가용성 상실: 스토리지 서버의 다운타임으로 인해 해당 스토리지를 사용하는 모든 클라이언트 서비스 중단.
- 신뢰도 하락: 인프라 핵심 계층인 커널 취약점으로 인한 데이터 무결성 훼손 가능성 존재.
🔗 관련 취약점·체이닝
- 취약점 체이닝 패턴:
- 정보 유출 $\rightarrow$ 권한 상승: 추정: OOB Read를 통해 KASLR(Kernel Address Space Layout Randomization) 우회를 위한 커널 베이스 주소를 획득한 후, 동일한 Memory-Corruption 결함을 이용하여 함수 포인터를 덮어쓰는 방식으로 RCE 및 권한 상승 체이닝 가능.
- DoS $\rightarrow$ 가용성 파괴: 단일 패킷으로 즉각적인 Kernel Panic을 유발하므로 별도의 체이닝 없이도 서비스 완전 중단 가능.
- 유형 수준 분석: 본 취약점은
CWE-125 (Out-of-bounds Read)또는CWE-787 (Out-of-bounds Write)유형으로, 커널 공간의 메모리 안전성 결함이 다른 메모리 보호 기법(SMEP/SMAP) 우회 기법과 결합될 때 위험도가 극대화됨.
🔎 탐지
- 로그 지표:
dmesg또는/var/log/syslog내의General Protection Fault,KASAN: slab-out-of-bounds,nvmet_tcp관련 커널 스택 트레이스 확인.
- 탐지 규칙 예시:
- IDS/IPS 패턴: NVMe over TCP 프로토콜 분석을 통해 PDU 헤더의 length 필드가 비정상적으로 크거나, 정의된 SG(Scatter-Gather) 리스트 범위를 초과하는 요청 패킷 탐지.
- SIEM 쿼리 (추정):
process == "kworker" AND message contains ("GPF" OR "KASAN") AND message contains "nvmet_tcp_build_pdu_iovec"
- 오탐 시나리오 및 튜닝:
- 네트워크 불안정으로 인한 패킷 손상이나 비표준 NVMe 구현체 사용 시 오탐 가능성 있음. 실제
nvmet모듈이 로드되어 있고 외부 TCP 연결이 활성화된 상태에서만 경보가 발생하도록 필터링 필요.
- 네트워크 불안정으로 인한 패킷 손상이나 비표준 NVMe 구현체 사용 시 오탐 가능성 있음. 실제
🛡️ 완화 방안
- 즉시 (긴급 차단):
- ACL 설정: NVMe-over-TCP 서비스 포트(기본 4420)에 대해 신뢰할 수 있는 클라이언트 IP만 접근 가능하도록 방화벽 화이트리스트 적용. (난이도: 하 / 영향: 낮음 / 검증:
nmap스캔) - 모듈 비활성화: 사용하지 않는 경우
modprobe -r nvmet_tcp로 모듈 제거. (난이도: 하 / 영향: 높음(서비스 중단) / 검증:lsmod)
- ACL 설정: NVMe-over-TCP 서비스 포트(기본 4420)에 대해 신뢰할 수 있는 클라이언트 IP만 접근 가능하도록 방화벽 화이트리스트 적용. (난이도: 하 / 영향: 낮음 / 검증:
- 단기 (완화):
- KASAN/Hardening: 커널 컴파일 옵션 및 보안 강화 설정을 통해 메모리 오염 시 즉시 패닉을 유도하여 임의 코드 실행 가능성을 차단(DoS로 위험 수준 낮춤). (난이도: 중 / 영향: 성능 저하 가능성 / 검증: 커널 설정 확인)
- 근본 (해결):
- 커널 업데이트: 다중 소스 교차검증을 통해 일관성이 확인된 취약점이므로, 영향받는 버전(5.0 ~ 6.18.10 등)에서 패치된 최신 커널 버전으로 업그레이드. (난이도: 중 / 영향: 재부팅 필요/가용성 일시 중단 / 검증:
uname -r확인) - 우선순위 근거: 본 리포트는 다중 소스 교차검증과 실측 EPSS(0.00399, moderate)를 기반으로 하며, CVSS 9.8의 높은 이론적 심각도로 인해 '이번 주 내' 대응이 필요한
scheduled등급으로 결정됨.
- 커널 업데이트: 다중 소스 교차검증을 통해 일관성이 확인된 취약점이므로, 영향받는 버전(5.0 ~ 6.18.10 등)에서 패치된 최신 커널 버전으로 업그레이드. (난이도: 중 / 영향: 재부팅 필요/가용성 일시 중단 / 검증:
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=9.8 · non-KEV · EPSS=0.00399 · exploit=moderate · in_scope=None