Описание
Phoenix: Unbounded channel joins per transport enables DoS over few connections
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.
Ссылки
- https://github.com/phoenixframework/phoenix/security/advisories/GHSA-6983-jfq8-485w
- https://nvd.nist.gov/vuln/detail/CVE-2026-56811
- https://github.com/phoenixframework/phoenix/commit/16e295d2fccab185d1292322e2bee5d46c725c8a
- https://github.com/phoenixframework/phoenix/commit/a612100cd8a4279091abc1a2ef8fb98a6d01c0a1
- https://github.com/phoenixframework/phoenix/commit/c498ba8cf49f6accbbd0c643a5340b58db891218
- https://github.com/phoenixframework/phoenix/commit/d19ca0a8d9f82c130b7ed339b9f033433e2dea5e
- https://cna.erlef.org/cves/CVE-2026-56811.html
- https://osv.dev/vulnerability/EEF-CVE-2026-56811
Пакеты
phoenix
>= 0.11.0, < 1.5.15
1.5.15
phoenix
>= 1.6.0-rc.0, < 1.6.17
1.6.17
phoenix
>= 1.7.0-rc.0, < 1.7.24
1.7.24
phoenix
>= 1.8.0-rc.0, < 1.8.9
1.8.9
Связанные уязвимости
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':handle_in/4. Phoenix transports do not limit the number of channels that a single transport process may join. Every phx_join 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 phx_join 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 machi