RUSTSEC-2026-0230High· 7.5▾ TwilightEmpty NIP-50 search filters can panic
▾ Twilight zone — High severity, or a signal on a lesser flaw
impact 41.3 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
The NIP-50 event-matching path searched event content with
slice::windows(search.len()). An empty search string therefore called
slice::windows(0), which always panics instead of returning a match result.
A remote client able to submit filters to an application using this matcher could trigger the panic with an empty NIP-50 search value. This includes clients querying an SDK local relay. Depending on the application's panic configuration and task isolation, the crafted filter could terminate request processing, a runtime worker, or the entire process, causing denial of service. No confidentiality or integrity impact is known.
Empty searches are now handled before the substring search, so the matcher returns a defined result without constructing a zero-sized window or panicking.
nostr >= 0.0.0-0, < 0.44.7Upgrade to a patched release:
nostr 0.44.7Connected by shared product, vendor, weakness, or advisory.
RUSTSEC-2026-0229High· 7.5NIP-98 authorization parsing permits resource exhaustion
RUSTSEC-2026-0228Medium· 4.3NIP-04 parsing amplifies malformed ciphertext memory use
RUSTSEC-2026-0227High· 7.5NIP-44 v2 decryption permits resource exhaustion
RUSTSEC-2026-0226High· 7.5Wallet event parsers accept unauthenticated events
RUSTSEC-2026-0225Medium· 5.5Debug output exposes NIP-46 and NIP-60 credentials
RUSTSEC-2026-0219High· 7.5Remote Denial of Service via malformed NIP-04 IV