Zebra network: Zebra Address Book Aborted by IPv4-Mapped Mempool Misbehavior Update (CVE-2026-52829)
### Am I affected You are affected if: 1. You run `zebrad` up to and including `v4.4.1`. 2. Your node listens on the default `[::]` address on a Linux host (the standard deployment configuration — `net.ipv6.bindv6only=0` is the default on all common Linux distributions). 3. Your node is synced near the chain tip (the expected production state for any node participating in the network). ### Summary An address normalization mismatch between the handshake path and the mempool misbehavior path causes a deterministic assertion panic when a peer connects via IPv4 to a dual-stack IPv6 listener and then triggers a mempool misbehavior penalty. The handshake path canonicalizes IPv4-mapped IPv6 addresses to plain IPv4 when storing the peer in the address book via `MetaAddr::new_connected`. The mempool misbehavior path forwards the raw transient socket address (IPv4-mapped IPv6 form) when sending `MetaAddrChange::UpdateMisbehavior` to the address book. The address book looks up the canonical IPv4 entry but then asserts that the previous entry's address matches the change's address. The mismatch between the canonical IPv4 address and the raw IPv4-mapped IPv6 address triggers the assertion, and `panic = "abort"` terminates the process. ### Details On Linux with `net.ipv6.bindv6only=0`, an IPv4 connection accepted by a `[::]` listener is represented internally as an IPv4-mapped IPv6 socket address (e.g., `::ffff:127.0.0.1:8233`). Zebra's `canonical_peer_addr` helper converts these to plain IPv4 (e.g., `127.0.0.1:8233`). The handshake path uses `MetaAddr::new_connected`, which canonicalizes the address before storing in the address book. However, inbound inventory registration uses `connected_addr.get_transient_addr()`, preserving the raw IPv4-mapped form. When the mempool later downloads an invalid transaction from this peer and generates a misbehavior penalty, the raw transient address is forwarded through the misbehavior channel to `MetaAddrChange::UpdateMisbehavior`, which does not canonicalize. After the 30-second misbehavior batch flush, `AddressBook::update` retrieves the canonical IPv4 entry but `MetaAddrChange::apply_to_meta_addr` asserts that `previous.addr == self.addr()`, which fails because one is IPv4 and the other is IPv4-mapped IPv6. The attacker needs only to complete a P2P handshake over IPv4 to a dual-stack listener and advertise an invalid mempool transaction (such as a coinbase transaction). The assertion fires after the 30-second misbehavior batch flush. ### Patches Patched in Zebra 4.5.0. The fix canonicalizes the address in the misbehavior update path via a new `MetaAddr::new_misbehavior` constructor that applies `canonical_peer_addr` before creating the `UpdateMisbehavior` change. ### Workarounds Configuring `listen_addr` to an IPv4-only address (e.g., `0.0.0.0:8233`) avoids the IPv4-mapped IPv6 representation and prevents this specific assertion. Alternatively, setting `net.ipv6.bindv6only=1` on Linux prevents dual-stack acceptance. ### Impact A remote unauthenticated peer can deterministically crash any synced Zebra node running the default Linux dual-stack configuration with a single invalid mempool transaction advertisement, followed by a 30-second wait. The attack requires no mining capability, no RPC access, no funds, and no special privileges. The crash can be repeated after each restart, causing persistent downtime. Linux dual-stack sockets and mempool activation are the default production state, not special preconditions. ### Credit Reported by `@Haxatron`.
AI Analysis
Technical Summary
Zebra nodes running versions up to 4.4.1 on Linux with default dual-stack IPv6/IPv4 listeners are vulnerable to a deterministic assertion panic that aborts the process. This occurs because the handshake path canonicalizes IPv4-mapped IPv6 addresses to IPv4 before storing peers, while the mempool misbehavior path uses the raw IPv4-mapped IPv6 address. When a peer connects over IPv4 to a dual-stack listener and triggers a mempool misbehavior penalty, the address book lookup fails an assertion due to address format mismatch, causing a crash. The attacker only needs to complete a handshake and advertise an invalid transaction. The issue is patched in Zebra 4.5.0 by applying address canonicalization in the misbehavior update path. Workarounds include binding to IPv4-only addresses or setting net.ipv6.bindv6only=1 on Linux.
Potential Impact
A remote unauthenticated attacker can cause any synced Zebra node running the default Linux dual-stack configuration to crash deterministically by sending a single invalid mempool transaction advertisement after completing a P2P handshake over IPv4. The crash occurs after a 30-second delay due to batch misbehavior processing. This can cause persistent downtime as the crash can be repeated after each restart. No special privileges, mining capability, RPC access, or funds are required to exploit this vulnerability.
Mitigation Recommendations
An official fix is available in Zebra version 4.5.0, which canonicalizes addresses consistently in the mempool misbehavior update path to prevent the assertion failure. Until upgrading, users can mitigate by configuring Zebra to listen on an IPv4-only address (e.g., 0.0.0.0:8233) to avoid IPv4-mapped IPv6 addresses, or by setting the Linux kernel parameter net.ipv6.bindv6only=1 to disable dual-stack acceptance. These workarounds prevent the address mismatch that triggers the crash.
Zebra network: Zebra Address Book Aborted by IPv4-Mapped Mempool Misbehavior Update (CVE-2026-52829)
Description
### Am I affected You are affected if: 1. You run `zebrad` up to and including `v4.4.1`. 2. Your node listens on the default `[::]` address on a Linux host (the standard deployment configuration — `net.ipv6.bindv6only=0` is the default on all common Linux distributions). 3. Your node is synced near the chain tip (the expected production state for any node participating in the network). ### Summary An address normalization mismatch between the handshake path and the mempool misbehavior path causes a deterministic assertion panic when a peer connects via IPv4 to a dual-stack IPv6 listener and then triggers a mempool misbehavior penalty. The handshake path canonicalizes IPv4-mapped IPv6 addresses to plain IPv4 when storing the peer in the address book via `MetaAddr::new_connected`. The mempool misbehavior path forwards the raw transient socket address (IPv4-mapped IPv6 form) when sending `MetaAddrChange::UpdateMisbehavior` to the address book. The address book looks up the canonical IPv4 entry but then asserts that the previous entry's address matches the change's address. The mismatch between the canonical IPv4 address and the raw IPv4-mapped IPv6 address triggers the assertion, and `panic = "abort"` terminates the process. ### Details On Linux with `net.ipv6.bindv6only=0`, an IPv4 connection accepted by a `[::]` listener is represented internally as an IPv4-mapped IPv6 socket address (e.g., `::ffff:127.0.0.1:8233`). Zebra's `canonical_peer_addr` helper converts these to plain IPv4 (e.g., `127.0.0.1:8233`). The handshake path uses `MetaAddr::new_connected`, which canonicalizes the address before storing in the address book. However, inbound inventory registration uses `connected_addr.get_transient_addr()`, preserving the raw IPv4-mapped form. When the mempool later downloads an invalid transaction from this peer and generates a misbehavior penalty, the raw transient address is forwarded through the misbehavior channel to `MetaAddrChange::UpdateMisbehavior`, which does not canonicalize. After the 30-second misbehavior batch flush, `AddressBook::update` retrieves the canonical IPv4 entry but `MetaAddrChange::apply_to_meta_addr` asserts that `previous.addr == self.addr()`, which fails because one is IPv4 and the other is IPv4-mapped IPv6. The attacker needs only to complete a P2P handshake over IPv4 to a dual-stack listener and advertise an invalid mempool transaction (such as a coinbase transaction). The assertion fires after the 30-second misbehavior batch flush. ### Patches Patched in Zebra 4.5.0. The fix canonicalizes the address in the misbehavior update path via a new `MetaAddr::new_misbehavior` constructor that applies `canonical_peer_addr` before creating the `UpdateMisbehavior` change. ### Workarounds Configuring `listen_addr` to an IPv4-only address (e.g., `0.0.0.0:8233`) avoids the IPv4-mapped IPv6 representation and prevents this specific assertion. Alternatively, setting `net.ipv6.bindv6only=1` on Linux prevents dual-stack acceptance. ### Impact A remote unauthenticated peer can deterministically crash any synced Zebra node running the default Linux dual-stack configuration with a single invalid mempool transaction advertisement, followed by a 30-second wait. The attack requires no mining capability, no RPC access, no funds, and no special privileges. The crash can be repeated after each restart, causing persistent downtime. Linux dual-stack sockets and mempool activation are the default production state, not special preconditions. ### Credit Reported by `@Haxatron`.
CVSS v3.1
Score 7.5high
Affected software
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
Zebra nodes running versions up to 4.4.1 on Linux with default dual-stack IPv6/IPv4 listeners are vulnerable to a deterministic assertion panic that aborts the process. This occurs because the handshake path canonicalizes IPv4-mapped IPv6 addresses to IPv4 before storing peers, while the mempool misbehavior path uses the raw IPv4-mapped IPv6 address. When a peer connects over IPv4 to a dual-stack listener and triggers a mempool misbehavior penalty, the address book lookup fails an assertion due to address format mismatch, causing a crash. The attacker only needs to complete a handshake and advertise an invalid transaction. The issue is patched in Zebra 4.5.0 by applying address canonicalization in the misbehavior update path. Workarounds include binding to IPv4-only addresses or setting net.ipv6.bindv6only=1 on Linux.
Potential Impact
A remote unauthenticated attacker can cause any synced Zebra node running the default Linux dual-stack configuration to crash deterministically by sending a single invalid mempool transaction advertisement after completing a P2P handshake over IPv4. The crash occurs after a 30-second delay due to batch misbehavior processing. This can cause persistent downtime as the crash can be repeated after each restart. No special privileges, mining capability, RPC access, or funds are required to exploit this vulnerability.
Mitigation Recommendations
An official fix is available in Zebra version 4.5.0, which canonicalizes addresses consistently in the mempool misbehavior update path to prevent the assertion failure. Until upgrading, users can mitigate by configuring Zebra to listen on an IPv4-only address (e.g., 0.0.0.0:8233) to avoid IPv4-mapped IPv6 addresses, or by setting the Linux kernel parameter net.ipv6.bindv6only=1 to disable dual-stack acceptance. These workarounds prevent the address mismatch that triggers the crash.
Technical Details
- Gcve Source
- db.gcve.eu
- Osv Id
- GHSA-63wg-wjjj-7cp8
- Osv Schema Version
- 1.4.0
- Aliases
- ["CVE-2026-52829"]
- Ecosystems
- ["crates.io"]
- Database Specific Severity
- HIGH
- Cvss Version
- 3.1
Threat ID: 6a46ecb227e9c7971943c58b
Added to database: 07/02/2026, 22:56:50 UTC
Last enriched: 07/02/2026, 23:08:09 UTC
Last updated: 07/31/2026, 12:27:30 UTC
Views: 41
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.