Zephyr's WireGuard VPN data-plane receive handler wgprocessdatamessage() in subsys/net/lib/wireguard/wgcrypto.c validated the anti-replay counter too late. After AEAD decryption of a MESSAGETRANSPORTDATA packet succeeded, the code committed several peer-state changes — updatepeeraddr() (endpoint roaming update), the keypair->lastrx/peer->lastrx liveness timers, and keypairupdate() (promote next→current and destroy the previous keypair) — and only afterward called wgcheck_replay(). On a replayed packet the replay check returned -EINVAL, but none of the preceding mutations were rolled back.
The AEAD tag authenticates content but not freshness, so a replayed-but-authentic transport packet decrypts correctly. An attacker who captures one valid ciphertext off the wire (an on-path or shared-medium observer) can re-inject it from an arbitrary spoofed source address. Reaching the handler requires no credentials: it is driven directly from inbound UDP datagrams via the dispatch in subsys/net/lib/wireguard/wg.c.
Because the state mutations committed before the replay check, the replay repoints the peer endpoint to the attacker-chosen source address (roaming hijack), redirecting the victim's subsequent outbound tunnel traffic until the legitimate peer's next packet re-corrects it; it also prematurely destroys the previous keypair and refreshes the RX liveness timer. The tunnel payload stays encrypted under the session keypair, so this is an integrity/availability impact (traffic redirection and session disruption), not payload disclosure. The fix moves wgcheckreplay() to immediately after a successful decrypt, before any peer-state mutation, matching the WireGuard specification and the Linux reference implementation.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/13xxx/CVE-2026-13734.json",
"cwe_ids": [
"CWE-294"
],
"cna_assigner": "zephyr"
}[
{
"id": "CVE-2026-13734-75358885",
"target": {
"function": "wg_process_data_message",
"file": "subsys/net/lib/wireguard/wg_crypto.c"
},
"deprecated": false,
"digest": {
"function_hash": "149676935219164376109633264426281758290",
"length": 4227.0
},
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/260c32ef9a89824bd25e17170e77aa4b98c84069",
"signature_type": "Function"
},
{
"id": "CVE-2026-13734-f75d4a9b",
"target": {
"file": "subsys/net/lib/wireguard/wg_crypto.c"
},
"deprecated": false,
"digest": {
"threshold": 0.9,
"line_hashes": [
"103117181195481898046377296938137561102",
"200193105173350827086555565201390309278",
"120016397421143916966133274059705253598",
"183591915554302493201444779430703257621",
"94412807766288332342251957609800720664",
"264567372987153853044681618809087079948",
"46389748866110386258952112316894761297",
"189112168022437083384529095691058172847",
"275938397972107350733286108778580483668",
"63774273026178763839172612472165551893",
"210339593483420656622908764248730391181"
]
},
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/260c32ef9a89824bd25e17170e77aa4b98c84069",
"signature_type": "Line"
}
]
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-13734.json"
"2026-08-30T08:13:43Z"