In the Linux kernel, the following vulnerability has been resolved:
tcp: do not accept ACK of bytes we never sent
This patch is based on a detailed report and ideas from Yepeng Pan and Christian Rossow.
ACK seq validation is currently following RFC 5961 5.2 guidelines:
The ACK value is considered acceptable only if it is in the range of ((SND.UNA - MAX.SND.WND) <= SEG.ACK <= SND.NXT). All incoming segments whose ACK value doesn't satisfy the above condition MUST be discarded and an ACK sent back. It needs to be noted that RFC 793 on page 72 (fifth check) says: "If the ACK is a duplicate (SEG.ACK < SND.UNA), it can be ignored. If the ACK acknowledges something not yet sent (SEG.ACK > SND.NXT) then send an ACK, drop the segment, and return". The "ignored" above implies that the processing of the incoming data segment continues, which means the ACK value is treated as acceptable. This mitigation makes the ACK check more stringent since any ACK < SND.UNA wouldn't be accepted, instead only ACKs that are in the range ((SND.UNA - MAX.SND.WND) <= SEG.ACK <= SND.NXT) get through.
This can be refined for new (and possibly spoofed) flows, by not accepting ACK for bytes that were never sent.
This greatly improves TCP security at a little cost.
I added a Fixes: tag to make sure this patch will reach stable trees, even if the 'blamed' patch was adhering to the RFC.
tp->bytes_acked was added in linux-4.2
Following packetdrill test (courtesy of Yepeng Pan) shows the issue at hand:
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 +0 bind(3, ..., ...) = 0 +0 listen(3, 1024) = 0
// ---------------- Handshake ------------------- //
// when window scale is set to 14 the window size can be extended to // 65535 * (2^14) = 1073725440. Linux would accept an ACK packet // with ack number in (Server_ISN+1-1073725440. Server_ISN+1) // ,though this ack number acknowledges some data never // sent by the server.
+0 < S 0:0(0) win 65535 <mss 1400,nop,wscale 14> +0 > S. 0:0(0) ack 1 <...> +0 < . 1:1(0) ack 1 win 65535 +0 accept(3, ..., ...) = 4
// For the established connection, we send an ACK packet, // the ack packet uses ack number 1 - 1073725300 + 2^32, // where 2^32 is used to wrap around. // Note: we used 1073725300 instead of 1073725440 to avoid possible // edge cases. // 1 - 1073725300 + 2^32 = 3221241997
// Oops, old kernels happily accept this packet. +0 < . 1:1001(1000) ack 3221241997 win 65535
// After the kernel fix the following will be replaced by a challenge ACK, // and prior malicious frame would be dropped. +0 > . 1:1(0) ack 1001
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-debug-modulesUpgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade kernel-tools-libs-develUpgrade kernel-rt-modulesUpgrade kernel-headersUpgrade kernel-rt-debug-coreUpgrade kernel-zfcpdump-coreUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debug-develUpgrade kernel-zfcpdumpUpgrade kernel-zfcpdump-modulesUpgrade kernel-rtUpgrade perfUpgrade kernel-debugUpgrade kernel-rt-coreUpgrade kernel-zfcpdump-develUpgrade kernel-rt-kvmUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debugUpgrade kernel-rt-develUpgrade kernel-modulesUpgrade kernel-debug-coreUpgrade kernel-rt-modules-extraUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-modules-extraUpgrade kernel-docUpgrade kernel-rt-debug-modules-extraUpgrade python3-perfUpgrade kernel-coreUpgrade kernel-cross-headersUpgrade bpftoolUpgrade kernel-debug-develUpgrade kernel-rt-debug-kvmUpgrade kernel-develUpgrade kernel | Jul 3, 2024 | May 29, 2024 |
| Amazon Linux Ami 2 | — | Upgrade bpftoolUpgrade bpftool-debuginfoUpgrade perf-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-develUpgrade kernel-livepatch-5.10.205-195.804Upgrade kernel-toolsUpgrade perfUpgrade python-perfUpgrade kernel-debuginfoUpgrade kernel-tools-develUpgrade kernel-livepatch-5.15.145-95.156Upgrade kernel-headersUpgrade kernel-livepatch-4.14.334-252.552Upgrade kernel-debuginfo-common-x86_64Upgrade python-perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel | Jun 11, 2024 | May 29, 2024 |
| Amazon_linux | — | Upgrade kernel | Jun 7, 2024 | Jan 3, 2024 |
| Amazon_linux_2023 | — | Upgrade bpftool-debuginfoUpgrade kernel-debuginfoUpgrade kernel-develUpgrade kernel-tools-debuginfoUpgrade perf-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-headersUpgrade bpftoolUpgrade kernel-libbpfUpgrade kernel-modules-extraUpgrade python3-perf-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-toolsUpgrade perfUpgrade kernel-libbpf-staticUpgrade kernelUpgrade python3-perfUpgrade kernel-modules-extra-commonUpgrade kernel-tools-develUpgrade kernel-livepatch-6.1.72-96.166 | Feb 17, 2025 | May 1, 2024 |
| Debian | — | Upgrade linux | Jul 30, 2024 | May 29, 2024 |
| F5 Big Ip | — | Update F5 BIG-IP to the latest version | Jun 17, 2026 | Nov 11, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-tools-libsUpgrade kernel-toolsUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel | Oct 8, 2024 | May 29, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernelUpgrade python3-perfUpgrade kernel-tools-libs | Oct 9, 2024 | May 29, 2024 |
| Huawei Euleros 2_0_sp8 | — | Upgrade python3-perfUpgrade kernel-develUpgrade perfUpgrade kernel-toolsUpgrade python-perfUpgrade kernel-headersUpgrade kernelUpgrade bpftoolUpgrade kernel-tools-libs | Jan 21, 2025 | May 29, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernelUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel-tools | Oct 8, 2024 | May 29, 2024 |
| Oracle_linux | — | Upgrade kernelUpgrade kernel-uek | Jul 3, 2024 | May 1, 2024 |
| Redhat_linux | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Jul 3, 2024 | May 29, 2024 |
| Rocky_linux | — | Upgrade kernel-debuginfoUpgrade kernel-rt-modulesUpgrade kernel-debug-modulesUpgrade kernel-tools-debuginfoUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-debuginfo-common-x86_64Upgrade python3-perf-debuginfoUpgrade kernel-modulesUpgrade kernel-rt-debug-modulesUpgrade kernel-debug-coreUpgrade kernel-debug-modules-extraUpgrade kernel-rt-develUpgrade kernel-modules-extraUpgrade kernel-rt-coreUpgrade bpftoolUpgrade kernel-debug-develUpgrade kernel-debug-debuginfoUpgrade kernelUpgrade kernel-rt-debugUpgrade kernel-rt-modules-extraUpgrade kernel-develUpgrade kernel-rt-debuginfoUpgrade kernel-rt-debug-debuginfoUpgrade kernel-tools-libsUpgrade bpftool-debuginfoUpgrade kernel-debugUpgrade kernel-rt-debug-coreUpgrade kernel-rt-kvmUpgrade kernel-coreUpgrade kernel-cross-headersUpgrade python3-perfUpgrade kernel-rtUpgrade kernel-tools-libs-develUpgrade kernel-rt-debug-kvmUpgrade perf-debuginfoUpgrade perfUpgrade kernel-rt-debug-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-toolsUpgrade kernel-headers | Jul 16, 2024 | May 29, 2024 |
| Suse | — | Upgrade cluster-md-kmp-rtUpgrade dlm-kmp-64kbUpgrade kernel-preemptUpgrade kernel-source-azureUpgrade kernel-devel-rtUpgrade kernel-source-vanillaUpgrade ocfs2-kmp-64kbUpgrade ocfs2-kmp-rtUpgrade kernel-64kb-livepatch-develUpgrade kselftests-kmp-64kbUpgrade gfs2-kmp-rtUpgrade dtb-exynosUpgrade dtb-freescaleUpgrade kernel-azureUpgrade kselftests-kmp-azureUpgrade gfs2-kmp-defaultUpgrade kernel-azure-livepatch-develUpgrade ocfs2-kmp-azureUpgrade kernel-sourceUpgrade kernel-kvmsmall-develUpgrade kernel-default-develUpgrade kernel-rt_debug-develUpgrade kernel-default-base-rebuildUpgrade dtb-alteraUpgrade kernel-default-livepatchUpgrade kernel-xen-develUpgrade kernel-traceUpgrade kernel-azure-optionalUpgrade kernel-azure-develUpgrade kernel-rt-develUpgrade kernel-rt-livepatchUpgrade dtb-allwinnerUpgrade kernel-preempt-develUpgrade kernel-syms-azureUpgrade kernel-default-optionalUpgrade kernel-64kb-develUpgrade kernel-develUpgrade kernel-devel-azureUpgrade kernel-ec2-baseUpgrade dtb-qcomUpgrade dtb-rockchipUpgrade dtb-mediatekUpgrade gfs2-kmp-azureUpgrade kernel-default-vdsoUpgrade ocfs2-kmp-defaultUpgrade kernel-64kbUpgrade kernel-zfcpdumpUpgrade dtb-lgUpgrade gfs2-kmp-64kbUpgrade dtb-caviumUpgrade dtb-amazonUpgrade kernel-kvmsmallUpgrade reiserfs-kmp-azureUpgrade cluster-md-kmp-azureUpgrade kernel-debug-vdsoUpgrade kernel-xenUpgrade dtb-xilinxUpgrade kernel-rtUpgrade kernel-xen-baseUpgrade kernel-syms-rtUpgrade kselftests-kmp-defaultUpgrade kernel-rt-extraUpgrade kernel-debug-develUpgrade kernel-64kb-extraUpgrade cluster-md-kmp-defaultUpgrade kernel-defaultUpgrade dtb-armUpgrade cluster-md-kmp-64kbUpgrade dtb-amdUpgrade kernel-trace-develUpgrade dtb-renesasUpgrade dtb-hisiliconUpgrade kernel-ec2Upgrade kernel-default-manUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-extraUpgrade kernel-azure-baseUpgrade dtb-marvellUpgrade dtb-apmUpgrade dlm-kmp-rtUpgrade reiserfs-kmp-rtUpgrade kernel-source-rtUpgrade kernel-rt-optionalUpgrade kernel-ec2-develUpgrade dtb-socionextUpgrade dlm-kmp-defaultUpgrade kernel-rt_debugUpgrade kernel-trace-baseUpgrade kernel-docsUpgrade dtb-sprdUpgrade dtb-nvidiaUpgrade kselftests-kmp-rtUpgrade kernel-rt_debug-vdsoUpgrade kernel-docs-htmlUpgrade kernel-debugUpgrade reiserfs-kmp-64kbUpgrade kernel-default-baseUpgrade kernel-azure-vdsoUpgrade dtb-amlogicUpgrade dlm-kmp-azureUpgrade dtb-broadcomUpgrade kernel-macrosUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-64kb-optionalUpgrade kernel-obs-buildUpgrade kernel-rt-vdsoUpgrade kernel-kvmsmall-vdsoUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-default-livepatch-develUpgrade reiserfs-kmp-defaultUpgrade kernel-default-extraUpgrade dtb-appleUpgrade kernel-rt-livepatch-develUpgrade kernel-obs-qaUpgrade kernel-syms | Aug 9, 2024 | May 29, 2024 |
| Ubuntu | — | Upgrade linux-gkeop-5.15Upgrade linux-ibm-5.4Upgrade linux-bluefieldUpgrade linux-awsUpgrade linux-azureUpgrade linuxUpgrade linux-intel-iotg-5.15Upgrade linux-hwe-5.4Upgrade linux-nvidia-tegra-igxUpgrade linux-gcp-fipsUpgrade linux-nvidia-tegra-5.15Upgrade linux-nvidia-6.5Upgrade linux-azure-5.4Upgrade linux-iotUpgrade linux-hwe-5.15Upgrade linux-lowlatency-hwe-5.15Upgrade linux-raspi-5.4Upgrade linux-ibm-5.15Upgrade linux-oracle-5.4Upgrade linux-fipsUpgrade linux-nvidia-tegraUpgrade linux-ibmUpgrade linux-realtimeUpgrade linux-raspiUpgrade linux-kvmUpgrade linux-lowlatencyUpgrade linux-gcpUpgrade linux-intel-iot-realtimeUpgrade linux-azure-fipsUpgrade linux-gkeopUpgrade linux-aws-fipsUpgrade linux-intel-iotgUpgrade linux-aws-5.15Upgrade linux-oracleUpgrade linux-gkeUpgrade linux-aws-5.4Upgrade linux-oracle-5.15Upgrade linux-gcp-5.4Upgrade linux-azure-5.15Upgrade linux-nvidiaUpgrade linux-gcp-5.15Upgrade linux-azure-fdeUpgrade linux-riscv-5.15Upgrade linux-xilinx-zynqmp | Nov 19, 2024 | May 29, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Oct 14, 2025 | May 29, 2024 |
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub