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:
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 |