🇰🇷 한글 설명
Linux 커널의 TIPC 프로토콜에서 MTU(최대 전송 단위) 값에 대한 상한선 검증이 누락되어 발생하는 취약점입니다. 사용자가 65535를 초과하는 MTU 값을 설정할 경우 값이 잘리면서(truncation) 0이 될 수 있으며, 이로 인해 0으로 나누기 연산이 발생하여 시스템 크래시(DoS)를 유발할 수 있습니다.
💡 쉬운 설명
네트워크 설정값에 너무 큰 숫자를 입력하면 컴퓨터가 계산 오류를 일으켜 갑자기 멈추거나 꺼질 수 있는 문제입니다. 공격자가 특수한 값을 보내 시스템을 마비시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tipc: fix u16 MTU truncation in media and bearer MTU validation
Both TIPC_NL_MEDIA_SET and TIPC_NL_BEARER_SET accept user-supplied
MTU values but only enforce a minimum bound, not a maximum. When a user
sets the MTU to a value exceeding U16_MAX (65535), it passes validation
but is silently truncated when assigned to u16 fields l->mtu and
l->advertised_mtu in tipc_link_create(). Values like 65536 (0x10000)
truncate to 0, causing a division by zero in tipc_link_set_queue_limits()
which computes TIPC_MAX_PUBL / (l->mtu / ITEM_SIZE). Other overflowing
values (e.g. 65537-131071) produce small incorrect MTU values, resulting
in link malfunction behaviors.
Crash stack (triggered as unprivileged user via user namespace):
tipc_link_set_queue_limits net/tipc/link.c:2531
tipc_link_create net/tipc/link.c:520
tipc_node_check_dest net/tipc/node.c:1279
tipc_disc_rcv net/tipc/discover.c:252
tipc_rcv net/tipc/node.c:2129
tipc_udp_recv net/tipc/udp_media.c:392
Two independent paths lack the upper bound check:
1. tipc_udp_mtu_bad() -- called from __tipc_nl_media_set() (MEDIA_SET)
2. inline check in __tipc_nl_bearer_set() at bearer.c:1160 (BEARER_SET)
Fix both by rejecting MTU values above U16_MAX.
📍 영향받는 시스템
TIPC 프로토콜을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
사용자 네임스페이스를 통해 TIPC_NL_MEDIA_SET 또는 TIPC_NL_BEARER_SET 메시지에 매우 큰 MTU 값을 포함하여 전송
🛡️ 대응 방법
MTU 값이 U16_MAX(65535)를 초과하지 않도록 커널 패치를 적용하거나 TIPC 모듈 사용을 제한
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 수정된 최신 보안 패치 버전인지 확인