🇰🇷 한글 설명
Linux 커널의 netfilter conntrack 구성 요소에서 타임아웃 값이 잘못 계산되는 취약점입니다. ctnetlink를 통해 타임아웃을 설정하거나 조회할 때 타임스탬프가 중복 계산되거나 잘못 차감되어 연결 추적 정보의 무결성이 깨질 수 있습니다.
💡 쉬운 설명
인터넷 연결 상태를 관리하는 시스템의 시계가 잘못 작동하여 연결 유지 시간이 엉뚱하게 계산되는 문제입니다. 이로 인해 네트워크 연결이 예상보다 빨리 끊기거나 비정상적으로 유지될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: conntrack: fix wrong ct->timeout value
(struct nf_conn)->timeout is an interval before the conntrack
confirmed. After confirmed, it becomes a timestamp.
It is observed that timeout of an unconfirmed conntrack:
- Set by calling ctnetlink_change_timeout(). As a result,
`nfct_time_stamp` was wrongly added to `ct->timeout` twice.
- Get by calling ctnetlink_dump_timeout(). As a result,
`nfct_time_stamp` was wrongly subtracted.
Call Trace:
<TASK>
dump_stack_lvl
ctnetlink_dump_timeout
__ctnetlink_glue_build
ctnetlink_glue_build
__nfqnl_enqueue_packet
nf_queue
nf_hook_slow
ip_mc_output
? __pfx_ip_finish_output
ip_send_skb
? __pfx_dst_output
udp_send_skb
udp_sendmsg
? __pfx_ip_generic_getfrag
sock_sendmsg
Separate the 2 cases in:
- Setting `ct->timeout` in __nf_ct_set_timeout().
- Getting `ct->timeout` in ctnetlink_dump_timeout().
Pablo appends:
Update ctnetlink to set up the timeout _after_ the IPS_CONFIRMED flag is
set on, otherwise conntrack creation via ctnetlink breaks.
Note that the problem described in this patch occurs since the
introduction of the nfnetlink_queue conntrack support, select a
sufficiently old Fixes: tag for -stable kernel to pick up this fix.
📍 영향받는 시스템
nfnetlink_queue conntrack 지원이 도입된 이후의 Linux 커널 버전
⚔️ 공격 벡터
ctnetlink 인터페이스를 통해 조작된 타임아웃 값을 전송하여 연결 추적 메커니즘을 교란
🛡️ 대응 방법
해당 취약점이 수정된 최신 안정화(stable) 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전 이후인지 확인