CVE-2026-97965 in Linux
Tóm tắt
Bởi VulDB • 25/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
vxlan: khởi tạo _md trong hàm vxlan_xmit_one()
Nếu một thiết bị VXLAN được cấu hình với cả VXLAN_F_COLLECT_METADATA và VXLAN_F_GBP, và một gói tin được truyền qua nó bằng cách sử dụng ip_tunnel_info bên ngoài thiếu cờ IP_TUNNEL_VXLAN_OPT_BIT, thì md sẽ vẫn trỏ đến biến cục diện _md chưa được khởi tạo:
if (test_bit(IP_TUNNEL_VXLAN_OPT_BIT, info->key.tun_flags)) {
if (info->options_len < sizeof(*md)) goto drop; md = ip_tunnel_info_opts(info); }
Vì IP_TUNNEL_VXLAN_OPT_BIT không được đặt, md sẽ không được cập nhật và vẫn trỏ đến _md. Sau đó, hàm vxlan_build_skb() được gọi với tham số md, cuối cùng dẫn đến việc gọi vxlan_build_gbp_hdr():
if (vxflags & VXLAN_F_GBP) vxlan_build_gbp_hdr(vxh, md);
Bên trong vxlan_build_gbp_hdr(), giá trị md->gbp sẽ được đọc:
if (!md->gbp) return; gbp = (struct vxlanhdr_gbp *)vxh; ... if (md->gbp & VXLAN_GBP_DONT_LEARN) gbp->dont_learn = 1;
Nếu vùng nhớ stack chứa dữ liệu rác, điều này sẽ gây ra: 1) Cờ VXLAN_HF_GBP được đặt một cách sai lệch trong tiêu đề VXLAN. 2) Các giá trị gbp->dont_learn và gbp->policy_applied bị thiết lập dựa trên các bit từ stack. 3) gbp->policy_id nhận 16 bit dữ liệu chưa khởi tạo từ kernel stack, làm rò rỉ thông tin này ra mạng (wire).
Khắc phục vấn đề bằng cách khởi tạo _md về giá trị 0. Nếu IP_TUNNEL_VXLAN_OPT_BIT không có mặt, md->gbp sẽ giữ nguyên là 0, và hàm vxlan_build_gbp_hdr() sẽ trả về sớm mà không làm thay đổi tiêu đề VXLAN.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.