Every CVE Search/ Get API key

CVE-2026-100351

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion

7.4 HighFix available

kin-openapi is a Go project for handling OpenAPI files. From 0.144.0 until 0.147.0, openapi3filter.ValidationHandler validates an operation selected from decoded URL.Path while a downstream gorilla/mux router configured with UseEncodedPath can dispatch a different operation selected from URL.RawPath. When a public exact route and a protected parameterized route use the same method and overlap after decoding, an unauthenticated remote request containing an encoded path separator can be validated as public and then dispatched to the protected handler without invoking the configured AuthenticationFunc. The reachable path parameter is constrained to an encoded representation that decodes to the public literal route, and proxies that canonicalize the URI before forwarding prevent this specific mismatch. This issue is fixed in version 0.147.0.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
None

Exploit likelihood

0.49%Unchanged since Oct 16, 2026
90%50%10%1%

What each source reports

CVE List Score used 7.4

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion

kin-openapi is a Go project for handling OpenAPI files. From 0.144.0 until 0.147.0, openapi3filter.ValidationHandler validates an operation selected from decoded URL.Path while a downstream gorilla/mux router configured with UseEncodedPath can dispatch a different operation selected from URL.RawPath. When a public exact route and a protected parameterized route use the same method and overlap after decoding, an unauthenticated remote request containing an encoded path separator can be validated as public and then dispatched to the protected handler without invoking the configured AuthenticationFunc. The reachable path parameter is constrained to an encoded representation that decodes to the public literal route, and proxies that canonicalize the URI before forwarding prevent this specific mismatch. This issue is fixed in version 0.147.0.

Record
CVE-2026-100351
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-289, CWE-436
Updated
2026-11-02
EUVDEUVD-2026-102160 7.4

kin-openapi is a Go project for handling OpenAPI files. From 0.144.0 until 0.147.0, openapi3filter.ValidationHandler validates an operation selected from decoded URL.Path while a downstream gorilla/mux router configured with UseEncodedPath can dispatch a different operation selected from URL.RawPath. When a public exact route and a protected parameterized route use the same method and overlap after decoding, an unauthenticated remote request containing an encoded path separator can be validated as public and then dispatched to the protected handler without invoking the configured AuthenticationFunc. The reachable path parameter is constrained to an encoded representation that decodes to the public literal route, and proxies that canonicalize the URI before forwarding prevent this specific mismatch. This issue is fixed in version 0.147.0.

Record
EUVD-2026-102160
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-23vg-4cjm-66q5 7.4

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion

Summary

openapi3filter.ValidationHandler.Middleware validates requests with kin-openapi's legacy router, which selects an OpenAPI operation from the decoded URL.Path. The method is documented as implementing gorilla/mux.MiddlewareFunc, but a downstream gorilla/mux router configured with UseEncodedPath() selects its handler from the encoded representation (URL.RawPath).

An unauthenticated request such as /public%2Fstatus can therefore be validated as an intentionally public operation (/public/status) and then dispatched to a protected operation (/{id}). The configured, rejecting AuthenticationFunc is never invoked, and the protected downstream handler runs.

This is distinct from GHSA-r277-6w6q-xmqw. The behavior below uses an explicit authentication callback that rejects missing credentials and remains reproducible after the v0.144.0 fix for the unsafe default callback.

Affected products

  • Product: github.com/getkin/kin-openapi
  • Component: openapi3filter.ValidationHandler.Middleware
  • Confirmed post-GHSA affected releases: v0.144.0, v0.145.0, and v0.146.0
  • Reporter attestation: each listed release was checked out separately, the attached single-file test was copied into openapi3filter/, and that test passed; maintainers should independently confirm the version range
  • Confirmed affected development revision: d33e44e67734dcde81b576582185e1343fb3985d
  • v0.143.0 also reproduces this mechanism, but GHSA-r277-6w6q-xmqw already provides a simpler bypass on that release; the distinct post-fix claim starts at v0.144.0
  • Earlier releases: not tested; please treat the introduction boundary as unknown

Security impact

An unauthenticated remote requester can reach a handler whose OpenAPI operation requires authentication when all of the following are true:

  1. the application uses ValidationHandler.Middleware as the security gate;
  2. the downstream router preserves and interprets an encoded path, such as gorilla/mux with UseEncodedPath();
  3. a public exact route and a protected parameterized route overlap after decoding;
  4. the public and protected operations expose the same HTTP method;
  5. the protected handler relies on the validation layer's security decision.

The protected operation's path-parameter value is constrained: it is an encoded representation that decodes to a public literal path (public%2Fstatus in this PoC), not an arbitrary attacker-selected identifier. A protected operation without a compatible parameterized path is not reachable through this specific mechanism.

  • Primitive: the security decision is made for a different OpenAPI operation than the operation dispatched by the application router.
  • Demonstrated impact: a protected handler executes while the explicitly rejecting AuthenticationFunc is never invoked.
  • Impact ceiling: confidentiality or integrity loss when the reachable protected handler has that authority; the PoC does not demonstrate data disclosure or state modification.
  • Availability impact: not demonstrated.

