🇰🇷 한글 설명
Linux 커널의 MPTCP 구성 요소에서 can_accept_new_subflow 함수 호출 시 NULL 포인터 역참조로 인해 커널 패닉이 발생할 수 있는 취약점입니다. 동일한 요청에 대해 짧은 시간 내에 두 개의 SYN-ACK 패킷이 수신될 경우, subflow_req->msk 값이 NULL이 되어 시스템이 중단될 수 있습니다.
💡 쉬운 설명
네트워크 연결을 처리하는 과정에서 중복된 신호가 빠르게 들어오면 컴퓨터의 핵심 시스템(커널)이 처리 오류를 일으켜 갑자기 멈춰버리는 문제입니다. 이는 공격자가 의도적으로 조작된 패킷을 보내 시스템을 다운시킬 수 있음을 의미합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mptcp: fix NULL pointer in can_accept_new_subflow
When testing valkey benchmark tool with MPTCP, the kernel panics in
'mptcp_can_accept_new_subflow' because subflow_req->msk is NULL.
Call trace:
mptcp_can_accept_new_subflow (./net/mptcp/subflow.c:63 (discriminator 4)) (P)
subflow_syn_recv_sock (./net/mptcp/subflow.c:854)
tcp_check_req (./net/ipv4/tcp_minisocks.c:863)
tcp_v4_rcv (./net/ipv4/tcp_ipv4.c:2268)
ip_protocol_deliver_rcu (./net/ipv4/ip_input.c:207)
ip_local_deliver_finish (./net/ipv4/ip_input.c:234)
ip_local_deliver (./net/ipv4/ip_input.c:254)
ip_rcv_finish (./net/ipv4/ip_input.c:449)
...
According to the debug log, the same req received two SYN-ACK in a very
short time, very likely because the client retransmits the syn ack due
to multiple reasons.
Even if the packets are transmitted with a relevant time interval, they
can be processed by the server on different CPUs concurrently). The
'subflow_req->msk' ownership is transferred to the subflow the first,
and there will be a risk of a null pointer dereference here.
This patch fixes this issue by moving the 'subflow_req->msk' under the
`own_req == true` conditional.
Note that the !msk check in subflow_hmac_valid() can be dropped, because
the same check already exists under the own_req mpj branch where the
code has been moved to.
📍 영향받는 시스템
MPTCP 기능이 활성화된 Linux 커널 버전
⚔️ 공격 벡터
조작된 SYN-ACK 패킷을 짧은 간격으로 반복 전송하여 커널 패닉 유도
🛡️ 대응 방법
해당 취약점이 수정된 최신 Linux 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전을 확인하여 취약점이 해결된 최신 패치 버전인지 확인합니다.