CVE-2026-48599

Published: June 15th, 2026
Authorization Bypass Through User-Controlled Key vulnerability in elixir-grpc grpc allows authenticated attackers to access or modify resources belonging to other users by smuggling a conflicting value for any path-bound field via the query string or request body. In 'Elixir.GRPC.Server.Transcode':map_request/5 (lib/grpc/server/transcode.ex), all three clauses use Map.merge/2 with path bindings as the first argument, giving them the lowest merge precedence. A request such as GET /users/me/profile?user_id=victim (or a POST with {"user_id": "victim"} when body: "*") yields a decoded protobuf struct where the path-bound field carries the attacker-supplied value rather than the router-extracted value. Any handler that uses the path-bound field for authorization, multi-tenancy scoping, or ownership checks is silently bypassed. This issue affects grpc from 0.8.0 before 1.0.0.
Unknown
CVSS v2:

Status

DocFilters Release Package State Justification Comment
26.3 protobuf (3.0.0) Not Affected Code Not Present CVE-2026-48599 is an authorization-bypass (CWE-639) vulnerability in elixir-grpc’s ‘grpc’ package, an Elixir/Erlang library distributed via the Hex package manager and classified under the Erlang ecosystem. The flaw is in the HTTP-to-gRPC transcoding layer (GRPC.Server.Transcode.map_request/5 in lib/grpc/server/transcode.ex), where Map.merge/2 gives path bindings the lowest precedence, letting query/body parameters override router-extracted path fields. The CVE was flagged against Document Filters because the scanner associated it with our external/protobuf-3.0.0 dependency, but the vulnerability has nothing to do with the C++ protobuf library. Document Filters is a C++ SDK with .NET/Python/Java bindings; it does not use Elixir, Erlang, the BEAM runtime, the Hex ‘grpc’ package, or any gRPC HTTP transcoding server. The vulnerable map_request/5 function is not present in this codebase in any form.
26.2 protobuf (3.0.0) Needs Triage
26.1 protobuf (3.0.0) Needs Triage
25.4 protobuf (3.0.0) Needs Triage
25.3 protobuf (3.0.0) Needs Triage
25.2 protobuf (3.0.0) Needs Triage
25.1 protobuf (3.0.0) Needs Triage
24.4 protobuf (3.0.0) Needs Triage
24.4.0 protobuf (3.0.0) Needs Triage
24.3 protobuf (3.0.0) Needs Triage
24.2 protobuf (3.0.0) Needs Triage
24.1 protobuf (3.0.0) Needs Triage
23.3 protobuf (3.0.0) Needs Triage
23.2 protobuf (3.0.0) Needs Triage
23.1 protobuf (3.0.0) Needs Triage
22.4 protobuf (3.0.0) Needs Triage
22.3 protobuf (3.0.0) Needs Triage
22.2 protobuf (3.0.0) Needs Triage
22.1 protobuf (3.0.0) Needs Triage
21.11 protobuf (3.0.0) Needs Triage
21.8 protobuf (3.0.0) Needs Triage
21.5.0 protobuf (3.0.0) Needs Triage
21.2.0 protobuf (3.0.0) Needs Triage
11.4.19.3667 protobuf (3.0.0) Needs Triage
11.4.18.3599 protobuf (3.0.0) Needs Triage
11.4.16.3445 protobuf (3.0.0) Needs Triage
11.4.15.3368 protobuf (3.0.0) Needs Triage
11.4.14.3263 protobuf (3.0.0) Needs Triage
11.4.13.3179 protobuf (3.0.0) Needs Triage
11.4.12.3054 protobuf (3.0.0) Needs Triage
11.4.11.3040 protobuf (3.0.0) Needs Triage
11.4.11.2990 protobuf (3.0.0) Needs Triage
11.4.10.2934 protobuf (3.0.0) Needs Triage
11.4.9.2878 protobuf (3.0.0) Needs Triage
11.4.8.2822 protobuf (3.0.0) Needs Triage

Severity score breakdown

References