Skip to content

EEF-CVE-2026-54892 CVE-2026-54892 GHSA-j43x-5hjq-rgxf

Plug: quadratic-time decoding of nested query/body parameters enables denial of service

High Hex
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

PackageVulnerableFixed 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.5
1.16.4
1.17.2
1.18.3
1.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

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy 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

Is this in your code?

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