🔍 CVE-2026-31669

9.8
CVSS Score
CRITICAL
2026-04-24
2026-10-19 19:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 MPTCP 구현 중 IPv6 서브플로우 소켓 할당 과정에서 발생하는 Slab Use-After-Free 취약점입니다. 초기화 순서 문제로 인해 TCPv6 전용 슬랩 캐시 대신 일반 kmalloc 캐시가 사용되면서, RCU 읽기 섹션 중 해제된 메모리에 접근할 수 있게 됩니다.

💡 쉬운 설명

네트워크 연결을 관리하는 메모리 공간이 적절한 보호 장치 없이 해제되어, 이미 사라진 데이터를 다시 읽으려다 시스템 오류나 보안 문제가 발생하는 현상입니다. 이는 주로 IPv6를 사용하는 다중 경로 TCP 연결 환경에서 발생할 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: mptcp: fix slab-use-after-free in __inet_lookup_established The ehash table lookups are lockless and rely on SLAB_TYPESAFE_BY_RCU to guarantee socket memory stability during RCU read-side critical sections. Both tcp_prot and tcpv6_prot have their slab caches created with this flag via proto_register(). However, MPTCP's mptcp_subflow_init() copies tcpv6_prot into tcpv6_prot_override during inet_init() (fs_initcall, level 5), before inet6_init() (module_init/device_initcall, level 6) has called proto_register(&tcpv6_prot). At that point, tcpv6_prot.slab is still NULL, so tcpv6_prot_override.slab remains NULL permanently. This causes MPTCP v6 subflow child sockets to be allocated via kmalloc (falling into kmalloc-4k) instead of the TCPv6 slab cache. The kmalloc-4k cache lacks SLAB_TYPESAFE_BY_RCU, so when these sockets are freed without SOCK_RCU_FREE (which is cleared for child sockets by design), the memory can be immediately reused. Concurrent ehash lookups under rcu_read_lock can then access freed memory, triggering a slab-use-after-free in __inet_lookup_established. Fix this by splitting the IPv6-specific initialization out of mptcp_subflow_init() into a new mptcp_subflow_v6_init(), called from mptcp_proto_v6_init() before protocol registration. This ensures tcpv6_prot_override.slab correctly inherits the SLAB_TYPESAFE_BY_RCU slab cache.

📍 영향받는 시스템

Linux Kernel (MPTCP 기능이 활성화된 버전)

⚔️ 공격 벡터

특수하게 조작된 IPv6 MPTCP 패킷을 전송하여 커널의 ehash 테이블 조회 과정에서 Use-After-Free 유도

🛡️ 대응 방법

커널 패치를 적용하여 MPTCP의 IPv6 초기화 순서를 프로토콜 등록 이후로 조정

🔧 검증 코드

커널 버전과 MPTCP 설정 활성화 여부를 확인하여 취약한 환경인지 판단합니다.

Shell / Script
uname -r && grep CONFIG_MPTCP /boot/config-$(uname -r)

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel