EEF-CVE-2026-54892 CVE-2026-54892 GHSA-j43x-5hjq-rgxf
Plug: quadratic-time decoding of nested query/body parameters enables denial of service
- Severity
- 0.0 / 10
- High · CVSS 4.0
- Exploit chance (EPSS)
- 0.89%
- Chance of exploitation in the next 30 days. Higher than 59.49% of scored vulnerabilities.
- Known exploited
- No
- Not in CISA's catalog
- Weakness
- CWE-407 Inefficient Algorithmic Complexity
- Fix
1.19.3- Upgrade plug to this version or later
Description
Summary
Inefficient algorithmic complexity in Plug's nested-parameter decoder allows an unauthenticated remote attacker to cause denial of service. Plug.Conn.Query.decode/4 (and Plug.Conn.Query.decode_each/2) parse query strings and application/x-www-form-urlencoded request bodies. When a key contains many bracketed segments such as a[a][a][a]=1, the decoder walks the brackets and, for each of the N levels, performs a map operation keyed on an ever-growing binary prefix of the key, hashing the full byte range at each step. The total decode cost is therefore quadratic in the number of nesting levels.
With the default Plug.Parsers.URLENCODED body limit of 1,000,000 bytes, a single request can carry roughly 333,000 nesting levels and saturate a BEAM scheduler for minutes. A small number of concurrent requests can saturate all schedulers and render a Plug-based server unresponsive. No authentication or knowledge of application routes is required.
This vulnerability is associated with program files lib/plug/conn/query.ex and program routines Plug.Conn.Query.decode/4, Plug.Conn.Query.decode_each/2, Plug.Conn.Query.split_keys/6, Plug.Conn.Query.insert_keys/3, and Plug.Conn.Query.finalize_pointer/2.
This issue affects plug from 1.15.0 before 1.15.5, 1.16.4, 1.17.2, 1.18.3, and 1.19.3.
Affected versions
Hex
| Package | Vulnerable | Fixed in |
|---|---|---|
| plug | >= 1.15.0, < 1.15.5>= 1.16.0, < 1.16.4>= 1.17.0, < 1.17.2>= 1.18.0, < 1.18.3>= 1.19.0, < 1.19.3 |
1.15.51.16.41.17.21.18.31.19.3 |
| plug | >= 1.15.0, < 1.15.5 |
1.15.5 |
| plug | >= 1.16.0, < 1.16.4 |
1.16.4 |
| plug | >= 1.17.0, < 1.17.2 |
1.17.2 |
| plug | >= 1.18.0, < 1.18.3 |
1.18.3 |
| plug | >= 1.19.0, < 1.19.3 |
1.19.3 |
How to fix
Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.
plug Hex → 1.19.3
- mix
{:plug, "~> 1.19.3"} # then: mix deps.update plug
Severity breakdown
CVSS 4.0 0.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
- Attack vector
- Network
- Attack complexity
- Low
- Attack requirements
- None
- Privileges required
- None
- User interaction
- None
- Confidentiality (vulnerable system)
- None
- Integrity (vulnerable system)
- None
- Availability (vulnerable system)
- High
- Confidentiality (subsequent systems)
- None
- Integrity (subsequent systems)
- None
- Availability (subsequent systems)
- None
Weakness
CWE-407: Inefficient Algorithmic Complexity
An algorithm in a product has an inefficient worst-case computational complexity that may be detrimental to system performance and can be triggered by an attacker, typically using crafted manipulations that ensure that the worst case is being reached.
References
Advisories
Fixes and patches
- github.com/elixir-plug/plug/commit/c317d08fdcf96e17931f7419275b2b8c4bf3e951
- github.com/elixir-plug/plug/commit/9c5d37c440eaae92869eed7c014c47266744fadb
- github.com/elixir-plug/plug/commit/d737eb236f17e31a36290e39f9ef3cd86a1343bd
- github.com/elixir-plug/plug/commit/d4e5568392a4b29e545b91e12e87d6098f976145
- github.com/elixir-plug/plug/commit/a61124aa625d819a218fb07f90afbac8aa85eb0e
Packages
Other links
Timeline
- Published
- Last updated by the source
- Latest EPSS score
Related advisories
| Advisory | Severity | Why it's related |
|---|---|---|
| EEF-CVE-2026-105963 Secret key base exposed in stack trace arguments on wrong-typed Plug.Crypto arguments | Not rated yet | Also affects plug |
| EEF-CVE-2026-56813 Cookie attribute injection in Plug.Conn.Cookies.encode/2 | Not rated yet | Also affects plug |
| EEF-CVE-2026-56814 Plug: multipart :length limit is not charged for part headers, enabling unbounded temp-file creation (denial of service) | Not rated yet | Also affects plug |
| EEF-CVE-2026-8468 Unbounded buffer accumulation in multipart header parsing causes denial of service in plug | High | Also affects plug |
| GHSA-9h73-w7ch-rh73 Header Injection | Medium | Also affects plug |
| GHSA-5v4m-c73v-c7gq Arbitrary Code Execution in Cookie Serialization | High | Also affects plug |
| GHSA-2q6v-32mr-8p8x Null Byte Injection in Plug.Static | High | Also affects plug |
| GHSA-2qm8-x737-gmw5 pyasn1 has quadratic CPU consumption in constructed BIT STRING decoding | High | Same weakness, CWE-407 |
Credits: Braidon Whatley, Jonatan Männchen / EEF, José Valim
MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.
Check your repos with MergeHarbor