🇰🇷 한글 설명
Linux 커널의 IPv6 SRv6(Segment Routing) 모듈에서 seg6_make_flowlabel() 함수가 flow dissector를 호출할 때 네트워크 네임스페이스 포인터가 없는 skb를 처리하여 경고(WARNING)가 발생하는 문제입니다. 해당 함수에 이미 존재하는 net 포인터를 사용하도록 skb_get_hash_net()으로 수정하여 해결되었습니다.
💡 쉬운 설명
리눅스 커널의 네트워크 경로 설정 기능에서 잘못된 정보를 참조해 경고가 발생하는 결함입니다. 특정 조건에서 시스템 안정성에 영향을 줄 수 있어 커널 업데이트로 수정해야 합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv6: sr: use skb_get_hash_net() in seg6_make_flowlabel()
Since commit d58e468b1112 ("flow_dissector: implements flow dissector
BPF hook") __skb_flow_dissect() needs a net pointer, either from
skb->dev, skb->sk, or since commit 3cbf4ffba5ee ("net: plumb network
namespace into __skb_flow_dissect") a caller provided pointer.
syzbot was able to reach seg6_make_flowlabel() with an skb having
neither skb->dev nor skb->sk set: a TIPC UDP bearer sends a discovery
message through an IPv4 route using seg6 encap, while
net.ipv6.seg6_flowlabel is set to 1.
seg6_make_flowlabel() already has a net pointer, use skb_get_hash_net().
WARNING: net/core/flow_dissector.c:1131 at __skb_flow_dissect+0x910/0x5368 net/core/flow_dissector.c:1126, CPU#0: syz.0.17/4930
Call trace:
__skb_flow_dissect+0x910/0x5368 net/core/flow_dissector.c:1126 (P)
__skb_get_hash_net+0xe0/0x29c net/core/flow_dissector.c:1903
skb_get_hash include/linux/skbuff.h:1663 [inline]
seg6_make_flowlabel+0xcc/0x1ec net/ipv6/seg6_iptunnel.c:132
__seg6_do_srh_encap+0x320/0xbf4 net/ipv6/seg6_iptunnel.c:161
seg6_do_srh+0x4b4/0xa44 net/ipv6/seg6_iptunnel.c:431
seg6_output_core+0x164/0x688 net/ipv6/seg6_iptunnel.c:681
seg6_output+0x44/0x1ac net/ipv6/seg6_iptunnel.c:744
lwtunnel_output+0x3d0/0x664 net/core/lwtunnel.c:356
dst_output include/net/dst.h:470 [inline]
ip_local_out+0x110/0x148 net/ipv4/ip_output.c:131
iptunnel_xmit+0x50c/0xd38 net/ipv4/ip_tunnel_core.c:97
udp_tunnel_xmit_skb+0x220/0x348 net/ipv4/udp_tunnel_core.c:187
tipc_udp_xmit+0x75c/0x9c0 net/tipc/udp_media.c:202
tipc_udp_send_msg+0x214/0x374 net/tipc/udp_media.c:274
tipc_bearer_xmit_skb+0x260/0x3b0 net/tipc/bearer.c:576
tipc_enable_bearer net/tipc/bearer.c:366 [inline]
__tipc_nl_bearer_enable+0xc90/0xfb0 net/tipc/bearer.c:1048
tipc_nl_bearer_enable+0x2c/0x48 net/tipc/bearer.c:1057
genl_family_rcv_msg_doit+0x1e4/0x2d4 net/netlink/genetlink.c:1114
📍 영향받는 시스템
Linux 커널 (해당 수정 커밋 이전 버전, IPv6 SRv6 seg6 기능 사용 환경)
⚔️ 공격 벡터
로컬 또는 네트워크 상에서 TIPC UDP 베어러 등을 통해 seg6 encap 경로를 유발하는 트래픽을 발생시키는 방식으로 추정되나 CVSS 점수가 미정이므로 상세 악용 조건은 불명확합니다.
🛡️ 대응 방법
배포판 벤더가 제공하는 최신 Linux 커널 보안 업데이트를 적용하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 권고나 패치된 커널 버전 및 changelog와 비교하여 해당 수정이 포함되었는지 확인합니다.