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-debugUpgrade kernel-modulesUpgrade kernel-cross-headersUpgrade bpftoolUpgrade kernel-zfcpdump-develUpgrade kernel-develUpgrade kernel-rt-develUpgrade kernel-debug-develUpgrade kernel-rt-modules-extraUpgrade kernel-debug-coreUpgrade python3-perfUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-debug-kvmUpgrade kernel-coreUpgrade kernel-modules-extraUpgrade kernel-rt-coreUpgrade kernel-rt-debugUpgrade kernel-rt-kvmUpgrade kernel-rt-debug-modulesUpgrade perfUpgrade kernel-docUpgrade kernelUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debug-modulesUpgrade kernel-zfcpdumpUpgrade kernel-abi-stablelistsUpgrade kernel-rt-modulesUpgrade kernel-zfcpdump-coreUpgrade kernel-zfcpdump-modulesUpgrade kernel-rt-debug-coreUpgrade kernel-tools-libs-develUpgrade kernel-tools-libsUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debug-develUpgrade kernel-toolsUpgrade kernel-rtUpgrade kernel-headers | Jul 3, 2024 | May 29, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-headersUpgrade kernel-debuginfoUpgrade kernel-tools-develUpgrade kernel-livepatch-5.15.145-95.156Upgrade kernel-livepatch-4.14.334-252.552Upgrade python-perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernelUpgrade kernel-livepatch-5.10.205-195.804Upgrade kernel-debuginfo-common-aarch64Upgrade bpftoolUpgrade perf-debuginfoUpgrade kernel-develUpgrade bpftool-debuginfoUpgrade python-perfUpgrade kernel-toolsUpgrade perf | Jun 11, 2024 | May 29, 2024 |
| Amazon_linux | — | Upgrade kernel | Jun 7, 2024 | Jan 3, 2024 |
| Amazon_linux_2023 | — | Upgrade bpftool-debuginfoUpgrade bpftoolUpgrade kernel-headersUpgrade kernel-develUpgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade python3-perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-modules-extraUpgrade kernel-libbpfUpgrade kernel-libbpf-develUpgrade kernel-tools-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-libbpf-staticUpgrade perfUpgrade kernel-livepatch-6.1.72-96.166Upgrade kernel-modules-extra-commonUpgrade python3-perfUpgrade kernelUpgrade kernel-tools | 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-toolsUpgrade kernelUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libs | Oct 8, 2024 | May 29, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel | Oct 9, 2024 | May 29, 2024 |
| Huawei Euleros 2_0_sp8 | — | Upgrade kernel-develUpgrade python3-perfUpgrade python-perfUpgrade kernel-toolsUpgrade perfUpgrade bpftoolUpgrade kernel-tools-libsUpgrade kernelUpgrade kernel-headers | Jan 21, 2025 | May 29, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernelUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade python3-perf | 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 bpftoolUpgrade kernel-modules-extraUpgrade kernel-rt-debugUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-modulesUpgrade kernel-coreUpgrade kernel-rt-develUpgrade kernel-debug-develUpgrade kernel-rt-coreUpgrade kernelUpgrade kernel-debug-debuginfoUpgrade kernel-modulesUpgrade kernel-rt-modules-extraUpgrade python3-perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-tools-libsUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debug-coreUpgrade kernel-debugUpgrade bpftool-debuginfoUpgrade kernel-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-rt-kvmUpgrade kernel-cross-headersUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debug-modulesUpgrade kernel-develUpgrade kernel-rt-debuginfoUpgrade kernel-debug-modules-extraUpgrade kernel-debug-coreUpgrade kernel-headersUpgrade kernel-rt-debug-modules-extraUpgrade kernel-toolsUpgrade kernel-rt-debug-develUpgrade perfUpgrade perf-debuginfoUpgrade kernel-tools-libs-develUpgrade python3-perfUpgrade kernel-rtUpgrade kernel-rt-debug-kvm | Jul 16, 2024 | May 29, 2024 |
| Suse | — | Upgrade gfs2-kmp-defaultUpgrade reiserfs-kmp-azureUpgrade kernel-rt-livepatchUpgrade dtb-amazonUpgrade kernel-64kb-livepatch-develUpgrade gfs2-kmp-64kbUpgrade dtb-lgUpgrade dtb-caviumUpgrade ocfs2-kmp-azureUpgrade kselftests-kmp-64kbUpgrade kernel-azure-develUpgrade kernel-xen-baseUpgrade gfs2-kmp-rtUpgrade kernel-azureUpgrade ocfs2-kmp-64kbUpgrade kernel-devel-azureUpgrade gfs2-kmp-azureUpgrade dtb-qcomUpgrade kernel-develUpgrade kernel-64kb-develUpgrade kernel-zfcpdumpUpgrade kernel-xenUpgrade kernel-ec2-baseUpgrade kernel-default-optionalUpgrade kernel-64kbUpgrade dtb-rockchipUpgrade kernel-default-base-rebuildUpgrade dtb-exynosUpgrade ocfs2-kmp-rtUpgrade kernel-traceUpgrade kernel-kvmsmall-develUpgrade kernel-default-livepatchUpgrade kernel-default-develUpgrade kernel-azure-livepatch-develUpgrade kernel-rt_debug-develUpgrade dtb-allwinnerUpgrade kernel-preempt-develUpgrade kernel-debug-vdsoUpgrade dtb-freescaleUpgrade kernel-xen-develUpgrade kernel-sourceUpgrade dtb-alteraUpgrade kselftests-kmp-azureUpgrade kernel-syms-azureUpgrade kernel-default-vdsoUpgrade ocfs2-kmp-defaultUpgrade dtb-xilinxUpgrade dtb-mediatekUpgrade kernel-rt-develUpgrade kernel-rtUpgrade kernel-kvmsmallUpgrade dlm-kmp-64kbUpgrade cluster-md-kmp-rtUpgrade cluster-md-kmp-azureUpgrade kernel-source-azureUpgrade kernel-preemptUpgrade kernel-source-vanillaUpgrade kernel-devel-rtUpgrade kernel-azure-optionalUpgrade reiserfs-kmp-rtUpgrade kernel-source-rtUpgrade kernel-debug-livepatch-develUpgrade kernel-rt-optionalUpgrade kernel-azure-baseUpgrade dtb-apmUpgrade dtb-hisiliconUpgrade kernel-rt-extraUpgrade kernel-rt-livepatch-develUpgrade reiserfs-kmp-defaultUpgrade kernel-default-extraUpgrade dlm-kmp-azureUpgrade dtb-appleUpgrade dtb-amlogicUpgrade dtb-socionextUpgrade kernel-rt-vdsoUpgrade kernel-azure-vdsoUpgrade kernel-obs-buildUpgrade reiserfs-kmp-64kbUpgrade kernel-default-livepatch-develUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-baseUpgrade dlm-kmp-defaultUpgrade kernel-debugUpgrade dtb-renesasUpgrade cluster-md-kmp-64kbUpgrade dtb-armUpgrade kernel-rt_debug-vdsoUpgrade kernel-syms-rtUpgrade kernel-docs-htmlUpgrade kselftests-kmp-rtUpgrade dtb-sprdUpgrade kernel-docsUpgrade kernel-symsUpgrade kernel-obs-qaUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-macrosUpgrade kernel-64kb-extraUpgrade kernel-64kb-optionalUpgrade kernel-debug-develUpgrade kernel-trace-baseUpgrade kernel-default-manUpgrade dtb-broadcomUpgrade kernel-ec2Upgrade kselftests-kmp-defaultUpgrade kernel-azure-extraUpgrade cluster-md-kmp-defaultUpgrade dtb-nvidiaUpgrade kernel-ec2-develUpgrade kernel-defaultUpgrade dtb-amdUpgrade kernel-rt_debugUpgrade kernel-trace-develUpgrade dlm-kmp-rtUpgrade dtb-marvell | Aug 9, 2024 | May 29, 2024 |
| Ubuntu | — | Upgrade linux-oracleUpgrade linux-gkeUpgrade linux-fipsUpgrade linux-azure-5.15Upgrade linux-oracle-5.4Upgrade linux-intel-iotgUpgrade linux-kvmUpgrade linux-aws-fipsUpgrade linux-riscv-5.15Upgrade linux-azure-fdeUpgrade linux-gcpUpgrade linux-ibmUpgrade linux-xilinx-zynqmpUpgrade linux-realtimeUpgrade linux-intel-iot-realtimeUpgrade linux-azure-fipsUpgrade linux-nvidiaUpgrade linux-raspiUpgrade linux-lowlatencyUpgrade linux-aws-5.4Upgrade linux-nvidia-tegraUpgrade linux-oracle-5.15Upgrade linux-aws-5.15Upgrade linux-gcp-5.4Upgrade linux-gkeopUpgrade linux-ibm-5.15Upgrade linux-gcp-5.15Upgrade linux-nvidia-tegra-igxUpgrade linux-lowlatency-hwe-5.15Upgrade linux-intel-iotg-5.15Upgrade linux-hwe-5.4Upgrade linux-bluefieldUpgrade linux-nvidia-6.5Upgrade linux-ibm-5.4Upgrade linux-azure-5.4Upgrade linux-gcp-fipsUpgrade linux-azureUpgrade linux-nvidia-tegra-5.15Upgrade linuxUpgrade linux-awsUpgrade linux-gkeop-5.15Upgrade linux-hwe-5.15Upgrade linux-raspi-5.4Upgrade linux-iot | 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