Description
Loop with Unreachable Exit Condition ('Infinite Loop') vulnerability in elixir-grpc grpc_server and grpc allows unauthenticated attackers to occupy a BEAM scheduler indefinitely via a client-streaming or bidirectional-streaming request whose body ends inside a gRPC message.
GRPC.Server.Adapters.Cowboy.read_stream/1 (grpc_server/lib/grpc/server/adapters/cowboy.ex, and the Cowboy adapter in grpc before the package split) asks for more data whenever the buffer does not hold a complete message. Once the request body has ended, every further read returns an empty chunk, so the buffer never changes and the function retries without end. A single 5-byte length prefix sent with END_STREAM keeps one scheduler busy for as long as the connection stays open, and repeated requests exhaust all schedulers.
This issue affects grpc_server: from 1.0.0 before 1.1.0; grpc: from 0.3.1 before 1.0.0.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| elixir-grpc | grpc_server | 1.0.0 – < 1.1.0 | 1.1.0 |
| elixir-grpc | grpc | 0.3.1 – < 1.0.0 | 1.0.0 |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| Hex | grpc | >= 0.3.1, < 1.0.0 | 1.0.0 | EEF-CVE-2026-121809 |
| Hex | grpc_server | >= 1.0.0, < 1.1.0 | 1.1.0 | EEF-CVE-2026-121809 |
References
- CPU exhaustion via a truncated gRPC message on streaming RPCs in elixir-grpc grpc_server vendor-advisory related
- EEF CNA record for CVE-2026-121809 related
- OSV record EEF-CVE-2026-121809 related
- Introducing commit 0332faa in elixir-grpc/grpc related
- Fix commit 38955f1 in elixir-grpc/grpc patch
- Introducing commit 6d8a09a in elixir-grpc/grpc related