CVE-2026-48853
Remote code execution and denial of service via unsafe Erlang term deserialization in elixir-grpc/grpc
CVE-2026-48853 is a critical vulnerability (CVSS 9.2) in Elixir-grpc Grpc, published June 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.78%, the 56th percentile. Fixed in grpc 1.0.0.
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server.
'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process.
This issue affects grpc: from 0.4.0 before 1.0.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.2
Remote code execution and denial of service via unsafe Erlang term deserialization in elixir-grpc/grpc
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server.
'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process.
This issue affects grpc: from 0.4.0 before 1.0.0.
- Record
CVE-2026-48853- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502, CWE-770
- Updated
- 2026-11-02
EUVDEUVD-2026-37015
9.2
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server.
'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process.
This issue affects grpc: from 0.4.0 before 1.0.0.
- Record
EUVD-2026-37015- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-grp7-v8xh-rj7h
9.2
gRPC Erlang package vulnerable to Remote Code Execution with attacker-controlled gRPC payloads
Summary
GRPC.Codec.Erlpack.decode/2 calls :erlang.binary_to_term/1 directly on the raw gRPC message body without the :safe option. Any unauthenticated peer that can reach a gRPC endpoint with Content-Type: application/grpc+erlpack can crash the entire BEAM node via atom table exhaustion or, if a decoded fun term flows into a call site that invokes it, achieve remote code execution inside the server process.
Details
Root cause — lib/grpc/codec/erlpack.ex implements decode/2 as a bare :erlang.binary_to_term(binary) call with no :safe flag, no size limit, and no type validation. This has two independent exploitation paths:
1. DoS via atom exhaustion — BEAM atoms are never garbage-collected and the global atom table is bounded (~1,048,576 entries). A crafted payload encoding large numbers of fresh atoms saturates the table and crashes the entire VM, taking down all applications on the node.
2. RCE via fun materialization — Without :safe, binary_to_term/1 reconstructs fun and external-fun terms from wire data. If the decoded value reaches any call site that applies it (e.g. Enum.map, Task.async, direct invocation), attacker-controlled code executes inside the server process.
Configuration requirement: GRPC.Codec.Erlpack is not registered by default and must be explicitly added to the server's codecs option.
PoC
- Start a gRPC server with
codecs: [GRPC.Codec.Erlpack]. - Open an HTTP/2 connection to the server.
- Send a gRPC-framed POST to any RPC path with
Content-Type: application/grpc+erlpackand a body of:erlang.term_to_binary(fn -> <malicious_code> end). - The server's
decode/2materializes the fun; any downstream call site that invokes the decoded value executes the attacker's code. - For DoS only: send payloads encoding fresh atoms in a loop until the atom table is exhausted and the VM crashes.
Impact
Affects grpc ≥ 0.4.0. Any server that explicitly registers GRPC.Codec.Erlpack is vulnerable to unauthenticated node-level DoS and potentially RCE.
References
- Record
GHSA-grp7-v8xh-rj7h- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502, CWE-770
- Updated
- 2026-11-02
NVD
9.2
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server.
'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process.
This issue affects grpc: from 0.4.0 before 1.0.0.
- Record
CVE-2026-48853- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/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 - Weakness
- CWE-502, CWE-770
- Updated
- 2026-11-02
OSV
9.2
Remote code execution and denial of service via unsafe Erlang term deserialization in elixir-grpc/grpc
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server.
'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process.
This issue affects grpc: from 0.4.0 before 1.0.0.
- Record
CVE-2026-48853- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502, CWE-770
- Updated
- 2026-11-02
OSVEEF-CVE-2026-48853
9.2
Remote code execution and denial of service via unsafe Erlang term deserialization in elixir-grpc/grpc
Summary
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server.
'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process.
This issue affects grpc: from 0.4.0 before 1.0.0.
Configurations
GRPC.Codec.Erlpack must be explicitly registered as a codec on the gRPC server.
- Record
EEF-CVE-2026-48853- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502, CWE-770
- Updated
- 2026-11-02
OSVGHSA-grp7-v8xh-rj7h
9.2
gRPC Erlang package vulnerable to Remote Code Execution with attacker-controlled gRPC payloads
Summary
GRPC.Codec.Erlpack.decode/2 calls :erlang.binary_to_term/1 directly on the raw gRPC message body without the :safe option. Any unauthenticated peer that can reach a gRPC endpoint with Content-Type: application/grpc+erlpack can crash the entire BEAM node via atom table exhaustion or, if a decoded fun term flows into a call site that invokes it, achieve remote code execution inside the server process.
Details
Root cause — lib/grpc/codec/erlpack.ex implements decode/2 as a bare :erlang.binary_to_term(binary) call with no :safe flag, no size limit, and no type validation. This has two independent exploitation paths:
1. DoS via atom exhaustion — BEAM atoms are never garbage-collected and the global atom table is bounded (~1,048,576 entries). A crafted payload encoding large numbers of fresh atoms saturates the table and crashes the entire VM, taking down all applications on the node.
2. RCE via fun materialization — Without :safe, binary_to_term/1 reconstructs fun and external-fun terms from wire data. If the decoded value reaches any call site that applies it (e.g. Enum.map, Task.async, direct invocation), attacker-controlled code executes inside the server process.
Configuration requirement: GRPC.Codec.Erlpack is not registered by default and must be explicitly added to the server's codecs option.
PoC
- Start a gRPC server with
codecs: [GRPC.Codec.Erlpack]. - Open an HTTP/2 connection to the server.
- Send a gRPC-framed POST to any RPC path with
Content-Type: application/grpc+erlpackand a body of:erlang.term_to_binary(fn -> <malicious_code> end). - The server's
decode/2materializes the fun; any downstream call site that invokes the decoded value executes the attacker's code. - For DoS only: send payloads encoding fresh atoms in a loop until the atom table is exhausted and the VM crashes.
Impact
Affects grpc ≥ 0.4.0. Any server that explicitly registers GRPC.Codec.Erlpack is vulnerable to unauthenticated node-level DoS and potentially RCE.
References
- Record
GHSA-grp7-v8xh-rj7h- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502, CWE-770
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-48853
9.2
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server. 'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process. This issue affects grpc: from 0.4.0 before 1.0.0.
- Record
UBUNTU-CVE-2026-48853- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
grpcHex |
0.4.0 up to 1.0.0 | 1.0.0 |
grpcHex |
0.4.0 up to 1.0.0, plus listed versions 0.10.00.10.10.10.20.11.00.11.1 Show 13 moreShow less0.11.20.11.30.11.40.11.50.5.00.5.0-beta0.5.0-beta.10.6.00.7.00.8.00.8.10.9.01.0.0-rc.1 |
1.0.0 |
grpcUbuntu:16.04:LTS |
All versions, plus listed versions 0.10.2-10.11.1-1 |
None known |
grpcUbuntu:18.04:LTS |
All versions, plus listed versions 1.3.2-11.3.2-1ubuntu11.3.2-1.1~build1 |
None known |
grpcUbuntu:20.04:LTS |
All versions, plus listed versions 1.16.1-11.16.1-1ubuntu11.16.1-1ubuntu31.16.1-1ubuntu41.16.1-1ubuntu5 |
None known |
grpcUbuntu:22.04:LTS |
All versions, plus listed versions 1.30.2-31.30.2-3build11.30.2-3build31.30.2-3build51.30.2-3build6 |
None known |
grpcUbuntu:24.04:LTS |
All versions, plus listed versions 1.51.1-3build31.51.1-3build41.51.1-41.51.1-4build11.51.1-4build21.51.1-4.1build31.51.1-4.1build41.51.1-4.1build5 |
None known |
grpcUbuntu:25.10 |
All versions, plus listed versions 1.51.1-61.51.1-6build1 |
None known |
grpcUbuntu:26.10 |
All versions, plus listed versions 1.51.1-8ubuntu11.51.1-91.51.1-9ubuntu31.51.1-10ubuntu1 |
None known |
grpcUbuntu:26.04:LTS |
All versions, plus listed versions 1.51.1-6build11.51.1-71.51.1-7ubuntu21.51.1-7ubuntu31.51.1-8ubuntu1 |
None known |
History
| When | Changed | Sources |
|---|---|---|
| 2026-11-02 | created | CVE List, EUVD, GitHub Advisories, NVD, OSV |
References
github.com/elixir-grpc/grpc/security/advisories/GHSA-grp7-v8xh-rj7h
cna.erlef.org/cves/CVE-2026-48853.html
osv.dev/vulnerability/EEF-CVE-2026-48853
github.com/elixir-grpc/grpc/commit/25bcc569fe2cc4478531a6c546c923205fc751c9
github.com/elixir-grpc/grpc/commit/272a97a5ea1b46af1819f14a831fcf35fc91f992
nvd.nist.gov/vuln/detail/CVE-2026-48853
Show 10 moreShow less
github.com/elixir-grpc/grpc/pull/540
github.com/elixir-grpc/grpc/releases/tag/v1.0.0
github.com/advisories/GHSA-grp7-v8xh-rj7h
github.com
repo.hex.pm
github.com/CVEProject/cvelistV5/tree/main/cves/2026/48xxx/CVE-2026-48853.json
github.com/elixir-grpc/grpc
hex.pm/packages/grpc
ubuntu.com/security/CVE-2026-48853
cve.org/CVERecord?id=CVE-2026-48853