{"id":15006,"date":"2026-09-04T19:02:21","date_gmt":"2026-09-04T11:02:21","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64007"},"modified":"2026-09-04T19:02:21","modified_gmt":"2026-09-04T11:02:21","slug":"cve-2026-64007","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64007","title":{"rendered":"CVE-2026-64007 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: synproxy:"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>netfilter: synproxy: refresh tcphdr after skb_ensure_writable<\/p>\n<p>synproxy_tstamp_adjust() rewrites the TCP timestamp option in place<br \/>\nand then patches the TCP checksum via inet_proto_csum_replace4() on<br \/>\nthe caller-supplied tcphdr pointer.  Both ipv4_synproxy_hook() and<br \/>\nipv6_synproxy_hook() obtain that pointer with skb_header_pointer()<br \/>\nbefore calling in, so it may either alias skb-&gt;head directly or<br \/>\npoint at the caller&#8217;s on-stack _tcph buffer.<\/p>\n<p>Between obtaining the pointer and using it, the function calls<br \/>\nskb_ensure_writable(skb, optend), which on a cloned or non-linear<br \/>\nskb invokes pskb_expand_head() and frees the old skb-&gt;head.  After<br \/>\nthat point the cached th is stale:<\/p>\n<p>    caller (ipv[46]_synproxy_hook)<br \/>\n      th = skb_header_pointer(skb, &#8230;, &amp;_tcph)<br \/>\n      synproxy_tstamp_adjust(skb, protoff, th, &#8230;)<br \/>\n        skb_ensure_writable(skb, optend)<br \/>\n          pskb_expand_head()        \/* kfree(old skb-&gt;head) *\/<br \/>\n        &#8230;<br \/>\n        inet_proto_csum_replace4(&amp;th-&gt;check, &#8230;)<br \/>\n                                    \/* writes into freed head, or<br \/>\n                                       into the caller&#8217;s stack copy<br \/>\n                                       leaving the on-wire checksum<br \/>\n                                       stale *\/<\/p>\n<p>The option bytes are written through skb-&gt;data and are fine; only<br \/>\nthe checksum update goes through th and so lands in the wrong<br \/>\nplace.  The result is either a write into freed slab memory or a<br \/>\npacket leaving with a checksum that does not match its payload.<\/p>\n<p>Fix by re-deriving th from skb-&gt;data + protoff immediately after<br \/>\nskb_ensure_writable() succeeds, so the subsequent checksum update<br \/>\ntargets the linear, writable header.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>netfilter: synproxy: refresh tcphdr after skb_ensure_writable<\/p>\n<p>synproxy_tstamp_adjust() rewrites the TCP timestamp option in place<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-15006","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/15006","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=15006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}