Skip to content
Fencer Vulns
high 7.5

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

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.