Read the docs
TI-2026-79606 Aliases CVE-2026-105963

Secret key base leaks into logs via wrong-typed Plug.Crypto arguments

Priority LOW 24CWE-532Published · Updated

Key facts

Attack vector
Network
Privileges required
High
User interaction
None
Attack complexity
Low
Attack requirements
None
Impact type
Information disclosure
Confidentiality · integrity · availability
Low · None · None
Fix status
Fixed

Attack profile from CVSS 4.0 · CNA. Fix status from CNA. Impact type from CWE-532.

Summary

Plug.Crypto in plug from 1.6.3 before 1.7.0 and plug_crypto from 1.0.0 before 2.2.1 exposes argument values when a guard fails. A wrong-typed argument raises FunctionClauseError with the secret key base in the top stack frame, which Plug.Cowboy and Bandit write to logs (CWE-532). An unauthenticated remote attacker can obtain the secret key base from application logs or an error tracker, but needs separate access to those logs.

Written with Claude Haiku 5.5 from the sources below · 2026-11-06

Description from the CNA

Externally-Generated Error Message Containing Sensitive Information vulnerability in plug_crypto in elixir-plug plug_crypto allows an unauthenticated remote attacker to expose the secret key base through application logs via a wrong-typed argument. Every public function in Plug.Crypto validates argument types in a function-head guard. A failed guard makes the Erlang VM raise FunctionClauseError with the actual argument values in the top stack frame, so the secret key base, a derived key, or the value an API key is compared against lands in that frame. The library's rescue blocks and Plug.Crypto.prune_args_from_stacktrace/1 only reach exceptions raised inside a function body, so they never see a guard failure. Plug.Cowboy and Bandit write the frame to the error log and attach it as crash_reason Logger metadata, which error trackers forward. Two entry points take request data. Plug.Crypto.verify/4 exposes the secret key base when the token is neither a binary nor nil, which Phoenix.Token.verify/4 reaches because it forwards the token unguarded. Plug.Crypto.secure_compare/2 exposes the other operand when one side is not a binary, as happens when a missing request header yields nil. Reading the leaked value needs separate access to the logs or the error tracker, so the request alone does not disclose the secret to the attacker. This issue affects plug: from 1.6.3 before 1.7.0; plug_crypto: from 1.0.0 before 2.2.1.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00509 43rd percentileScored 2026-11-07
Fix Fixed plug (elixir-plug): 1.7.0plug_crypto (elixir-plug): 2.2.1

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
elixir-plugplug1.6.3 to before 1.7.01.7.0Patch availableCNA
elixir-plugplug_crypto1.0.0 to before 2.2.12.2.1Patch availableCNA
  • plug Vendorelixir-plug Affected 1.6.3 to before 1.7.0 Fixed in 1.7.0 Patch available CNA
  • plug_crypto Vendorelixir-plug Affected 1.0.0 to before 2.2.1 Fixed in 2.2.1 Patch available CNA

CPE names CNA · 2

CPEVersionsRoleVendor
cpe:2.3:a:elixir-plug:plug:*:*:*:*:*:*:*:*——elixir-plug
cpe:2.3:a:elixir-plug:plug_crypto:*:*:*:*:*:*:*:*——elixir-plug
  • cpe:2.3:a:elixir-plug:plug:*:*:*:*:*:*:*:* Versions — — ·elixir-plug
  • cpe:2.3:a:elixir-plug:plug_crypto:*:*:*:*:*:*:*:* Versions — — ·elixir-plug

Remediation

Upgrade plug to 1.7.0 and plug_crypto to 2.2.1, the fixed versions listed for each product.

Written with Claude Haiku 5.5 from the sources below · 2026-11-06

  • Fix · CNA plug (elixir-plug) Fixed in 1.7.0
  • Fix · CNA plug_crypto (elixir-plug) Fixed in 2.2.1

Vendor assessments

Red Hat

Red Hat's page for this CVE →

Not affected: 1 product
  • Red Hat

Timeline

  1. 2026-10-23 Threatist record created from CVE-2026-105963
  2. 2026-10-23 CISA SSVC decision points changed
  3. 2026-10-25 EPSS moved to the below the 50th percentile
  4. 2026-11-06 Affected versions changed · Red Hat
  5. 2026-11-06 CVSS score added · Red Hat

References

  • TI-2026-39665 Plug: quadratic-time decoding of nested query/body parameters enables denial of service CVSS 4.0HIGH 8.7
  • TI-2026-25180 Atom table exhaustion via HTTP/2 :scheme pseudo-header in plug_cowboy CVSS 4.0HIGH 8.7
  • TI-2026-40967 Plug: multipart :length limit is not charged for part headers, enabling unbounded temp-file creation (denial of service) CVSS 4.0MEDIUM 6.9
  • TI-2026-07437 Unbounded buffer accumulation in multipart header parsing causes denial of service in plug CVSS 4.0HIGH 8.2
  • TI-2026-40966 Cookie attribute injection in Plug.Conn.Cookies.encode/2 CVSS 4.0LOW 2.1

Sources