{"id":"CVE-2026-71397","kind":"vulnerability","aliases":["CVE-2026-71397"],"related":[],"title":"elixir-grpc: unlimited streaming buffers let unauthenticated clients exhaust memory","description":"Allocation of Resources Without Limits or Throttling vulnerability in elixir-grpc grpc_server allows unauthenticated attackers to exhaust memory and crash the node via an oversized client-streaming or bidirectional-streaming request body.\n\nThe streaming read clause of 'Elixir.GRPC.Server.Adapters.Cowboy.Handler':info/3 (grpc_server/lib/grpc/server/adapters/cowboy/handler.ex) never checks the configured max_body_size. Only the unary read path enforces that cap. 'Elixir.GRPC.Server.Adapters.Cowboy':reading_stream/1 (grpc_server/lib/grpc/server/adapters/cowboy.ex) appends every received chunk to its buffer until a complete length-prefixed message arrives. A client can declare a very large message and send it across many small HTTP/2 DATA frames, and the server buffers all of it.\n\nThis issue affects grpc_server: from 1.0.0 before 1.0.6.","summary":"The grpc_server Elixir library does not enforce its max body size on client-streaming and bidirectional-streaming requests, so it buffers every chunk until a full message arrives. An unauthenticated attacker can send an oversized streamed message to exhaust memory and crash the node.","severity":"high","cvss":8.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cowboy","elixir","grpc","grpc_server","package"],"not_affected_if":["not-internet-facing","unary-only-rpcs","version-1.0.6-or-later"],"how_to_check":"- Check the grpc_server version in mix.lock or mix.exs; affected versions are from `1.0.0` before `1.0.6`.\n- Look for streaming RPCs (client-streaming or bidirectional) exposed through the Cowboy adapter.","fix":"- grpc_server: upgrade to `1.0.6` or later","status":"open","published_at":"2026-11-06T21:17:10+00:00","first_seen_at":"2026-11-06T21:45:08+00:00","triaged_at":"2026-11-06T21:46:35+00:00","updated_at":"2026-11-06T21:46:35+00:00","category":"package","confidence":0.75,"triage":{"at":"2026-11-06T21:46:35Z","model":"claude-haiku-5-5","output":{"fix":"- grpc_server: upgrade to `1.0.6` or later","reach":"internet","title":"elixir-grpc: unlimited streaming buffers let unauthenticated clients exhaust memory","impact":"high","summary":"The grpc_server Elixir library does not enforce its max body size on client-streaming and bidirectional-streaming requests, so it buffers every chunk until a full message arrives. An unauthenticated attacker can send an oversized streamed message to exhaust memory and crash the node.","audience":"developers","category":"package","nicknames":[],"who_cares":["elixir","grpc","grpc_server","cowboy"],"confidence":0.75,"fix_status":"available","needs_auth":"no","worst_case":"unauthenticated attacker crashes the node by exhausting memory","analyst_note":"","how_to_check":"- Check the grpc_server version in mix.lock or mix.exs; affected versions are from `1.0.0` before `1.0.6`.\n- Look for streaming RPCs (client-streaming or bidirectional) exposed through the Cowboy adapter.","plain_action":"","needs_analyst":false,"not_affected_if":["unary-only-rpcs","not-internet-facing","version-1.0.6-or-later"],"who_is_affected":"Elixir services that run grpc_server 1.0.0 through 1.0.5 with the Cowboy adapter and expose client-streaming or bidirectional-streaming RPCs are exposed, since the streaming read path ignores max_body_size. Services that only use unary RPCs, or that are not reachable from untrusted clients, are less exposed. The sources do not say whether the flaw depends on any other configuration.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000756,"input_tokens":4510,"output_tokens":610,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-71397':14A,17A '1.0.0':181C '1.0.6':183C 'across':162C 'affect':177C 'alloc':71C 'allow':85C 'append':136C 'arriv':54B,150C 'attack':57B,87C 'bidirect':42B,103C 'bidirectional-stream':41B,102C 'bodi':34B,106C,121C 'buffer':6A,47B,142C,171C 'cap':130C 'check':117C 'chunk':49B,139C 'claus':110C 'client':9A,38B,99C,152C 'client-stream':37B,98C 'complet':145C 'configur':119C 'cowboy':18B 'crash':68B,92C 'cve':12A,15A 'data':166C 'declar':154C 'elixir':2A,19B,27B,81C 'elixir-grpc':1A,80C 'elixir.grpc.server.adapters.cowboy':131C 'elixir.grpc.server.adapters.cowboy.handler':112C 'enforc':31B,128C 'everi':48B,137C 'exhaust':10A,65B,89C 'frame':167C 'full':52B 'grpc':3A,20B,21B,25B,82C,83C,114C,134C,178C 'http/2':165C 'info/3':113C 'issu':176C 'larg':157C 'length':147C 'length-prefix':146C 'let':7A 'librari':28B 'limit':75C 'mani':163C 'max':33B,120C 'memori':11A,66B,90C 'messag':53B,63B,149C,158C 'never':116C 'node':70B,94C 'overs':61B,97C 'packag':23B 'path':127C 'prefix':148C 'read':109C,126C,132C 'receiv':138C 'request':44B,105C 'resourc':73C 'send':59B,160C 'server':22B,26B,84C,170C,179C 'server/lib/grpc/server/adapters/cowboy.ex':135C 'server/lib/grpc/server/adapters/cowboy/handler.ex':115C 'size':35B,122C 'small':164C 'stream':5A,39B,43B,62B,100C,104C,108C 'stream/1':133C 'throttl':77C 'unari':125C 'unauthent':8A,56B,86C 'unlimit':4A 'via':95C 'vulner':78C 'without':74C","nicknames":[],"mitigations":[],"who_affected":"Elixir services that run grpc_server 1.0.0 through 1.0.5 with the Cowboy adapter and expose client-streaming or bidirectional-streaming RPCs are exposed, since the streaming read path ignores max_body_size. Services that only use unary RPCs, or that are not reachable from untrusted clients, are less exposed. The sources do not say whether the flaw depends on any other configuration.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["cowboy","elixir","grpc","grpcserver","high","package"],"campaign_type":null,"search_a":"'-2026':13A,16A '-71397':14A,17A 'buffer':6A 'client':9A 'cve':12A,15A 'elixir':2A 'elixir-grpc':1A 'exhaust':10A 'grpc':3A 'let':7A 'memori':11A 'stream':5A 'unauthent':8A 'unlimit':4A","search_b":"'arriv':54B 'attack':57B 'bidirect':42B 'bidirectional-stream':41B 'bodi':34B 'buffer':47B 'chunk':49B 'client':38B 'client-stream':37B 'cowboy':18B 'crash':68B 'elixir':19B,27B 'enforc':31B 'everi':48B 'exhaust':65B 'full':52B 'grpc':20B,21B,25B 'librari':28B 'max':33B 'memori':66B 'messag':53B,63B 'node':70B 'overs':61B 'packag':23B 'request':44B 'send':59B 'server':22B,26B 'size':35B 'stream':39B,43B,62B 'unauthent':56B","search_c":"'1.0.0':181C '1.0.6':183C 'across':162C 'affect':177C 'alloc':71C 'allow':85C 'append':136C 'arriv':150C 'attack':87C 'bidirect':103C 'bidirectional-stream':102C 'bodi':106C,121C 'buffer':142C,171C 'cap':130C 'check':117C 'chunk':139C 'claus':110C 'client':99C,152C 'client-stream':98C 'complet':145C 'configur':119C 'crash':92C 'data':166C 'declar':154C 'elixir':81C 'elixir-grpc':80C 'elixir.grpc.server.adapters.cowboy':131C 'elixir.grpc.server.adapters.cowboy.handler':112C 'enforc':128C 'everi':137C 'exhaust':89C 'frame':167C 'grpc':82C,83C,114C,134C,178C 'http/2':165C 'info/3':113C 'issu':176C 'larg':157C 'length':147C 'length-prefix':146C 'limit':75C 'mani':163C 'max':120C 'memori':90C 'messag':149C,158C 'never':116C 'node':94C 'overs':97C 'path':127C 'prefix':148C 'read':109C,126C,132C 'receiv':138C 'request':105C 'resourc':73C 'send':160C 'server':84C,170C,179C 'server/lib/grpc/server/adapters/cowboy.ex':135C 'server/lib/grpc/server/adapters/cowboy/handler.ex':115C 'size':122C 'small':164C 'stream':100C,104C,108C 'stream/1':133C 'throttl':77C 'unari':125C 'unauthent':86C 'via':95C 'vulner':78C 'without':74C","first_public_at":"2026-11-06T15:27:17+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-71397","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-71397","severity":null,"published_at":"2026-11-06T21:17:10+00:00","modified_at":"2026-11-06T21:17:10+00:00","first_seen_at":"2026-11-06T21:45:08+00:00","fetched_at":"2026-11-06T21:45:08+00:00","note":null}],"documents":[{"id":90337,"url":"https://github.com/elixir-grpc/grpc/commit/0b663ca53dbf0f36f7f67ff1d0026f4482a18915","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":90338,"url":"https://github.com/elixir-grpc/grpc/commit/49e18c3ec6bb9afe2f712caad3dbab5c56a68a00","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":90339,"url":"https://github.com/elixir-grpc/grpc/security/advisories/GHSA-vx6q-cr5q-945g","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-06T15:27:17+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}