EEF-CVE-2026-124278

Source
https://cna.erlef.org/osv/EEF-CVE-2026-124278.html
Import Source
https://cna.erlef.org/osv/EEF-CVE-2026-124278.json
JSON Data
https://api.osv.dev/v1/vulns/EEF-CVE-2026-124278
Aliases
  • CVE-2026-124278
  • GHSA-xc5v-89vq-hv5m
Published
2026-11-13T15:58:08Z
Modified
2026-11-13T16:11:09Z
Severity
  • 7.6 (High) CVSS_V4 - 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 CVSS Calculator
Summary
Path bindings ignored for gRPC Content-Types on transcoded routes in elixir-grpc grpc_server
Details

Summary

Authorization Bypass Through User-Controlled Key vulnerability in elixir-grpc grpc_server and grpc allows an attacker to make a handler act on a resource other than the one named in the URL of an HTTP-transcoded route, via a request with a gRPC Content-Type.

Only the transcoding clause of GRPC.Server.do_handle_request/4 (grpc_server/lib/grpc/server.ex, and lib/grpc/server.ex before the package split) applies the route's path bindings to the request message. The Cowboy handler picks that clause from the request Content-Type, not from the route. A request to a transcoded URL with application/grpc or application/grpc-web is decoded from the body alone, so every path-bound field takes its value from the body. A gateway, proxy rule or WAF that authorizes on the URL path sees one resource while the handler receives another.

This issue affects grpc_server: from 1.0.0 before 1.1.0; grpc: from 0.8.0 before 1.0.0.

Details

1. The header selects the clause

The Cowboy handler derives the access mode from the request Content-Type. application/json selects :http_transcoding, application/grpc selects :grpc and application/grpc-web+proto selects :grpcweb. The router still matches the transcoded URL template and extracts its path bindings.

2. Bindings are applied in one clause only

GRPC.Server.do_handle_request/4 reads the bindings with adapter.get_bindings/1 and merges them through GRPC.Server.Transcode.map_request/5 only in the :http_transcoding clause. The unary and request-streaming clauses decode the body alone with the selected codec. GRPC.Codec.Proto is in the default codecs of every server, so application/grpc is always accepted.

3. The HTTP/1.1 guard never matches

resolve_access_mode/3 has a clause that forces transcoding for HTTP/1.1 requests. It matches the version as the binary "HTTP/1.1", while Cowboy stores the version as an atom, so the clause never applies and the request works over plain HTTP/1.1.

4. Result

A request to /v1/messages/alice with Content-Type: application/grpc and a message that sets name to victim reaches the handler with name set to victim. With an empty message the field is empty: the path binding is never consulted.

Proof of concept

  1. Start a server with http_transcode: true and a transcoded route that binds a field from the path, for example GET /v1/messages/{name}.
  2. Build a gRPC frame whose message sets name to victim.
  3. Send it over HTTP/1.1 as GET /v1/messages/alice with Content-Type: application/grpc.
  4. Observe that the handler receives name set to victim, not alice.

Impact

An attacker whose requests are authorized by URL path can make the handler read or modify a resource the path does not name, such as another tenant's data.

Configurations

HTTP-to-gRPC transcoding must be enabled with http_transcode: true. Access to a resource must be decided from the URL path rather than from the decoded request, for example by an API gateway, proxy rule or WAF in front of the server.

Database specific
{
    "capec_ids": [
        "CAPEC-460"
    ],
    "cpe_ids": [
        "cpe:2.3:a:elixir-grpc:grpc_server:*:*:*:*:*:*:*:*",
        "cpe:2.3:a:elixir-grpc:grpc:*:*:*:*:*:*:*:*"
    ],
    "cwe_ids": [
        "CWE-436",
        "CWE-639"
    ]
}
References
Credits
    • Eurico Nicacio - REPORTER
    • Eurico Nicacio - FINDER
    • Paulo Valente - REMEDIATION_DEVELOPER
    • Peter Ullrich - COORDINATOR
    • Jonatan Männchen / EEF - COORDINATOR

Affected packages

Hex / grpc_server

Package

Name
grpc_server
Purl
pkg:hex/grpc_server

Affected ranges

Type
SEMVER
Events
Introduced
1.0.0
Fixed
1.1.0

Affected versions

1.*
1.0.0
1.0.1
1.0.2
1.0.3
1.0.4
1.0.5
1.0.6

Database specific

source
"https://cna.erlef.org/osv/EEF-CVE-2026-124278.json"

Hex / grpc

Package

Name
grpc
Purl
pkg:hex/grpc

Affected ranges

Type
SEMVER
Events
Introduced
0.8.0
Fixed
1.0.0

Affected versions

0.*
0.8.0
0.8.1
0.9.0
0.10.0
0.10.1
0.10.2
0.11.0
0.11.1
0.11.2
0.11.3
0.11.4
0.11.5
1.*
1.0.0-rc.1

Database specific

source
"https://cna.erlef.org/osv/EEF-CVE-2026-124278.json"

Git / github.com/elixir-grpc/grpc

Affected ranges

Type
GIT
Repo
https://github.com/elixir-grpc/grpc
Events

Affected versions

v1.*
v1.0.0
v1.0.3
v1.0.6

Database specific

source
"https://cna.erlef.org/osv/EEF-CVE-2026-124278.json"

Git / github.com/elixir-grpc/grpc

Affected ranges

Type
GIT
Repo
https://github.com/elixir-grpc/grpc
Events

Affected versions

v0.*
v0.11.2
v0.8.0
v0.8.1

Database specific

source
"https://cna.erlef.org/osv/EEF-CVE-2026-124278.json"