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
CVSS Details
- CVSS 3.1 Base Score: 9.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-rt-kvmUpgrade kernel-rt-develUpgrade kernelUpgrade kernel-debugUpgrade kernel-debug-develUpgrade kernel-cross-headersUpgrade kernel-rt-debug-modulesUpgrade kernel-modulesUpgrade kernel-rt-debugUpgrade python3-perfUpgrade perfUpgrade bpftoolUpgrade kernel-develUpgrade kernel-rt-modules-extraUpgrade kernel-debug-coreUpgrade kernel-rt-debug-modules-extraUpgrade kernel-zfcpdump-develUpgrade kernel-coreUpgrade kernel-rt-debug-kvmUpgrade kernel-docUpgrade kernel-modules-extraUpgrade kernel-rt-coreUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-debug-coreUpgrade kernel-rt-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-abi-stablelistsUpgrade kernel-headersUpgrade kernel-zfcpdumpUpgrade kernel-tools-libs-develUpgrade kernel-debug-modulesUpgrade kernel-rt-debug-develUpgrade kernel-toolsUpgrade kernel-tools-libsUpgrade kernel-zfcpdump-coreUpgrade kernel-rtUpgrade kernel-zfcpdump-modules | Jul 3, 2024 | May 29, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-develUpgrade bpftool-debuginfoUpgrade python-perfUpgrade kernel-toolsUpgrade kernel-livepatch-5.10.205-195.804Upgrade kernel-debuginfo-common-aarch64Upgrade bpftoolUpgrade perfUpgrade perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-livepatch-4.14.334-252.552Upgrade kernel-headersUpgrade kernelUpgrade kernel-tools-develUpgrade python-perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-livepatch-5.15.145-95.156 | Jun 11, 2024 | May 29, 2024 |
| Amazon_linux | — | Upgrade kernel | Jun 7, 2024 | Jan 3, 2024 |
| Amazon_linux_2023 | — | Upgrade bpftoolUpgrade kernel-tools-debuginfoUpgrade kernel-develUpgrade kernel-modules-extraUpgrade kernel-libbpfUpgrade bpftool-debuginfoUpgrade kernel-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade perf-debuginfoUpgrade kernel-headersUpgrade kernel-toolsUpgrade kernel-libbpf-develUpgrade kernel-livepatch-6.1.72-96.166Upgrade kernel-libbpf-staticUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade kernel-modules-extra-commonUpgrade kernelUpgrade python3-perfUpgrade kernel-tools-devel | 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 python3-perfUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernelUpgrade kernel-tools-libs | Oct 8, 2024 | May 29, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade bpftoolUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel | Oct 9, 2024 | May 29, 2024 |
| Huawei Euleros 2_0_sp8 | — | Upgrade python-perfUpgrade kernel-toolsUpgrade python3-perfUpgrade kernel-develUpgrade perfUpgrade bpftoolUpgrade kernelUpgrade kernel-headersUpgrade kernel-tools-libs | 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 kernel-uekUpgrade kernel | Jul 3, 2024 | May 1, 2024 |
| Redhat_linux | — | Upgrade kernel-rtUpgrade kernelNo solution exists | Jul 3, 2024 | May 29, 2024 |
| Rocky_linux | — | Upgrade kernel-rtUpgrade kernel-rt-debug-kvmUpgrade kernel-toolsUpgrade kernel-rt-debug-modules-extraUpgrade python3-perfUpgrade perfUpgrade kernel-tools-libs-develUpgrade kernel-rt-debug-develUpgrade perf-debuginfoUpgrade kernel-headersUpgrade kernel-debuginfoUpgrade kernel-debugUpgrade kernel-rt-modules-extraUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debug-coreUpgrade kernel-debug-debuginfoUpgrade kernel-modulesUpgrade kernel-coreUpgrade kernel-rt-kvmUpgrade kernel-cross-headersUpgrade kernel-rt-debug-modulesUpgrade kernel-develUpgrade kernel-debug-coreUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-debuginfoUpgrade kernel-rt-modulesUpgrade kernel-rt-develUpgrade kernel-tools-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debugUpgrade kernel-debug-develUpgrade kernelUpgrade bpftoolUpgrade kernel-modules-extraUpgrade kernel-rt-coreUpgrade bpftool-debuginfoUpgrade kernel-tools-libs | Jul 16, 2024 | May 29, 2024 |
| Suse | — | Upgrade kernel-rt-livepatchUpgrade dlm-kmp-64kbUpgrade kernel-ec2-baseUpgrade kernel-kvmsmall-develUpgrade gfs2-kmp-defaultUpgrade kselftests-kmp-azureUpgrade kernel-traceUpgrade gfs2-kmp-rtUpgrade reiserfs-kmp-azureUpgrade dtb-xilinxUpgrade dtb-mediatekUpgrade ocfs2-kmp-defaultUpgrade kernel-zfcpdumpUpgrade kernel-xenUpgrade kernel-default-optionalUpgrade kernel-sourceUpgrade kernel-azureUpgrade dtb-exynosUpgrade ocfs2-kmp-64kbUpgrade kernel-azure-livepatch-develUpgrade ocfs2-kmp-rtUpgrade kernel-preempt-develUpgrade kernel-debug-vdsoUpgrade dtb-amazonUpgrade dtb-allwinnerUpgrade cluster-md-kmp-azureUpgrade kernel-kvmsmallUpgrade kernel-rtUpgrade kernel-devel-azureUpgrade kernel-syms-azureUpgrade gfs2-kmp-azureUpgrade dtb-rockchipUpgrade dtb-qcomUpgrade kernel-64kb-develUpgrade ocfs2-kmp-azureUpgrade kselftests-kmp-64kbUpgrade kernel-source-vanillaUpgrade kernel-source-azureUpgrade kernel-preemptUpgrade kernel-devel-rtUpgrade kernel-64kb-livepatch-develUpgrade dtb-lgUpgrade dtb-caviumUpgrade gfs2-kmp-64kbUpgrade kernel-rt-develUpgrade kernel-azure-develUpgrade cluster-md-kmp-rtUpgrade dtb-freescaleUpgrade dtb-alteraUpgrade kernel-rt_debug-develUpgrade kernel-develUpgrade kernel-azure-optionalUpgrade kernel-64kbUpgrade kernel-xen-baseUpgrade kernel-default-base-rebuildUpgrade kernel-default-vdsoUpgrade kernel-xen-develUpgrade kernel-default-livepatchUpgrade kernel-default-develUpgrade kernel-64kb-extraUpgrade kernel-defaultUpgrade kernel-azure-baseUpgrade cluster-md-kmp-defaultUpgrade kselftests-kmp-defaultUpgrade kernel-64kb-optionalUpgrade dtb-hisiliconUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-default-livepatch-develUpgrade kernel-rt-vdsoUpgrade kernel-obs-buildUpgrade kernel-trace-develUpgrade dtb-renesasUpgrade dtb-armUpgrade dtb-appleUpgrade dlm-kmp-azureUpgrade dtb-apmUpgrade kernel-docs-htmlUpgrade kernel-default-baseUpgrade dtb-marvellUpgrade kernel-azure-extraUpgrade kernel-docsUpgrade dtb-amdUpgrade dtb-sprdUpgrade reiserfs-kmp-rtUpgrade kernel-ec2Upgrade kernel-debug-livepatch-develUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-extraUpgrade kernel-rt-livepatch-develUpgrade reiserfs-kmp-defaultUpgrade kernel-rt-extraUpgrade kernel-ec2-develUpgrade dtb-socionextUpgrade dlm-kmp-defaultUpgrade kernel-rt-optionalUpgrade reiserfs-kmp-64kbUpgrade kernel-debugUpgrade kernel-azure-vdsoUpgrade dtb-amlogicUpgrade dtb-broadcomUpgrade cluster-md-kmp-64kbUpgrade kernel-trace-baseUpgrade kernel-rt_debug-vdsoUpgrade kernel-rt_debugUpgrade kselftests-kmp-rtUpgrade dtb-nvidiaUpgrade kernel-source-rtUpgrade dlm-kmp-rtUpgrade kernel-default-manUpgrade kernel-syms-rtUpgrade kernel-symsUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-obs-qaUpgrade kernel-macrosUpgrade kernel-debug-devel | Aug 9, 2024 | May 29, 2024 |
| Ubuntu | — | Upgrade linux-bluefieldUpgrade linux-intel-iotg-5.15Upgrade linux-hwe-5.4Upgrade linux-lowlatency-hwe-5.15Upgrade linux-hwe-5.15Upgrade linux-raspi-5.4Upgrade linux-azure-5.4Upgrade linux-nvidia-6.5Upgrade linux-nvidia-tegra-5.15Upgrade linux-awsUpgrade linux-gkeop-5.15Upgrade linux-nvidia-tegra-igxUpgrade linux-azureUpgrade linuxUpgrade linux-ibm-5.4Upgrade linux-iotUpgrade linux-gcp-fipsUpgrade linux-azure-fipsUpgrade linux-realtimeUpgrade linux-oracle-5.4Upgrade linux-gcp-5.15Upgrade linux-nvidiaUpgrade linux-aws-5.15Upgrade linux-ibm-5.15Upgrade linux-aws-5.4Upgrade linux-lowlatencyUpgrade linux-xilinx-zynqmpUpgrade linux-gcpUpgrade linux-intel-iotgUpgrade linux-ibmUpgrade linux-fipsUpgrade linux-oracle-5.15Upgrade linux-nvidia-tegraUpgrade linux-azure-5.15Upgrade linux-gkeopUpgrade linux-kvmUpgrade linux-gkeUpgrade linux-riscv-5.15Upgrade linux-oracleUpgrade linux-azure-fdeUpgrade linux-aws-fipsUpgrade linux-gcp-5.4Upgrade linux-intel-iot-realtimeUpgrade linux-raspi | 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 |
Prioritise with Active Threat Intelligence
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