🇰🇷 한글 설명
Linux 커널의 MPTCP 경로 관리자에서 ID 0 엔드포인트를 제거할 때 대기 중인 ADD_ADDR 공지 항목이 제대로 삭제되지 않는 취약점입니다. 이로 인해 나중에 ID 0이 재선택될 경우 오래된 항목이 남아 커널 경고(WARN_ON_ONCE)가 발생할 수 있습니다.
💡 쉬운 설명
네트워크 연결을 관리하는 리눅스 커널의 특정 기능에서, 사용하지 않는 연결 정보를 지울 때 일부 찌꺼기가 남는 문제입니다. 이 찌꺼기 때문에 나중에 시스템이 혼란을 겪어 경고 메시지를 출력할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mptcp: pm: kernel: drop pending ADD_ADDR when removing ID0
The in-kernel MPTCP path manager can leave a stale ADD_ADDR announcement
entry alive when removing the id 0 endpoint. This happens because the id 0
removal path does not tear down pending announcements, unlike the non-zero
id path.
When the PM later reselects id 0 after adding another signal endpoint, it
finds the stale anno_list entry and hits WARN_ON_ONCE(mptcp_pm_is_kernel())
in mptcp_pm_announced_alloc().
Root cause: asymmetry between removal paths.
- Non-zero id path: mptcp_nl_remove_subflow_and_signal_addr() calls
mptcp_pm_remove_announced() to clean up.
- Id 0 path: mptcp_nl_remove_id_zero_address() skips cleanup entirely.
Fix by making the id 0 path symmetric: call mptcp_pm_announced_remove()
and decrement add_addr_signaled before queuing the RM_ADDR.
Subtle detail: signal endpoints are stored in anno_list with port 0, but
msk_local carries the connection's local port. In other words, entries
linked to ID0 paths should have port == 0. A follow-up patch will ensure
that. mptcp_pm_announced_remove() uses use_port=true for comparison. So
clear the port before the lookup.
📍 영향받는 시스템
Linux kernel (MPTCP 기능이 활성화된 버전)
⚔️ 공격 벡터
로컬 시스템에서 MPTCP 엔드포인트를 빈번하게 추가 및 제거하여 커널 경고를 유발하는 방식
🛡️ 대응 방법
MPTCP 관련 커널 패치가 적용된 최신 리눅스 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이상인지 확인