Root cause

At the confirmed development revision:

  • openapi3filter/validation_handler.go: ValidationHandler.Load constructs routers/legacy.NewRouter unconditionally.
  • routers/legacy/router.go: route selection uses the decoded request path.
  • routers/gorillamux/router.go: the kin-openapi gorilla router constructs a gorilla/mux router with UseEncodedPath().
  • ValidationHandler.Middleware forwards the unchanged request after validation.

The component making the authentication decision and the component dispatching the handler can therefore disagree about the selected operation.

Reproduction

The attached PoC uses a real net/http server, an explicit API-key callback that rejects missing credentials, and a downstream gorilla/mux router with UseEncodedPath().

From a kin-openapi checkout, copy the self-contained attachment encoded_path_route_confusion_test.go.txt into openapi3filter/ as…

Record
GHSA-23vg-4cjm-66q5
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-289, CWE-436
Updated
2026-11-02
NVD 7.4

kin-openapi is a Go project for handling OpenAPI files. From 0.144.0 until 0.147.0, openapi3filter.ValidationHandler validates an operation selected from decoded URL.Path while a downstream gorilla/mux router configured with UseEncodedPath can dispatch a different operation selected from URL.RawPath. When a public exact route and a protected parameterized route use the same method and overlap after decoding, an unauthenticated remote request containing an encoded path separator can be validated as public and then dispatched to the protected handler without invoking the configured AuthenticationFunc. The reachable path parameter is constrained to an encoded representation that decodes to the public literal route, and proxies that canonicalize the URI before forwarding prevent this specific mismatch. This issue is fixed in version 0.147.0.

Record
CVE-2026-100351
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-289, CWE-436
Updated
2026-11-02
OSV 7.4

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion

kin-openapi is a Go project for handling OpenAPI files. From 0.144.0 until 0.147.0, openapi3filter.ValidationHandler validates an operation selected from decoded URL.Path while a downstream gorilla/mux router configured with UseEncodedPath can dispatch a different operation selected from URL.RawPath. When a public exact route and a protected parameterized route use the same method and overlap after decoding, an unauthenticated remote request containing an encoded path separator can be validated as public and then dispatched to the protected handler without invoking the configured AuthenticationFunc. The reachable path parameter is constrained to an encoded representation that decodes to the public literal route, and proxies that canonicalize the URI before forwarding prevent this specific mismatch. This issue is fixed in version 0.147.0.

Record
CVE-2026-100351
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-289, CWE-436
Updated
2026-11-06
OSVGHSA-23vg-4cjm-66q5 7.4

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion

Summary

openapi3filter.ValidationHandler.Middleware validates requests with kin-openapi's legacy router, which selects an OpenAPI operation from the decoded URL.Path. The method is documented as implementing gorilla/mux.MiddlewareFunc, but a downstream gorilla/mux router configured with UseEncodedPath() selects its handler from the encoded representation (URL.RawPath).

An unauthenticated request such as /public%2Fstatus can therefore be validated as an intentionally public operation (/public/status) and then dispatched to a protected operation (/{id}). The configured, rejecting AuthenticationFunc is never invoked, and the protected downstream handler runs.

This is distinct from GHSA-r277-6w6q-xmqw. The behavior below uses an explicit authentication callback that rejects missing credentials and remains reproducible after the v0.144.0 fix for the unsafe default callback.

Affected products

  • Product: github.com/getkin/kin-openapi
  • Component: openapi3filter.ValidationHandler.Middleware
  • Confirmed post-GHSA affected releases: v0.144.0, v0.145.0, and v0.146.0
  • Reporter attestation: each listed release was checked out separately, the attached single-file test was copied into openapi3filter/, and that test passed; maintainers should independently confirm the version range
  • Confirmed affected development revision: d33e44e67734dcde81b576582185e1343fb3985d
  • v0.143.0 also reproduces this mechanism, but GHSA-r277-6w6q-xmqw already provides a simpler bypass on that release; the distinct post-fix claim starts at v0.144.0
  • Earlier releases: not tested; please treat the introduction boundary as unknown

Security impact

An unauthenticated remote requester can reach a handler whose OpenAPI operation requires authentication when all of the following are true:

  1. the application uses ValidationHandler.Middleware as the security gate;
  2. the downstream router preserves and interprets an encoded path, such as gorilla/mux with UseEncodedPath();
  3. a public exact route and a protected parameterized route overlap after decoding;
  4. the public and protected operations expose the same HTTP method;
  5. the protected handler relies on the validation layer's security decision.

