CVE-2026-48599: Grpc GRPC Erlang Package's Path Bindings Vulnerability
HIGHCVE-2026-48599 is a HIGH grpc erlang package's path bindings vulnerability (CWE-639: Authorization Bypass Through User-Controlled Key) affecting Grpc libraries in the Hex ecosystem. The issue involves grpc erlang package's path bindings are overridable by query string and request body. Remediation is available by upgrading affected packages to version 1.0.0.
CVE-2026-48599 at a Glance
How to Fix CVE-2026-48599
To remediate this vulnerability, upgrade all affected Grpc dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade grpc to 1.0.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for grpc
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-48599, inspect your project dependencies for Grpc:
inspect dependencies for grpc
Analyze the terminal output to locate any version of Grpc in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.0.0), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-639: Authorization Bypass Through User-Controlled Key, where the system's authorization functionality does not prevent one user from gaining access to another user's data or record by modifying the key value identifying the data. In Grpc, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-48599 Affected Grpc Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
grpc
|
Hex |
≥ 0.8.0
< 1.0.0
|
1.0.0
|
References
Frequently Asked Questions
What is CVE-2026-48599?
Which Grpc versions are affected?
What version fixes CVE-2026-48599?
Is grpc affected?
What CWE is associated with CVE-2026-48599?
How can I check Hex dependencies for CVE-2026-48599?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-mwr4-5g34-j5cq",
"modified" : "2026-08-25T18:11:16Z",
"published" : "2026-08-25T18:11:15Z",
"aliases" : [ "CVE-2026-48599" ],
"summary" : "gRPC Erlang package's path bindings are overridable by query string and request body",
"details" : "### Summary\n\nIn the HTTP-to-gRPC transcoding layer of the `grpc` Hex package, query-string and request-body parameters can silently overwrite path-bound fields when building the decoded protobuf request struct. An authenticated attacker who can reach a transcoded endpoint can substitute any path-bound identifier (e.g. `user_id` from `/users/{user_id}/profile`) with an arbitrary value, bypassing authorization, multi-tenancy, and ownership checks that rely on the path-derived field.\n\n### Details\n\nAll three clauses of `GRPC.Server.Transcode.map_request/5` (`grpc_server/lib/grpc/server/transcode.ex`) use `Map.merge/2` with path bindings as the first argument, giving them the lowest merge precedence. Path bindings are extracted by the router from the matched URL template and should be the authoritative resource identifiers, but query-string and body parameters overwrite them. The decoded protobuf struct handed to the handler carries the attacker's value instead of the router's.\n\n### PoC\n\n1. Deploy a transcoded gRPC service with a route like `GET /users/{user_id}/profile` where the handler authorizes access based on `request.user_id`.\n2. Send: `GET /users/me/profile?user_id=victim`\n3. The decoded request struct has `user_id = \"victim\"` — the authorization check passes for the victim's resource, not the caller's.\n4. Alternatively, for a `POST` with `body: \"*\"`: send `{\"user_id\": \"victim\"}` in the JSON body.\n\n### Impact\n\nAffects applications using `grpc` ≥ 0.8.0 with HTTP transcoding enabled that rely on path-bound fields for authorization or tenant isolation. Fixed in 1.0.0. An authenticated attacker can read or modify any other user's resources exposed via transcoded endpoints.\n\n### References\n\n* Introduction commit: https://github.com/elixir-grpc/grpc/commit/8aaf3d3a8c4c7b08ac65e9c6f254e0d24da1d048\n* Patch commit: https://github.com/elixir-grpc/grpc/commit/33b6a095dbc91c6dee3c7b90893d7d74952e82e4",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Hex",
"name" : "grpc"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.8.0"
}, {
"fixed" : "1.0.0"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/elixir-grpc/grpc/security/advisories/GHSA-mwr4-5g34-j5cq"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-48599"
}, {
"type" : "WEB",
"url" : "https://github.com/elixir-grpc/grpc/pull/541"
}, {
"type" : "WEB",
"url" : "https://github.com/elixir-grpc/grpc/commit/33b6a095dbc91c6dee3c7b90893d7d74952e82e4"
}, {
"type" : "WEB",
"url" : "https://cna.erlef.org/cves/CVE-2026-48599.html"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/elixir-grpc/grpc"
}, {
"type" : "WEB",
"url" : "https://github.com/elixir-grpc/grpc/releases/tag/v1.0.0"
}, {
"type" : "WEB",
"url" : "https://osv.dev/vulnerability/EEF-CVE-2026-48599"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-639" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-08-25T18:11:15Z",
"nvd_published_at" : "2026-06-15T23:16:45Z"
}
}