crates.io · zebra-rpc
zebrad has full node denial of service via non-ASCII LongPollId in getblocktemplate
You are affected if:
zebrad up to and including v4.4.1.zebrad.toml sets rpc.listen_addr to a TCP address (RPC server is enabled).enable_cookie_auth = true, this requires the attacker to read the .cookie file. With enable_cookie_auth = false, any network client reaching the RPC port can trigger it.The getblocktemplate RPC handler panics when parsing a LongPollId parameter that contains non-ASCII (multi-byte UTF-8) characters. The handler performs byte-index string slicing on the user-supplied string, which panics in Rust when a byte index falls within a multi-byte character boundary. Because Zebra's release profile sets panic = "abort", the panic terminates the entire node process.
The getblocktemplate handler receives a user-supplied LongPollId string and slices it at fixed byte offsets to extract the encoded tip hash and tip height. When the string contains multi-byte UTF-8 characters, a byte-index slice can land in the middle of a character, causing Rust's str indexing to panic with "byte index is not a char boundary."
Under the panic = "abort" release profile, this panic terminates the entire zebrad process rather than just the RPC task.
zebra-rpc 8.0.0 and zebrad 4.5.0.
Replace byte-index string slicing with character-aware parsing or validate that the LongPollId string contains only ASCII characters before slicing.
rpc.listen_addr from zebrad.toml.enable_cookie_auth = true (the default) and restrict filesystem access to the .cookie file.LongPollId parameters are ASCII-only before forwarding.A single authenticated RPC request terminates the zebrad process. Same impact profile as GHSA-c8w6-x74f-vmg3: repeatable on restart, affects mining pools and infrastructure that forward getblocktemplate calls.
Reported by @sangsoo-osec via a private GitHub Security Advisory submission.
Is your project exposed to this? Stateward checks every dependency on every pull request and flags it only if your code actually reaches it.
Check my repoSources: CISA KEV (public domain), OSV.dev & GitHub Advisory Database (CC-BY-4.0), FIRST EPSS, NVD/CWE (public domain). Served live from the Stateward advisory database.