The protected operation's path-parameter value is constrained: it is an encoded representation that decodes to a public literal path (public%2Fstatus in this PoC), not an arbitrary attacker-selected identifier. A protected operation without a compatible parameterized path is not reachable through this specific mechanism.

  • Primitive: the security decision is made for a different OpenAPI operation than the operation dispatched by the application router.
  • Demonstrated impact: a protected handler executes while the explicitly rejecting AuthenticationFunc is never invoked.
  • Impact ceiling: confidentiality or integrity loss when the reachable protected handler has that authority; the PoC does not demonstrate data disclosure or state modification.
  • Availability impact: not demonstrated.

Root cause

At the confirmed development revision:

  • openapi3filter/validation_handler.go: ValidationHandler.Load constructs routers/legacy.NewRouter unconditionally.
  • routers/legacy/router.go: route selection uses the decoded request path.
  • routers/gorillamux/router.go: the kin-openapi gorilla router constructs a gorilla/mux router with UseEncodedPath().
  • ValidationHandler.Middleware forwards the unchanged request after validation.

The component making the authentication decision and the component dispatching the handler can therefore disagree about the selected operation.

Reproduction

The attached PoC uses a real net/http server, an explicit API-key callback that rejects missing credentials, and a downstream gorilla/mux router with UseEncodedPath().

From a kin-openapi checkout, copy the self-contained attachment encoded_path_route_confusion_test.go.txt into openapi3filter/ as…

Record
GHSA-23vg-4cjm-66q5
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-289, CWE-436
Updated
2026-11-06
Show 7 moreShow less
OSVRHSA-2026:76677 7.5

Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update

Record
RHSA-2026:76677
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRHSA-2026:82637 7.5

Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update

Record
RHSA-2026:82637
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRHSA-2026:85266 7.5

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:85266
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-100351 7.4

kin-openapi is a Go project for handling OpenAPI files. From 0.144.0 until 0.147.0, openapi3filter.ValidationHandler validates an operation selected from decoded URL.Path while a downstream gorilla/mux router configured with UseEncodedPath can dispatch a different operation selected from URL.RawPath. When a public exact route and a protected parameterized route use the same method and overlap after decoding, an unauthenticated remote request containing an encoded path separator can be validated as public and then dispatched to the protected handler without invoking the configured AuthenticationFunc. The reachable path parameter is constrained to an encoded representation that decodes to the public literal route, and proxies that canonicalize the URI before forwarding prevent this specific mismatch. This issue is fixed in version 0.147.0.

Record
UBUNTU-CVE-2026-100351
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVGO-2026-6769 No score

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion in github.com/getkin/kin-openapi

kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion in github.com/getkin/kin-openapi

Record
GO-2026-6769
Updated
2026-11-06
OSVopenSUSE-SU-2026:12164-1 No score

hugo-0.168.0-2.1 on GA media

These are all security issues fixed in the hugo-0.168.0-2.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:12164-1
Updated
2026-11-02
OSVopenSUSE-SU-2026:12309-1 No score

timoni-0.36.0-1.1 on GA media

These are all security issues fixed in the timoni-0.36.0-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:12309-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
github.com/getkin/kin-openapi
Go
0.144.0 up to 0.147.0
0.147.0
grafana12.4
Red Hat:hummingbird:1
From an advisory covering 12 CVEs
before 0:12.4.12-0.4.hum1
0:12.4.12-0.4.hum1
hugo
Red Hat:hummingbird:1
From an advisory covering 9 CVEs
before 0:0.168.0-0.1.hum1
0:0.168.0-0.1.hum1
grafana13.2
Red Hat:hummingbird:1
From an advisory covering 9 CVEs
before 0:13.2.3-0.3.hum1
0:13.2.3-0.3.hum1
golang-github-getkin-kin-openapi
Ubuntu:22.04:LTS
All versions, plus listed versions
0.32.0-20.80.0-10.85.0-1
None known
golang-github-getkin-kin-openapi
Ubuntu:24.04:LTS
All versions, plus listed versions
0.117.0-10.120.0-10.122.0-30.123.0-1
None known
golang-github-getkin-kin-openapi
Ubuntu:26.10
All versions, plus listed versions
0.124.0-10.135.0-1
None known
golang-github-getkin-kin-openapi
Ubuntu:26.04:LTS
All versions, plus listed versions
0.124.0-1
None known
hugo
openSUSE:Tumbleweed
From an advisory covering 6 CVEs
before 0.168.0-2.1
0.168.0-2.1
timoni
openSUSE:Tumbleweed
From an advisory covering 14 CVEs
before 0.36.0-1.1
0.36.0-1.1

History

History
RecordedChangedSources
affected
affected, aliases, factsOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-100351 is a high vulnerability (CVSS 7.4) in Getkin Kin-openapi, published October 10, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.49%, the 42nd percentile. Fixed in github.com/getkin/kin-openapi 0.147.0.

References

Show 140 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open