CVE-2026-69208
Http4s: DigestAuth nonce map grows unbounded
Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, the DigestAuth server middleware removes fresh nonces and stops eviction at the first stale nonce because its stale-nonce comparison is inverted. On an application that protects at least one route with DigestAuth, an unauthenticated attacker can repeatedly trigger authentication challenges, causing the persistent nonce map to grow until the JVM exhausts heap memory. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
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
Exploit likelihood
What each source reports
CVE List Score used
7.5
Http4s: DigestAuth nonce map grows unbounded
Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, the DigestAuth server middleware removes fresh nonces and stops eviction at the first stale nonce because its stale-nonce comparison is inverted. On an application that protects at least one route with DigestAuth, an unauthenticated attacker can repeatedly trigger authentication challenges, causing the persistent nonce map to grow until the JVM exhausts heap memory. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
- Record
CVE-2026-69208- 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 - Weakness
- CWE-400, CWE-401
- Updated
- 2026-11-02
EUVDEUVD-2026-79289
7.5
Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, the DigestAuth server middleware removes fresh nonces and stops eviction at the first stale nonce because its stale-nonce comparison is inverted. On an application that protects at least one route with DigestAuth, an unauthenticated attacker can repeatedly trigger authentication challenges, causing the persistent nonce map to grow until the JVM exhausts heap memory. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
- Record
EUVD-2026-79289- 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
GitHub AdvisoriesGHSA-fm4g-76c9-7w69
7.5
Http4s: DigestAuth nonce map grows unbounded
The DigestAuth server middleware's stale-nonce cleanup uses an inverted comparison: it removes fresh nonces and stops at the first stale one. Because a new nonce is created for every unauthenticated challenge, an attacker can drive the nonce map to grow without bound until the JVM runs out of heap.
Impact
Unauthenticated remote denial of service (gradual heap exhaustion / OOM) against any service using DigestAuth. The leak is persistent.
Preconditions
- Application uses
DigestAuthon at least one route.
Workarounds
- Front the DigestAuth protected routes with a rate limiter to slow the leak.
- Restart periodically.
Fixes
- The eviction logic is corrected.
- A max cache size of 1000000 is imposed to protected against a burst between evictions. This limit is not yet configurable.
- Record
GHSA-fm4g-76c9-7w69- 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 - Weakness
- CWE-400, CWE-401
- Updated
- 2026-11-02
NVD
7.5
Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, the DigestAuth server middleware removes fresh nonces and stops eviction at the first stale nonce because its stale-nonce comparison is inverted. On an application that protects at least one route with DigestAuth, an unauthenticated attacker can repeatedly trigger authentication challenges, causing the persistent nonce map to grow until the JVM exhausts heap memory. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
- Record
CVE-2026-69208- 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 - Weakness
- CWE-400, CWE-401
- Updated
- 2026-11-02
OSV
7.5
Http4s: DigestAuth nonce map grows unbounded
Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, the DigestAuth server middleware removes fresh nonces and stops eviction at the first stale nonce because its stale-nonce comparison is inverted. On an application that protects at least one route with DigestAuth, an unauthenticated attacker can repeatedly trigger authentication challenges, causing the persistent nonce map to grow until the JVM exhausts heap memory. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
- Record
CVE-2026-69208- 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 - Weakness
- CWE-400, CWE-401
- Updated
- 2026-11-02
OSVGHSA-fm4g-76c9-7w69
7.5
Http4s: DigestAuth nonce map grows unbounded
The DigestAuth server middleware's stale-nonce cleanup uses an inverted comparison: it removes fresh nonces and stops at the first stale one. Because a new nonce is created for every unauthenticated challenge, an attacker can drive the nonce map to grow without bound until the JVM runs out of heap.
Impact
Unauthenticated remote denial of service (gradual heap exhaustion / OOM) against any service using DigestAuth. The leak is persistent.
Preconditions
- Application uses
DigestAuthon at least one route.
Workarounds
- Front the DigestAuth protected routes with a rate limiter to slow the leak.
- Restart periodically.
Fixes
- The eviction logic is corrected.
- A max cache size of 1000000 is imposed to protected against a burst between evictions. This limit is not yet configurable.
- Record
GHSA-fm4g-76c9-7w69- 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 - Weakness
- CWE-400, CWE-401
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
org.http4s:http4s-ember-server_2.12Maven |
through 0.23.34 | 0.23.35 |
org.http4s:http4s-ember-server_2.13Maven |
through 0.23.34 | 0.23.35 |
org.http4s:http4s-ember-server_3Maven |
through 0.23.34 | 0.23.35 |
org.http4s:http4s-ember-server_2.13Maven |
1.0.0-M1 to 1.0.0-M46 | 1.0.0-M47 |
org.http4s:http4s-ember-server_3Maven |
1.0.0-M1 to 1.0.0-M46 | 1.0.0-M47 |
org.http4s:http4s-ember-server_2.12Maven |
before 0.23.35, plus listed versions 0.10.0-M100.21.00.21.0-M20.21.0-M30.21.0-M4 Show 45 moreShow less0.21.0-M50.21.0-M60.21.0-RC10.21.0-RC20.21.0-RC30.21.0-RC40.21.0-RC50.21.10.21.110.21.120.21.130.21.140.21.150.21.160.21.170.21.180.21.190.21.20.21.200.21.210.21.220.21.230.21.240.21.250.21.260.21.270.21.280.21.290.21.30.21.300.21.310.21.320.21.330.21.340.21.40.21.50.21.60.21.70.21.80.21.90.22-129-24d065b0.22-143-49b5a8d0.22-53-01128f50.22-96-55d31840.22.0 |
0.23.35 |
org.http4s:http4s-ember-server_2.13Maven |
before 0.23.35, plus listed versions 0.10.0-M100.21.00.21.0-M20.21.0-M30.21.0-M4 Show 45 moreShow less0.21.0-M50.21.0-M60.21.0-RC10.21.0-RC20.21.0-RC30.21.0-RC40.21.0-RC50.21.10.21.110.21.120.21.130.21.140.21.150.21.160.21.170.21.180.21.190.21.20.21.200.21.210.21.220.21.230.21.240.21.250.21.260.21.270.21.280.21.290.21.30.21.300.21.310.21.320.21.330.21.340.21.40.21.50.21.60.21.70.21.80.21.90.22-129-24d065b0.22-143-49b5a8d0.22-53-01128f50.22-96-55d31840.22.0 |
0.23.35 |
org.http4s:http4s-ember-server_3Maven |
before 0.23.35, plus listed versions 0.22.00.22.0-M80.22.0-RC10.22.10.22.10 Show 45 moreShow less0.22.110.22.120.22.130.22.140.22.150.22.20.22.30.22.40.22.50.22.60.22.70.22.80.22.90.23.00.23.0-M10.23.0-RC10.23.10.23.100.23.110.23.120.23.130.23.140.23.150.23.160.23.170.23.180.23.190.23.19-RC10.23.19-RC20.23.19-RC30.23.20.23.200.23.210.23.220.23.230.23.240.23.250.23.260.23.270.23.280.23.290.23.30.23.300.23.310.23.32 |
0.23.35 |
org.http4s:http4s-ember-server_2.13Maven |
1.0.0-M1 up to 1.0.0-M47, plus listed versions 1.0.0-M101.0.0-M111.0.0-M131.0.0-M141.0.0-M15 Show 38 moreShow less1.0.0-M161.0.0-M171.0.0-M181.0.0-M191.0.0-M21.0.0-M201.0.0-M211.0.0-M221.0.0-M231.0.0-M241.0.0-M251.0.0-M271.0.0-M281.0.0-M291.0.0-M31.0.0-M301.0.0-M311.0.0-M321.0.0-M331.0.0-M341.0.0-M351.0.0-M361.0.0-M371.0.0-M381.0.0-M391.0.0-M41.0.0-M401.0.0-M411.0.0-M421.0.0-M431.0.0-M441.0.0-M451.0.0-M461.0.0-M51.0.0-M61.0.0-M71.0.0-M81.0.0-M9 |
1.0.0-M47 |
org.http4s:http4s-ember-server_3Maven |
1.0.0-M1 up to 1.0.0-M47, plus listed versions 1.0.0-M221.0.0-M231.0.0-M241.0.0-M251.0.0-M27 Show 19 moreShow less1.0.0-M281.0.0-M291.0.0-M301.0.0-M311.0.0-M321.0.0-M331.0.0-M341.0.0-M351.0.0-M361.0.0-M371.0.0-M381.0.0-M391.0.0-M401.0.0-M411.0.0-M421.0.0-M431.0.0-M441.0.0-M451.0.0-M46 |
1.0.0-M47 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-69208 is a high vulnerability (CVSS 7.5) in Http4s, published September 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.77%, the 55th percentile. Fixed in org.http4s:http4s-ember-server_2.12 0.23.35.
References
github.com/http4s/http4s/security/advisories/GHSA-fm4g-76c9-7w69
github.com/http4s/http4s/commit/8cfeda8472954d631dfbe5dc026463a27653e482
github.com/http4s/http4s/releases/tag/v0.23.35
github.com/http4s/http4s/releases/tag/v1.0.0-M47
github.com/advisories/GHSA-fm4g-76c9-7w69
github.com/CVEProject/cvelistV5/tree/main/cves/2026/69xxx/CVE-2026-69208.json
nvd.nist.gov/vuln/detail/CVE-2026-69208
github.com/http4s/http4s
Left out here: 136 versions. The JSON record has them.