CVE-2026-63925 Overview
CVE-2026-63925 is a Linux kernel vulnerability in the MACsec (Media Access Control Security) subsystem. The flaw resides in macsec_post_decrypt() and affects Extended Packet Number (XPN) replay protection. When the packet number (PN) reaches U32_MAX (0xFFFFFFFF), an integer overflow causes replay protection logic to fail. An attacker on the adjacent network who captures the legitimate frame carrying pn == 0xFFFFFFFF on an XPN association can replay it indefinitely.
Critical Impact
An adjacent-network attacker can bypass MACsec XPN replay protection and inject captured frames indefinitely, undermining integrity and availability of protected Layer 2 communications.
Affected Products
- Linux Kernel (mainline, prior to fix commits)
- Linux Kernel stable branches receiving backports 23c0e230eab3, 679e13a65e68, 6d00f5c7e5ff, 79495a1b0944, d15130461df3, d55acbe577db, dd7306779c6c, e68842b33564
- Systems using MACsec XPN cipher suites (GCM-AES-XPN-128, GCM-AES-XPN-256)
Discovery Timeline
- 2026-07-19 - CVE-2026-63925 published to NVD
- 2026-07-20 - Last updated in NVD database
Technical Details for CVE-2026-63925
Vulnerability Analysis
MACsec provides Layer 2 authentication, integrity, and optional confidentiality between directly connected network peers. Extended Packet Number (XPN) mode uses a 64-bit packet number split into upper and lower 32-bit halves to permit longer key lifetimes without rekeying. Replay protection tracks the next expected PN through the next_pn_halves structure.
The vulnerability is an integer overflow [CWE-190] in the replay window advancement logic. When macsec_post_decrypt() computes pn + 1 on a u32 value of 0xFFFFFFFF, the result wraps to 0. The first conditional branch, which advances next_pn_halves.lower on normal PN progression, does not fire because pn + 1 == 0 fails its comparison. If next_pn_halves.lower also falls in the upper half of the number space, pn_same_half(pn, lower) returns true and the XPN else-if branch is also skipped. The result: next_pn_halves is never updated when pn == U32_MAX.
Root Cause
The root cause is missing overflow handling in the XPN branch of the replay window advancement code. The logic assumes pn + 1 always exceeds pn, an assumption that fails at the u32 boundary. Because lowest_pn never advances past the captured PN, macsec_decrypt() reconstructs the same initialization vector (IV) on each replay, and the frame passes integrity verification.
Attack Vector
Exploitation requires adjacent-network access to a MACsec-protected link using an XPN cipher suite. An attacker captures the legitimate frame carrying pn == 0xFFFFFFFF and retransmits it. Because the receiver does not advance its replay window, each replay is accepted as valid, breaking replay protection guarantees and enabling frame injection at the point of packet-number rollover.
The fix extends the XPN else-if condition to also fire when pn + 1 wraps to 0, ensuring receipt of pn == U32_MAX advances next_pn_halves to (upper + 1, 0).
Detection Methods for CVE-2026-63925
Indicators of Compromise
- Repeated MACsec frames with identical packet number 0xFFFFFFFF observed on an XPN-protected link
- Unexpected duplication of Layer 2 traffic on interfaces configured with GCM-AES-XPN cipher suites
- MACsec statistics showing InPktsOK incrementing without corresponding next_pn advancement
Detection Strategies
- Monitor kernel version and MACsec configuration across Linux hosts, flagging systems running unpatched kernels with XPN cipher suites enabled
- Inspect MACsec Secure Association (SA) counters through ip macsec show and correlate InPktsOK counts against packet-number progression
- Deploy Layer 2 traffic monitoring on trunks carrying MACsec-XPN traffic to identify frames sharing identical PN values
Monitoring Recommendations
- Ingest kernel logs and MACsec statistics into a centralized data lake for cross-host correlation of anomalous PN behavior
- Alert on any Secure Channel where the same PN value is observed across multiple accepted frames within a short window
- Track kernel package inventory to identify hosts missing the upstream MACsec replay-protection patches
How to Mitigate CVE-2026-63925
Immediate Actions Required
- Inventory all Linux systems using MACsec with XPN cipher suites (GCM-AES-XPN-128, GCM-AES-XPN-256) and prioritize them for patching
- Apply the upstream kernel fix or the corresponding stable-branch backport for your distribution
- Rotate MACsec keys on any association where a PN rollover event may have occurred while running an unpatched kernel
Patch Information
The fix is available in the following Linux kernel commits: 23c0e230eab3, 679e13a65e68, 6d00f5c7e5ff, 79495a1b0944, d15130461df3, d55acbe577db, dd7306779c6c, and e68842b33564. The patch extends the XPN else-if branch in macsec_post_decrypt() to fire when pn + 1 wraps to 0, advancing next_pn_halves to (upper + 1, 0) on receipt of pn == U32_MAX. See the Linux Kernel Patch 23c0e230eab3 for the mainline commit and follow the corresponding stable-tree references for backports.
Workarounds
- Where patching is delayed, rekey MACsec associations more frequently to reduce the probability of reaching pn == 0xFFFFFFFF before a Secure Association Key (SAK) rotation
- Consider switching from XPN cipher suites to non-XPN suites (GCM-AES-128, GCM-AES-256) with aggressive rekeying policies if operationally feasible
- Restrict physical and adjacent-network access to MACsec-protected links to reduce opportunities for frame capture and replay
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

