HSEC-2026-0007 json
Denial of Service and Memory Exhaustion in aeson
published 2026-05-22 5 mo ago modified 2026-09-16 53 d ago
- cvss
- 7.5
- version 3.1, OSV
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- —
- no score, EPSS covers CVEs only
- public exploits
- 0
- none known
Summary
# Denial of Service and Memory Exhaustion in aeson
A Denial of Service (DoS) and memory exhaustion vulnerability was identified in the `aeson` package. The vulnerability allows an attacker to exhaust server memory and crash the host process by supplying maliciously crafted JSON payloads.
The vulnerability exists in `aeson`'s `withBoundedScientific_` function (located in `src/Data/Aeson/Types/FromJSON.hs`). The exponent bounds check only rejects large positive exponents (`exp10 > 1024`) but fails to reject arbitrarily large negative exponents.
When an attacker sends a JSON number with a massive negative exponent (e.g., `1e-999999999`), the value bypasses the check and flows into `realToFrac`, which computes `fromRational . toRational`. For such a large negative exponent, `toRational` produces a GMP Integer with approximately 1 billion decimal digits, causing immediate and severe memory exhaustion.
Affected `FromJSON` instances:
* `Fixed a` (including `Centi`, `Pico`, `Nano`, etc.) * `NominalDiffTime` * `DiffTime`
## Resolution
The issue was resolved by introducing proper bounds checks:
- `aeson` now applies an absolute bounds check to both positive and negative exponents (`abs exp10 > 1024`).
The fix first shipped in `aeson-2.3.0.0`, and have been backported to the previous release series as `aeson-2.2.5.1`.
Users are strongly advised to update to the patched versions:
* `aeson-2.2.5.1` or later
## Acknowledgements
The vulnerabilities were reported Nathan Walsh, and patched by Li-yao Xia.
Patch / fix
- hackage aeson 2.2.5.1
- hackage text-iso8601 0.1.1.2
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| OSV | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| hackage | aeson | >=0.12.0.0, <2.2.5.1 |
2.2.5.1 |
| hackage | text-iso8601 | >=0.1, <0.1.1.2 |
0.1.1.2 |
References
Sources
- OSV HSEC-2026-0007
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.