# RUSTSEC-2026-0228: NIP-04 parsing amplifies malformed ciphertext memory use

> A malicious sender can cause memory exhaustion in Rust applications using this NIP-04 decryption library by sending malformed encrypted messages with excessive separators or oversized IVs.

- **Severity:** Not scored
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Over the internet
- **Victim action needed:** Not needed
- **Fix available:** Yes
- **Published:** 1 Aug 2026

## What is RUSTSEC-2026-0228?

RUSTSEC-2026-0228 is a denial of service vulnerability in nostr, published on 1 Aug 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.

### Official description

The NIP-04 decryption parser split attacker-controlled content on every `?iv=`
separator and collected all resulting segments before checking that the message had
the expected two parts. It also Base64-decoded the complete IV text before checking
that it represented the required 16-byte AES-CBC IV.

A malicious sender could include a large number of separators or an oversized IV in
an encrypted direct message. Applications that attempted to decrypt the message
performed avoidable allocations proportional to the malformed input, with additional
allocation amplification from the segment vector and Base64 output. This can consume
memory and CPU in clients processing messages received through a relay. It does not
weaken NIP-04 encryption or reveal plaintext or key material.

The parser now uses a single bounded split, rejects additional separators, and
validates the 24-byte encoded IV length before Base64 decoding. Malformed inputs are
returned as errors without allocating for every separator or decoding an arbitrarily
large IV.

## Which versions are affected by RUSTSEC-2026-0228?

1 open source package ship an affected version, including nostr.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `nostr` | crates.io | From 0.0.0-0 | 0.44.7 |

## How do I fix RUSTSEC-2026-0228?

Upgrade nostr to 0.44.7 or later.

## Is RUSTSEC-2026-0228 being exploited?

There is no known exploitation of RUSTSEC-2026-0228 in the wild and no public exploit code.

## Fix prompt for AI coding agents

```text
Check this codebase for RUSTSEC-2026-0228 and fix it if it is affected.

What it is: RUSTSEC-2026-0228 is a denial of service vulnerability in nostr, published on 1 Aug 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.
Exploitation: There is no known exploitation of RUSTSEC-2026-0228 in the wild and no public exploit code.

Affected packages and fixed versions:
- nostr (crates.io): affected from 0.0.0-0; fixed in 0.44.7

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/RUSTSEC-2026-0228/ (Markdown: https://insights.sbomify.com/RUSTSEC-2026-0228/index.md)
```

## Sources

- OSV: https://osv.dev/vulnerability/RUSTSEC-2026-0228

---
From sbomify Insights: https://insights.sbomify.com/RUSTSEC-2026-0228/
Summaries are generated and may contain mistakes; the official description above is the record.
