🇰🇷 한글 설명
Linux 커널의 TCP 스택에서 자식 소켓을 강제 종료하기 전에 sock_ops 콜백 플래그를 초기화하지 않아 발생하는 취약점입니다. 소켓 설정 실패 시 잠금(lock) 없이 BPF 콜백이 호출되어 커널 경고 및 시스템 불안정을 유발할 수 있습니다.
💡 쉬운 설명
인터넷 연결을 만드는 과정에서 오류가 발생했을 때, 정리 작업이 제대로 이루어지지 않아 컴퓨터의 핵심 시스템(커널)이 혼란을 겪는 문제입니다. 이로 인해 시스템이 멈추거나 예기치 않은 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tcp: clear sock_ops cb flags before force-closing a child socket
A child socket inherits the listener's bpf_sock_ops_cb_flags via
sk_clone_lock(). If its setup fails in tcp_v4_syn_recv_sock() /
tcp_v6_syn_recv_sock(), the child is freed through put_and_exit, where
inet_csk_prepare_forced_close() drops the socket lock and tcp_done() runs
without it.
If BPF_SOCK_OPS_STATE_CB_FLAG was inherited, tcp_done() -> tcp_set_state()
calls tcp_call_bpf(), which expects the lock and trips sock_owned_by_me():
WARNING: include/net/sock.h:1799 at tcp_set_state+0x433/0x550
RIP: 0010:tcp_set_state+0x433/0x550 include/net/sock.h:1799
Call Trace:
<IRQ>
tcp_done+0xba/0x250 net/ipv4/tcp.c:5095
tcp_v4_syn_recv_sock+0x850/0xa50 net/ipv4/tcp_ipv4.c:1787
tcp_check_req+0xf30/0x1360 net/ipv4/tcp_minisocks.c:926
tcp_v4_rcv+0x1047/0x1b50 net/ipv4/tcp_ipv4.c:2164
</IRQ>
The child is freed before it is ever established, so it should run no
sock_ops callback. Clear its cb flags in inet_csk_prepare_for_destroy_sock(),
the common point for the IPv4, IPv6 and chtls forced-close paths and for the
MPTCP ->syn_recv_sock() failure path (dispose_child), which reaches tcp_done()
on a child that was never established too.
📍 영향받는 시스템
Linux Kernel (TCP/IP stack components)
⚔️ 공격 벡터
특수하게 조작된 TCP SYN 패킷을 전송하여 소켓 생성 과정에서 오류를 유도하는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인하십시오.