[방어] 분석 — CVE-2025-71088
CVE-2025-71088 is a local race condition in the Linux MPTCP stack that can trigger a kernel panic, and the highest‑priority mitigation today is to disable MPTCP (net.mptcp.mptcp_enabled=0) on all affected hosts.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00121 · 악용난이도 hard
🔍 공격 기법
MPTCP 서브플로우를 동시에 다수 생성하도록 조작된 TCP SYN 패킷을 로컬 프로세스가 빠르게 전송하면, net/mptcp/subflow.c 의 subflow_data_ready() 에서 fallback 상태가 비동기적으로 업데이트되는 레이스 컨디션이 발생합니다. 이 레이스는 커널 어설션을 일으켜 Oops → panic 로 이어지며 시스템 전체가 재부팅됩니다. 현재 알려진 바에 따르면 원격에서 직접 트리거할 구체적인 패킷 시퀀스는 확인되지 않았으며, 공격 전제조건은 “해당 커널이 실행 중이며 MPTCP 연결을 생성·관리할 수 있는 로컬 권한(Low) 프로세스”입니다.
악용 가능성: 1. CVSS AV:L은 공격자가 로컬 시스템에 접근해야 함을 의미하며, 실제 조건으로는 해당 호스트에서 MPTCP 소켓을 생성할 수 있는 권한이 필요합니다.
2. AC:L·PR:L·UI:N 조합은 복잡도가 낮고(특별한 전제조건 없이), 저권한(Low privilege) 사용자라도 별도의 사용자 입력 없이 자동으로 트리거될 수 있음을 나타냅니다.
3. EPSS = 0.00121은 현재까지 관측된 실제 악용 사례가 매우 드물지만, 완전히 배제되지 않는 수준이며, KEV에 등재되지 않은 점은 아직 광범위하게 이용되고 있지는 않다는 것을 의미합니다.
4. 이 취약점의 트리거 조건은 동일한 MPTCP 서브플로우에 대해 두 개 이상의 연결을 거의 동시에 시도할 때 발생하는 레이스이며, 이는 프로세스가 짧은 시간 안에 다중 connect() 호출을 수행함으로써 재현될 수 있습니다.
5. 공격 표면은 커널 네트워킹 스택의 net/mptcp/subflow.c 함수로, MPTCP를 지원하는 모든 리눅스 배포판에서 해당 파일이 로드된 경우 노출됩니다; 외부 프로토콜 자체는 TCP/IPv4·IPv6 위에 구현된 MPTCP이며, 별도의 네트워크 포트가 필요하지 않습니다.
6. 따라서 공격자는 로컬 권한을 가진 사용자라면 비교적 낮은 난이도로 레이스를 유발해 서브플로우 상태를 일관성 없이 조
💥 영향 분석
- 가용성: 레이스 컨디션에 의해 커널 panic 발생 → 전체 시스템 다운, 재부팅 필요 (A:H).
- 기밀성/무결성: CVSS 벡터에
C:N/I:N로 표시되므로 직접적인 데이터 유출·조작 위험은 없습니다. 다만 서비스 중단이 장시간 지속될 경우 간접적인 비즈니스 손실이 발생합니다.
🔗 관련 취약점·체이닝
MPTCP 서브플로우 관리와 fallback 로직 사이의 동기화 오류는 과거에도 보고된 바 있으며, 유사한 레이스 컨디션은 TCP Fast Open 등 다른 커널 네트워크 서브시스템에서도 발견되었습니다. 이러한 패턴을 이용해 동일 호스트에서 추가적인 DoS 혹은 메모리 손상 취약점을 연쇄적으로 활용할 가능성이 존재합니다(구체적 CVE 번호는 확인되지 않음).
🔎 탐지
-
로그 지표
dmesg또는/var/log/kern.log에 기록되는WARNING: CPU:와subflow_data_ready+0x... net/mptcp/subflow.c:1515문자열.syslog에 나타나는mptcp: fallback earlier on simult connection메시지.
-
SIEM 쿼리 예시 (Elastic Security / Splunk)
1source:"/var/log/kern.log" 2| regex _raw="WARNING: CPU: \d+ PID: \d+ .* subflow_data_ready\+0x[0-9a-f]+/0x[0-9a-f]+ net/mptcp/subflow\.c:1515" 3| stats count by host, pid, comm, _time 4| where count > 2 and (_time - earliest(_time)) < 60- 정규식 예시 (rsyslog, auditd)
1^WARNING: CPU: \d+ PID: \d+ .* subflow_data_ready\+0x[0-9a-f]+/0x[0-9a-f]+ net/mptcp/subflow\.c:1515$- 오탐 튜닝
- 개발·테스트 환경에서 MPTCP를 의도적으로 사용 중인 경우 동일 로그가 반복될 수 있습니다. 위 쿼리의
count > 2와 “60초 내 발생” 조건을 조정해 정상 테스트 트래픽과 구분하십시오. - 장기간 동일 호스트에 경고가 지속적으로 기록된다면, 커널 패치 전까지 로그 레벨을 낮추는(
loglevel=4) 옵션을 적용하고, 위 쿼리의 임계값을count > 5로 상향하는 것이 오탐 감소에 도움이 됩니다.
- 개발·테스트 환경에서 MPTCP를 의도적으로 사용 중인 경우 동일 로그가 반복될 수 있습니다. 위 쿼리의
🛡️ 완화 방안
-
즉시(긴급 차단)
- MPTCP 전체 비활성화:
sysctl -w net.mptcp.mptcp_enabled=0(또는/proc/sys/net/mptcp/enabled에 0 기록).- 구현 난이도: ★☆☆ (한 줄 명령)
- 운영 영향: MPTCP를 활용하는 애플리케이션은 연결 실패(성능 저하 없음) → 서비스에 직접적인 기능 제한이 있을 경우 사전 공지가 필요합니다.
- 검증 방법:
sysctl net.mptcp.mptcp_enabled로 0 확인 후, 동일 조건의 테스트 트래픽을 재실행해 경고 로그가 발생하지 않는지 확인합니다.
- MPTCP 전체 비활성화:
-
단기(완화)
-
서브플로우 동시 생성 제한:
sysctl -w net.mptcp.max_subflows=1- 구현 난이도: ★★☆ (재부팅 시 영구 적용 필요)
- 운영 영향: 다중 경로 전송 이점 감소, 가용성은 유지.
- 검증 방법:
sysctl net.mptcp.max_subflows로 값 확인 후,ss -i로 현재 서브플로우 개수 점검.
-
커널 패닉 자동 복구 정책 적용:
-
1echo 1 > /proc/sys/kernel/panic_on_oops 2sysctl -w kernel.panic=10 # Oops 발생 시 10초 후 재부팅 1 - 구현 난이도: ★★☆ (시스템 전역 설정) 2 - 운영 영향: 서비스 중단 시간이 최소화되지만, 자동 재부팅에 따른 일시적 가용성 손실은 존재. 3 - 검증 방법: `sysctl kernel.panic` 로 10 확인 후, 테스트 환경에서 강제 Oops 발생 시 재부팅 동작을 관찰. - 근본(해결)
- 공식 패치 적용: 배포된 커널 버전 6.1.161 이상·6.2.2‑6.6.121·6.7.1‑6.12.66·6.13.1‑6.18.5 등으로 업그레이드합니다.
- 구현 난이도: ★★★ (커널 교체 및 재부팅 필요)
- 운영 영향: 전체 시스템 재시작, 서비스 중단 시간 발생 → 유지보수 창에 맞춰 적용 권장.
- 검증 방법:
uname -r로 커널 버전 확인 후, 동일 테스트 시나리오에서 경고 로그가 재현되지 않는지 확인합니다.
- 공식 패치 적용: 배포된 커널 버전 6.1.161 이상·6.2.2‑6.6.121·6.7.1‑6.12.66·6.13.1‑6.18.5 등으로 업그레이드합니다.
우선순위 근거 – 다중 소스 교차검증 결과 CVSS 5.5·EPSS 0.00121·exploit hard 로 평가되었으며, KEV에 등재되지 않아 “monitor” 단계가 기본이지만, 로그에서 반복적인 kernel panic 가 발생할 경우 서비스 가용성 손실 위험이 크므로 즉시 MPTCP 비활성화(긴급 차단)를 권고합니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00121 · exploit=hard · in_scope=None