Summary
CVE-2026-48853 is a critical-severity vulnerability (CVSS v4.0: 9.2) affecting the elixir-grpc library (Hex package grpc), an Elixir/BEAM implementation of the gRPC protocol. The flaw is an unsafe deserialization of untrusted data (CWE-502) combined with unbounded resource allocation (CWE-770) in the library’s Erlpack codec, enabling unauthenticated remote attackers to crash the entire BEAM virtual machine or achieve remote code execution on the server. Versions 0.4.0 through 0.9.x are affected; version 1.0.0 contains the fix.
Technical details
- Root cause:
GRPC.Codec.Erlpack.decode/2(lib/grpc/codec/erlpack.ex) calls:erlang.binary_to_term/1on the raw gRPC message body with no:safeoption, no size bound, and no type guard on the decoded result. - Trigger condition: The attacker sends a gRPC-framed POST request to any RPC path on the server with
Content-Type: application/grpc+erlpack. No authentication, session token, or valid protobuf schema is required. - Attack vector 1 – Denial of Service: A crafted payload encoding a large number of novel atoms is decoded by
binary_to_term/1. Because BEAM atoms are never garbage-collected and the atom table is bounded (~1,048,576 entries), repeated or sufficiently large requests exhaust the table and crash the entire VM node. - Attack vector 2 – Remote Code Execution: Without the
:safeflag,binary_to_term/1fully reconstructsfunand external-fun terms from wire data. If the deserialized value reaches any downstream call site that invokes it (e.g.,Enum.map,Task.async, or similar), the attacker’s embedded function executes inside the server process. - Prerequisite: The
GRPC.Codec.Erlpackcodec must be explicitly registered in the server’scodecsoption — it is not the default codec (protobuf is). Servers using only the default protobuf codec are not affected.
Affected software
- Package:
grpc(Hex) /elixir-grpc/grpc(GitHub) - Vulnerable versions: 0.4.0 ≤ version < 1.0.0 (i.e., 0.4.0 through 0.9.x inclusive)
- Fixed version: 1.0.0
Severity
CVSS v4.0 Base Score: 9.2 – Critical
Vector: 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
- Attack Vector: Network | Attack Complexity: Low | Attack Requirements: Present (erlpack codec must be enabled)
- Privileges Required: None | User Interaction: None
- Confidentiality / Integrity / Availability (Vulnerable System): High / High / High
Mitigation and recommended actions
- Immediate – upgrade: Update the
grpcHex package to version 1.0.0 or later. The fix replaces the unsafe call with:erlang.binary_to_term/2using the:safeoption (preventing atom-table exhaustion) and adds a type guard that rejects decoded terms containingfun,pid,port, orreferencetypes before they can be used downstream. - If immediate upgrade is not possible – workaround: Remove
GRPC.Codec.Erlpackfrom the server’scodecsconfiguration. Servers that do not explicitly register the Erlpack codec cannot be reached by this attack path. Additionally, restrict network-level access to gRPC endpoints to trusted peers only, and consider placing gRPC services behind an authenticating proxy or mTLS gateway to reduce the unauthenticated attack surface.
IONIX Status
The IONIX research team is tracking ongoing exploitation attempts and recommends immediate patching. Potentially affected assets are outlined in this post.

