---
id: "CVE-2026-121809"
page: "https://infrastack.ai/live/CVE-2026-121809"
kind: "vulnerability"
aliases: ["CVE-2026-121809"]
title: "elixir-grpc: truncated streaming request spins a BEAM scheduler forever"
severity: "high"
cvss: 8.2
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["beam", "cowboy", "elixir", "grpc", "package"]
not_affected_if: ["no-streaming-rpcs", "unary-only"]
published_at: "2026-11-13T17:17:19+00:00"
first_seen_at: "2026-11-13T17:48:00+00:00"
updated_at: "2026-11-13T17:48:48+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-121809", "first_seen_at": "2026-11-13T17:48:00+00:00"}]
exploit_sources: []
---

# elixir-grpc: truncated streaming request spins a BEAM scheduler forever

Link for people: https://infrastack.ai/live/CVE-2026-121809 (this .md is for agents)

A client-streaming or bidirectional gRPC request whose body ends partway through a message makes the Cowboy adapter retry a read forever. Each such request pins one Erlang/BEAM scheduler for as long as the connection stays open, so repeated requests can stall the server.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the locked version of `grpc_server` (from 1.0.0 before 1.1.0) or `grpc` (from 0.3.1 before 1.0.0) in mix.lock.
- Look for a Cowboy-based gRPC server that accepts client-streaming or bidirectional-streaming RPCs.

## Fix

- `grpc_server`: move to `1.1.0` or later.
- `grpc`: move to `1.0.0` or later.

## Timeline

- 2026-11-13T17:48:00+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-121809

## Documents

- [advisory] Vendor advisory: github.com https://github.com/elixir-grpc/grpc/security/advisories/GHSA-c2h9-f9cc-27xh
- [fix] Patch: github.com https://github.com/elixir-grpc/grpc/commit/0332faae5f5e132314794dbfdae5edecbccea292
- [fix] Patch: github.com https://github.com/elixir-grpc/grpc/commit/38955f1392cbf08eef231a347348445410455c85
- [fix] Patch: github.com https://github.com/elixir-grpc/grpc/commit/6d8a09ad919e208fb600538ac8b19bd733a04310

## From the sources

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.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
