{"id":"CVE-2026-63925","state":"PUBLISHED","title":"macsec: fix replay protection at XPN lower-PN wrap","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nmacsec: fix replay protection at XPN lower-PN wrap\n\nIn macsec_post_decrypt(), when pn is U32_MAX, pn + 1 overflows u32 to 0\nand the first branch never fires. If next_pn_halves.lower is also in the\nupper half, pn_same_half(pn, lower) is true and the XPN else-if does not\nfire either, leaving next_pn_halves unchanged. An attacker that captures\nthe legitimate frame carrying pn == 0xFFFFFFFF on an XPN association\ncan then replay it indefinitely, since lowest_pn never rises above\nthe captured pn and macsec_decrypt() reconstructs the same IV.\n\nExtend the XPN else-if to also fire when pn + 1 wraps to 0, so receipt\nof pn == U32_MAX advances next_pn_halves to (upper + 1, 0).","publishedAt":"2026-07-19T14:55:26.442Z","updatedAt":"2026-10-19T20:17:57.078Z","severity":{"score":8.1,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"dd7306779c6ce1238f4cdc34f3c1f2246b854457","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"d15130461df388136b62a7b0ce9f66e7e2fa9ff1","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"23c0e230eab397d7f68be2538790ac41d3bb91fd","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"679e13a65e68a67c8b3c0467c02ee89157ec6f0f","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"79495a1b0944fe31ffd54b54b00211b493590d62","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"6d00f5c7e5ff7ec4795b7f5f8ed88bd346641652","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"d55acbe577db892b60547b6ef1c020b359331a6d","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"e68842b3356471ba56c882209f324613dac47f64","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/macsec.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.7","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.7","versionType":"semver"},{"version":"5.10.259","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.210","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.176","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.143","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.93","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.35","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.12","status":"unaffected","lessThanOrEqual":"7.0.*","versionType":"semver"},{"version":"7.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/macsec.c"]}],"references":["https://git.kernel.org/stable/c/dd7306779c6ce1238f4cdc34f3c1f2246b854457","https://git.kernel.org/stable/c/d15130461df388136b62a7b0ce9f66e7e2fa9ff1","https://git.kernel.org/stable/c/23c0e230eab397d7f68be2538790ac41d3bb91fd","https://git.kernel.org/stable/c/679e13a65e68a67c8b3c0467c02ee89157ec6f0f","https://git.kernel.org/stable/c/79495a1b0944fe31ffd54b54b00211b493590d62","https://git.kernel.org/stable/c/6d00f5c7e5ff7ec4795b7f5f8ed88bd346641652","https://git.kernel.org/stable/c/d55acbe577db892b60547b6ef1c020b359331a6d","https://git.kernel.org/stable/c/e68842b3356471ba56c882209f324613dac47f64"],"weaknesses":["CWE-190"],"ingestedAt":"2026-10-29T20:12:41.951Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/63xxx/CVE-2026-63925.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-63925","state":"PUBLISHED","datePublished":"2026-07-19T14:55:26.442Z","dateUpdated":"2026-10-19T20:17:57.078Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-07-19T07:54:57.021Z"},"containers":{"cna":{"title":"macsec: fix replay protection at XPN lower-PN wrap","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nmacsec: fix replay protection at XPN lower-PN wrap\n\nIn macsec_post_decrypt(), when pn is U32_MAX, pn + 1 overflows u32 to 0\nand the first branch never fires. If next_pn_halves.lower is also in the\nupper half, pn_same_half(pn, lower) is true and the XPN else-if does not\nfire either, leaving next_pn_halves unchanged. An attacker that captures\nthe legitimate frame carrying pn == 0xFFFFFFFF on an XPN association\ncan then replay it indefinitely, since lowest_pn never rises above\nthe captured pn and macsec_decrypt() reconstructs the same IV.\n\nExtend the XPN else-if to also fire when pn + 1 wraps to 0, so receipt\nof pn == U32_MAX advances next_pn_halves to (upper + 1, 0)."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"dd7306779c6ce1238f4cdc34f3c1f2246b854457","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"d15130461df388136b62a7b0ce9f66e7e2fa9ff1","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"23c0e230eab397d7f68be2538790ac41d3bb91fd","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"679e13a65e68a67c8b3c0467c02ee89157ec6f0f","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"79495a1b0944fe31ffd54b54b00211b493590d62","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"6d00f5c7e5ff7ec4795b7f5f8ed88bd346641652","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"d55acbe577db892b60547b6ef1c020b359331a6d","versionType":"git"},{"version":"a21ecf0e033807b976967286e6c392f48ee2049f","status":"affected","lessThan":"e68842b3356471ba56c882209f324613dac47f64","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/macsec.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.7","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.7","versionType":"semver"},{"version":"5.10.259","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.210","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.176","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.143","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.93","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.35","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.12","status":"unaffected","lessThanOrEqual":"7.0.*","versionType":"semver"},{"version":"7.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/macsec.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/dd7306779c6ce1238f4cdc34f3c1f2246b854457"},{"url":"https://git.kernel.org/stable/c/d15130461df388136b62a7b0ce9f66e7e2fa9ff1"},{"url":"https://git.kernel.org/stable/c/23c0e230eab397d7f68be2538790ac41d3bb91fd"},{"url":"https://git.kernel.org/stable/c/679e13a65e68a67c8b3c0467c02ee89157ec6f0f"},{"url":"https://git.kernel.org/stable/c/79495a1b0944fe31ffd54b54b00211b493590d62"},{"url":"https://git.kernel.org/stable/c/6d00f5c7e5ff7ec4795b7f5f8ed88bd346641652"},{"url":"https://git.kernel.org/stable/c/d55acbe577db892b60547b6ef1c020b359331a6d"},{"url":"https://git.kernel.org/stable/c/e68842b3356471ba56c882209f324613dac47f64"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H","baseScore":8.1,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:A - MACsec processes attacker-supplied Ethernet frames via netdev rx_handler on the underlying link; exploitation requires L2 adjacency on the same broadcast domain or point-to-point MACsec link, not remote Internet reachability.\nAC:L - Once XPN with replay protection is deployed, an on-link attacker can passively capture the single legitimate frame at PN 0xFFFFFFFF and then replay it reliably and indefinitely without races or conditions outside their control.\nPR:N - Exploitation requires only the ability to send or replay Ethernet frames on the MACsec link; no local privileges, capabilities, or authentication on the victim Linux host are needed.\nUI:N - Replay injection is fully attacker-driven after capturing the target frame; no victim user or administrator action is required during exploitation.\nS:U - The flaw bypasses MACsec replay protection within the kernel network stack and does not cross a security boundary such as a VM, container, or IOMMU isolation domain.\nC:N - This is a replay-protection logic flaw, not a memory corruption or decryption weakness; the attacker replays already-captured ciphertext and gains no new confidentiality beyond what passive capture already provided.\nI:H - Bypassing replay protection allows unlimited re-injection of previously authenticated payloads into the controlled port, defeating MACsec's integrity guarantees and enabling repeated delivery of captured control or data traffic on automotive, industrial, and datacenter MACsec links.\nA:H - The commit confirms captured frames can be replayed indefinitely, enabling sustained injection of decrypted traffic that can overwhelm the receiver and deny service to legitimate peers on the protected link."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:37:20.197Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"5.10.259"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"5.15.210"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"6.1.176"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"6.6.143"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"6.12.93"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"6.18.35"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"7.0.12"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.7","versionEndExcluding":"7.1"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-63925","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2026-10-16T15:33:35.580266Z"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-190","lang":"en","type":"CWE","description":"CWE-190 Integer Overflow or Wraparound"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-19T20:17:57.078Z"}}]}}}