{"id":14959,"date":"2026-09-04T19:02:19","date_gmt":"2026-09-04T11:02:19","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63921"},"modified":"2026-09-04T19:02:19","modified_gmt":"2026-09-04T11:02:19","slug":"cve-2026-63921","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63921","title":{"rendered":"CVE-2026-63921 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nip6: vti: Use ip6_tnl"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ip6: vti: Use ip6_tnl.net in vti6_siocdevprivate().<\/p>\n<p>After patch 1\/2 in this series, vti6_update() unlinks and relinks<br \/>\nthe tunnel through t-&gt;net. vti6_siocdevprivate() still uses<br \/>\ndev_net(dev) for the collision lookup. For a tunnel moved through<br \/>\nIFLA_NET_NS_FD, dev_net(dev) is the new netns, not t-&gt;net.<\/p>\n<p>SIOCCHGTUNNEL on a migrated tunnel then runs:<\/p>\n<p>  net = dev_net(dev)                    \/* migrated netns *\/<br \/>\n  t   = vti6_locate(net, &amp;p1, false)    \/* misses target in t-&gt;net *\/<br \/>\n  &#8230;<br \/>\n  t   = netdev_priv(dev)<br \/>\n  vti6_update(t, &amp;p1, false)            \/* mutates t-&gt;net&#8217;s hash *\/<\/p>\n<p>A caller in the migrated netns picks params that match a tunnel<br \/>\nin the creation netns. The lookup in dev_net(dev) finds nothing.<br \/>\nvti6_update() prepends the migrated tunnel at the head of the<br \/>\ncreation netns hash bucket for those params. Later lookups in<br \/>\nthe creation netns resolve to the migrated device. xfrm receive<br \/>\ndelivers the matched packets through a device the caller controls.<\/p>\n<p>Reachable from an unprivileged user namespace (unshare &#8211;user<br \/>\n&#8211;map-root-user &#8211;net). Cross tenant scope on container hosts.<\/p>\n<p>Switch the SIOCCHGTUNNEL path on a non fallback device to use<br \/>\nt-&gt;net for the lookup. The lookup now matches the netns<br \/>\nvti6_update() operates on.<\/p>\n<p>Also add ns_capable(self-&gt;net-&gt;user_ns, CAP_NET_ADMIN) before<br \/>\nthe lookup. The check at the top of the case is against<br \/>\ndev_net(dev)-&gt;user_ns, which after migration is the attacker&#8217;s<br \/>\nnetns. A caller there can pick params absent from self-&gt;net,<br \/>\nthe lookup returns NULL, t becomes self, and vti6_update()<br \/>\ninserts the device into the creation netns hash. The new check<br \/>\nrequires CAP_NET_ADMIN in the creation netns user_ns too.<\/p>\n<p>SIOCADDTUNNEL and SIOCCHGTUNNEL on the fallback device keep<br \/>\ndev_net(dev), which equals init_net there.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ip6: vti: Use ip6_tnl.net in vti6_siocdevprivate().<\/p>\n<p>After patch 1\/2 in this series, vti6_update() unlinks and relinks<br \/>\nthe tunnel t<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-14959","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/14959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}