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