CVE-2026-56811: Phoenix transports do not limit channel joins per connection, enabling process-exhaustion denial of service

Published Jul 7, 2026
·
Updated

Summary

Phoenix transports do not limit the number of channels in a given connection, making it easy to spawn hundreds of thousands of processes over a single connection, and, eventually reaching the max processes VM limit. The solution is to limit the number of channels per transport, so an attacker needs to start new HTTP/WebSocket connections, allowing third-party services to apply rate limits and intervene more easily.

Impact

An unauthenticated remote attacker can cause a denial of service against any Phoenix app that exposes LongPoll/WebSocket transports.

Other sources

Allocation of Resources Without Limits or Throttling vulnerability in phoenixframework phoenix (Phoenix.Socket module) allows an unauthenticated attacker to cause a denial of service against any endpoint that mounts a Phoenix socket with a reachable channel transport (WebSocket or LongPoll).

This vulnerability is associated with program files lib/phoenix/socket.ex and program routine 'Elixir.Phoenix.Socket':handlein/4.

Phoenix transports do not limit the number of channels that a single transport process may join. Every phxjoin message a client sends over one connection starts a persistent channel process, and the socket process accepts an unbounded number of them. A single unauthenticated client can therefore open one WebSocket or LongPoll connection and stream a large number of phxjoin messages, spawning hundreds of thousands of channel processes over that one connection and eventually reaching the BEAM maximum process limit. Once the process table is exhausted the virtual machine can no longer start new processes, denying service to legitimate traffic across the whole node. Because the amplification happens inside a single connection, network-layer connection caps and rate limiting do not mitigate it.

The fix adds a :maxchannelspertransport option (default 100) that bounds the number of channels a single transport process can join, forcing abusive clients to open many connections instead, where external load balancers and reverse proxies can throttle them.

This issue affects phoenix: from 0.11.0 before 1.5.15, from 1.6.0-rc.0 before 1.6.17, from 1.7.0-rc.0 before 1.7.24, and from 1.8.0-rc.0 before 1.8.9.

— MITRE

Affected Software

9 affected componentsFixes available
Phoenix phoenixframework phoenix>0.11.0<=1.5.15, >1.6.0-rc.0<=1.6.17, >1.7.0-rc.0<=1.7.24, >1.8.0-rc.0<=1.8.9
phoenixframework phoenix>=1.2.0<1.5.15
phoenixframework phoenix>=1.6.0<1.6.17
phoenixframework phoenix>=1.7.0<1.7.24
phoenixframework phoenix>=1.8.0<1.8.9
erlang/phoenix>=1.8.0-rc.0<1.8.9
1.8.9
erlang/phoenix>=1.7.0-rc.0<1.7.24
1.7.24
erlang/phoenix>=1.6.0-rc.0<1.6.17
1.6.17
erlang/phoenix>=0.11.0<1.5.15
1.5.15

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade erlang/phoenix to a version that resolves this vulnerability.

    Fixed in 1.8.9
  2. Upgrade

    Upgrade erlang/phoenix to a version that resolves this vulnerability.

    Fixed in 1.7.24
  3. Upgrade

    Upgrade erlang/phoenix to a version that resolves this vulnerability.

    Fixed in 1.6.17
  4. Upgrade

    Upgrade erlang/phoenix to a version that resolves this vulnerability.

    Fixed in 1.5.15
  5. Upgrade

    Upgrade phoenix to a version that resolves this vulnerability.

    Fixed in 1.5.15
  6. Upgrade

    Upgrade phoenix to a version that resolves this vulnerability.

    Fixed in 1.6.17
  7. Upgrade

    Upgrade phoenix to a version that resolves this vulnerability.

    Fixed in 1.7.24
  8. Upgrade

    Upgrade phoenix to a version that resolves this vulnerability.

    Fixed in 1.8.9
  9. Configuration

    Set :max_channels_per_transport (default 100) to bound the number of channels a single transport process can join, forcing abusive clients to open many connections so upstream load balancers/reverse proxies can throttle them.

    phoenix: Phoenix.Socket (phoenixframework Phoenix.Socket module) :max_channels_per_transport = 100 (default)

Event History

Jul 7, 2026
CVE Published
via MITRE·03:09 PM
Data Sourced
via MITRE·03:09 PM
DescriptionWeakness
Data Sourced
via NVD·04:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Sep 3, 2026
Advisory Published
via GitHub·08:33 PM
Data Sourced
via GitHub·08:33 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2026-56811?

CVE-2026-56811 has a severity score of 80, indicating a high risk of denial of service.

2

How does CVE-2026-56811 allow for denial of service?

CVE-2026-56811 allows an unauthenticated attacker to exhaust server resources by enabling unlimited channel joins per connection.

3

Which versions of Phoenixframework are affected by CVE-2026-56811?

CVE-2026-56811 affects all versions of Phoenixframework that utilize the Phoenix.Socket module for channel transports.

4

How can I mitigate CVE-2026-56811 in my Phoenix application?

To mitigate CVE-2026-56811, implement connection throttling and limit the number of channel joins per connection.

5

Is authentication required to exploit CVE-2026-56811?

No, CVE-2026-56811 can be exploited by unauthenticated users, making it more critical to address.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203