GHSA-xr22-8pqp-gwfh
Poly1305 panics or computes a wrong tag on attacker-chosen messages of 64 bytes or more
GHSA-xr22-8pqp-gwfh is a high vulnerability (CVSS 7.5) in ic-cipher, published October 9, 2026. No source lists public exploit code. Fixed in ic-cipher 0.2.20.
- Severity
- 7.5 HighCVSS 3.1, OSV
- Exploit chance
- UnscoredNo EPSS score yet
- Exploitation
- None knownNot on CISA’s or ENISA’s lists
- Fixed in
0.2.20ic-cipher
Description
Poly1305 in ic-cipher absorbs messages of 64 bytes or more four blocks at
a time, summing four products before one reduction. From 0.2.5 to 0.2.19 the
reduction kept its carries in 32-bit integers, which four summed products can
overflow when the message's bytes are large.
This affects Poly1305 and ChaCha20Poly1305, and everything built on them:
the TLS and QUIC ChaCha20-Poly1305 suites in ic-rustls, HPKE with that
cipher in ic-hpke, and the re-exports in ic-mac and ironcrypto.
What happens depends on how the crate was compiled:
- With overflow checks on (any debug build, or a release profile with
overflow-checks = true) the multiplication panics, and underpanic = "abort"the process ends. The tag is computed over the ciphertext before it is compared, so this happens before authentication and without the key: anyone who can deliver a ChaCha20-Poly1305 ciphertext to be opened can trigger it. - With overflow checks off (Cargo's default for release builds) the arithmetic wraps and the tag is computed wrong on the affected messages.
Ordinary data does not reach the defect. A message of 0xff bytes does: in
one measurement against 0.2.19, 28 of 500 ChaCha20Poly1305::open_detached
calls on 1,024 bytes of 0xff under random keys and nonces panicked in a
debug build. ChaCha20-Poly1305 derives a new Poly1305 key for every nonce, so
each message is a fresh attempt.
AES-GCM and AES-GCM-SIV are not affected, and neither are messages shorter than 64 bytes.
The flaw was corrected in 0.2.20 by carrying in 64 bits.
It was found by running Project Wycheproof's ChaCha20-Poly1305 test vectors against the library.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Affected packages
| Package | Affected | Fixed |
|---|---|---|
ic-ciphercrates.io | 0.2.5 up to 0.2.20 | 0.2.20 |
What each source reports
OSV Score usedRUSTSEC-2026-0337 7.5
Poly1305 panics or computes a wrong tag on attacker-chosen messages of 64 bytes or more
Poly1305 in ic-cipher absorbs messages of 64 bytes or more four blocks at
a time, summing four products before one reduction. From 0.2.5 to 0.2.19 the
reduction kept its carries in 32-bit integers, which four summed products can
overflow when the message's bytes are large.
This affects Poly1305 and ChaCha20Poly1305, and everything built on them:
the TLS and QUIC ChaCha20-Poly1305 suites in ic-rustls, HPKE with that
cipher in ic-hpke, and the re-exports in ic-mac and ironcrypto.
What happens depends on how the crate was compiled:
- With overflow checks on (any debug build, or a release profile with
overflow-checks = true) the multiplication panics, and underpanic = "abort"the process ends. The tag is computed over the ciphertext before it is compared, so this happens before authentication and without the key: anyone who can deliver a ChaCha20-Poly1305 ciphertext to be opened can trigger it. - With overflow checks off (Cargo's default for release builds) the arithmetic wraps and the tag is computed wrong on the affected messages.
Ordinary data does not reach the defect. A message of 0xff bytes does: in
one measurement against 0.2.19, 28 of 500 ChaCha20Poly1305::open_detached
calls on 1,024 bytes of 0xff under random keys and nonces panicked in a
debug build. ChaCha20-Poly1305 derives a new Poly1305 key for every nonce, so
each message is a fresh attempt.
AES-GCM and AES-GCM-SIV are not affected, and neither are messages shorter than 64 bytes.
The flaw was corrected in 0.2.20 by carrying in 64 bits.
It was found by running Project Wycheproof's ChaCha20-Poly1305 test vectors against the library.
- Record
RUSTSEC-2026-0337- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.