flynn/noise has improper nonce handling yielding potential state DoSGHSA-g9mp-8g3h-3c5c
Fix: flynn/noise#44GHSA-g9mp-8g3h-3c5c is a CWE-311 vulnerability in github.com/flynn/noise. A fix is available for github.com/flynn/noise — see the affected versions and patch details below.
Exploitation Status
No confirmed exploitation observed yet
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for GHSA-g9mp-8g3h-3c5c.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
github.com/flynn/noiseReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.
Description
The Go package github.com/flynn/noise, a Noise Protocol implementation, has two bugs in nonce handling in versions prior to v1.0.0.
Issue 1: Potential nonce overflow
If 2<sup>64</sup> (~18.4 quintillion) or more messages are encrypted with Encrypt after handshaking, the nonce counter will wrap around, causing multiple messages to be encrypted with the same key and nonce, resulting in a potentially catastrophic weakening of the security properties of the symmetric cipher.
This has been resolved in the patched version by returning ErrMaxNonce from the CipherState Encrypt and Decrypt methods before the reserved maximum nonce is reached. If this error is encountered, the program should handshake again to start with a fresh CipherState.
Issue 2: Potential denial of service via invalid ciphertext
If an attacker sends an invalid ciphertext into one peer's Decrypt, the nonce is incremented unconditionally. This causes a desync of the CipherState due to a nonce mismatch between the peers, resulting in a failure to decrypt all subsequent messages. A new handshake will be required to establish a new CipherState.
This has been resolved in the patched version by returning authentication errors from Decrypt before incrementing the nonce.
Patches
Fixed in https://github.com/flynn/noise/pull/44, tagged as v1.0.0.
Acknowledgements
These issues were discovered during an audit of a user of this package (dnstt). Thanks to UC Berkley for commissioning the audit, and to David Fifield and Nathan Brown for their collaboration on the fixes. The fixed issues are noted in the audit as:
- UCB-02-003 Potential nonce overflow in Noise protocol
- UCB-02-006 DoS due to unconditional nonce increment
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐹Go | github.com/flynn/noise | all versions | 1.0.0go get github.com/flynn/noise@v1.0.0 |
Affected Products
noisenoiseprotocolDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/flynn/noise, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update github.com/flynn/noise to 1.0.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-g9mp-8g3h-3c5c is resolved across your whole dependency graph.
Workarounds
Stop feeding it untrusted input: reject or quarantine files and payloads from unverified sources until you can upgrade, restrict accepted formats to the ones you actually need, and run the parsing or decoding step in a least-privileged sandbox or short-lived worker so a crash or corrupted read cannot reach the rest of the process.
Frequently Asked Questions
Is GHSA-g9mp-8g3h-3c5c in your dependencies?
Find it across Go, including transitive dependencies.