HSEC-2026-0011

See a problem?
Import Source
https://github.com/haskell/security-advisories/blob/generated/osv-export/2026/HSEC-2026-0011.json
JSON Data
https://api.osv.dev/v1/vulns/HSEC-2026-0011
Related
Published
2026-11-03T22:32:58Z
Modified
2026-11-03T22:45:02Z
Summary
Superlinear encoding of numbers with large coefficients
Details

Superlinear encoding of numbers with large coefficients

Encoding (pretty-printing) a Scientific number whose coefficient has many digits took time quadratic in the number of digits: the decimal digits were extracted by repeatedly dividing the whole coefficient by 10, once per digit. The Show instance, Data.Text.Lazy.Builder.Scientific and Data.ByteString.Builder.Scientific — which aeson uses to encode JSON numbers — all share this code path. A number with one million digits took about a minute to show, and about a tenth of a second after the fix.

This is a denial-of-service risk for applications that decode numbers from an untrusted source and encode them again, e.g. JSON proxies, loggers or API gateways built on aeson.

Resolution

scientific-0.3.9.0 reimplemented normalize and toDecimalDigits (the digit-extraction primitive) to be practically linear in the coefficient size.

Note that scientific-0.3.9.0 introduced a regression of its own; see HSEC-2026-0012. Upgrade directly to scientific-0.3.10.0 or later, which fixes both issues.

Credits

Reported by Andrzej Rybczak (@arybczak); fixed by Oleg Grenrus (@phadej).

Database specific
{
    "home": "https://github.com/haskell/security-advisories",
    "osvs": "https://raw.githubusercontent.com/haskell/security-advisories/refs/heads/generated/osv-export",
    "repository": "https://github.com/haskell/security-advisories"
}
References

Affected packages

Hackage / scientific

Package

Name
scientific
Purl
pkg:hackage/scientific

Severity

  • 7.5 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H CVSS Calculator

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
0.3.9.0

Affected versions

0.*
0.0.0.0
0.0.0.1
0.0.0.2
0.1.0.0
0.1.0.1
0.2.0.0
0.2.0.1
0.2.0.2
0.3.0.0
0.3.0.1
0.3.0.2
0.3.1.0
0.3.2.0
0.3.2.1
0.3.2.2
0.3.3.0
0.3.3.1
0.3.3.2
0.3.3.3
0.3.3.4
0.3.3.5
0.3.3.6
0.3.3.7
0.3.3.8
0.3.4.0
0.3.4.1
0.3.4.2
0.3.4.3
0.3.4.4
0.3.4.5
0.3.4.6
0.3.4.7
0.3.4.8
0.3.4.9
0.3.4.10
0.3.4.11
0.3.4.12
0.3.4.13
0.3.4.14
0.3.4.15
0.3.5.0
0.3.5.1
0.3.5.2
0.3.5.3
0.3.6.0
0.3.6.1
0.3.6.2
0.3.7.0
0.3.8.0
0.3.8.1

Database specific

human_link
"https://github.com/haskell/security-advisories/tree/main/advisories/published/2026/HSEC-2026-0011.md"
osv
"https://raw.githubusercontent.com/haskell/security-advisories/refs/heads/generated/osv-export/2026/HSEC-2026-0011.json"
source
"https://github.com/haskell/security-advisories/blob/generated/osv-export/2026/HSEC-2026-0011.json"