Repository navigation
fix(deps): update vulnerable dependencies [security] (release-2.4) - #415
Open
crossplane-renovate[bot] wants to merge 1 commit into
Open
crossplane-renovate[bot] wants to merge 1 commit into
crossplane-renovate[bot] wants to merge 1 commit into
Conversation
crossplane-renovate
Bot
requested review from
jcogilvie and
tampakrap
as code owners
October 9, 2026 08:14
crossplane-renovate
Bot
requested review from
jbw976
and removed request for
a team
October 9, 2026 08:14
Contributor
Author
ℹ️ Artifact update noticeFile name: go.modIn order to perform the update(s) described in the table above, Renovate ran the
Details:
|
crossplane-renovate
Bot
force-pushed
the
renovate/release-2.4-vulnerable-dependencies
branch
from
October 9, 2026 18:44
e889da2 to
c055319
Compare
crossplane-renovate
Bot
force-pushed
the
renovate/release-2.4-vulnerable-dependencies
branch
from
October 16, 2026 08:14
c055319 to
6f7c922
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v0.144.0→v0.149.0v0.58.0→v0.60.0kin-openapi: Unauthenticated panic (DoS) in openapi3filter legacy router via non-canonical/unsupported HTTP method on a static path
CVE-2026-100347 / GHSA-fh4f-47mf-f2gj
More information
Details
Summary
The
openapi3filter.ValidationHandler(the exported, documented request-validation middleware) hard-wires the legacy router (routers/legacy). That router matches the incoming request method verbatim against a trie built exclusively from upper-cased canonical HTTP methods. A request carrying a method token that is not one of the 9 standard methods — a legitimate-but-unsupported token such asPROPFIND, or a non-canonical case variant such as lowercaseget— misses the trie, leavesroute == nil, and for an existing static path falls through toPathItem.GetOperation(method), whosedefault:case callspanic(...). The panic fires inside route resolution, before any authentication runs. This is an unauthenticated, remotely triggerable denial of service (recovered per-connection panic + unbounded error-log growth).Root Cause
openapi3filter/validation_handler.go:39—ValidationHandler.Load()always constructslegacyrouter.NewRouter(doc); there is no alternative router option on this path.routers/legacy/router.go:109— the request method is used verbatim (method, url := req.Method, ...); there is no canonicalization or rejection of unknown method tokens.routers/legacy/router.go:69-70— the trie is populated withstrings.ToUpper(method)keys taken frompathItem.Operations()(canonicalhttp.Method*constants only).routers/legacy/router.go:141—root.Match(method + " " + remainingPath)misses for a non-canonical/unsupported method →route == nil.routers/legacy/router.go:146-150— in theroute == nilblock,doc.Paths.Value(path)returns non-nil for an existing static path, and control reachespathItem.GetOperation(method).openapi3/path_item.go:174—GetOperation'sswitch methodhas no matching case →default: panic(fmt.Errorf("unsupported HTTP method %q", method)).Impact
An unauthenticated attacker sends a single request with a non-standard HTTP method token to any existing static path. The handler goroutine panics; Go's
net/httprecovers the panic per connection (process survives), aborts the connection (client sees a reset / 500), and logs a full stack trace. Repeated requests cause connection churn and unboundedhttp: panic servinglog growth, and the request never reaches authentication. Availability impact (A:L) under the default synchronousValidationHandlermiddleware; on non-net/http hosts or when reached on an application goroutine the ceiling is a full crash.Proof of Concept
Serve any spec with a static path (e.g.
/ping) behindopenapi3filter.ValidationHandler, then:Reproduced end-to-end against a real
net/http.Server+ValidationHandler:PROPFIND /pingand lowercaseget /pingboth abort the connection with a panic atpath_item.go:174(stack:GetOperation<-legacy.FindRouterouter.go:150 <-ValidationHandler.validateRequestvalidation_handler.go:84); the process stays alive and subsequentGET /pingreturns 200.Attack Chain
PROPFIND /ping HTTP/1.1(any known static path). Guard: net/http method validation. Bypass proof: net/http accepts any valid HTTP token as a method —PROPFINDand lowercasegetboth reach the handler.legacy/router.go:141root.Match("PROPFIND /ping"). Guard: trie match. Bypass proof: trie holds only upper-cased canonical methods → miss →route == nil.route == nilblock:router.go:146doc.Paths.Value("/ping")→ non-nil for an existing static path (exact map lookup). Guard:pathItem == nilcheck (l.147). Bypass proof: static path exists → not nil → proceeds.router.go:150pathItem.GetOperation("PROPFIND")→path_item.go:174default: panic(...).Bypass Evidence
PROPFINDand lowercasegetboth reached the handler and panicked.FindRouteentry andGetOperation;req.Methodis used verbatim (router.go:109).git show v0.144.0:openapi3/path_item.goshowspanic(...)at line 174;git show v0.144.0:routers/legacy/router.goshows verbatim method use and the unguardedGetOperationcall.git log v0.144.0..HEADon these files is empty (no post-tag fix).Scoping Note
The panic requires the request path to be an exact static (non-templated) key in the served spec. A concrete path against a
/{id}template returns a clean 500 (not a panic), becausePaths.Valueis an exact map lookup. Static paths (/health,/login,/version,/metrics,/ping,/) are ubiquitous in real specs and discoverable from public specs/standard endpoints, so a vulnerable target almost always exists. This makes the finding arguably broader than existing panic advisories, as it needs no special spec construct — any static path suffices.Affected Versions
<= 0.144.0(present on the latest release tag v0.144.0; long-standing; no patched version).Suggested Fix
In the legacy router, canonicalize/validate the request method before route resolution and return
ErrMethodNotAllowed/ErrPathNotFoundfor unknown methods, or makePathItem.GetOperationreturn an error (nil) for unrecognized methods instead of callingpanic.Reported by zx (Jace) — GitHub: @manus-use
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
kin-openapi spec loader panics on a self-referential additionalProperties $ref (nil-pointer DoS)
CVE-2026-100348 / GHSA-mh7x-f8wq-4jhx
More information
Details
The defect
Confirmed at HEAD (f0407d5, v0.144.0). openapi3/loader.go, inside resolveComponent's drill closure (around line 455), the case *SchemaRef branch for pathPart == "additionalProperties" dereferences c.Value.AdditionalProperties with no nil-check on c.Value:
When a $ref fragment drills through .../additionalProperties of a schema whose Value is still nil (a pure, not-yet-resolved $ref, or a self-reference resolved before its own Value is set), c.Value is nil and the .AdditionalProperties access panics.
Input and attacker
A tiny crafted OpenAPI document, one schema, no external refs, no network:
Attacker model: any service or tool that loads an untrusted spec via the default openapi3.Loader (LoadFromData / LoadFromFile / LoadFromURI), e.g. a spec registry, an API-management platform ingesting user specs, a linter, or a converter. It crashes during LOAD (ResolveRefsIn), before Validate.
Verification level
EXECUTED with negative controls (agent-run go test at HEAD f0407d5, including yesterday's security merge; the bug is still present). The full stack pins LoadFromData:196 -> ResolveRefsIn:274 -> resolveSchemaRef:1048 -> resolveComponent:485 -> drill:439 -> :455, propagating to main(); no recover() in loader.go/schema.go (grep + trace). Two negative controls stay clean: drilling additionalProperties of a resolved schema loads fine (the existing TestIssue376 happy path), and a normal recursive schema loads fine, so the nil Value is specifically the cause. I independently re-confirmed at HEAD that loader.go:455 dereferences c.Value.AdditionalProperties with no nil-check on c.Value. NOT verified: I did not enumerate every consumer's recover posture.
Suggested fix
Add if c.Value == nil { break } (fall through to the nil-safe drillIntoField) before touching c.Value.AdditionalProperties. One line.
Also cleared (stated, not claimed)
The allOf/anyOf $ref diamond does not blow up: Schema.validate threads its stack through the return and never pops it, acting as a global pointer-keyed visited-set (executed N=10..30, microseconds). External-ref SSRF/path-traversal is blocked by default (IsExternalRefsAllowed=false); the known custom-ReadFromURIFunc bypass is the already-banked downstream oasdiff item.
Advisory-source note
Five-source enumeration: every kin-openapi advisory (CVE-2025-30153 plus the five fresh July-2026 GHSAs) is in openapi3filter (request validation); this finding is in the openapi3 loader, untouched by that systematic reporter and flagged un-analyzed by the prior oasdiff scout. Not contested on the loader surface as of today (a systematic hunter could pivot, so it decays; submit reasonably promptly).
Dedup
Dedup gate clean: no kin-openapi loader verdict in COVERED-INDEX, DISCLOSURE-INDEX or SCOUT-EXCLUDE (the one DISCLOSURE-INDEX hit is report #313, the downstream oasdiff, a different repo/lane).
Tooling
AI assistance was used while investigating. The panic is executed-verified with negative controls (a one-schema self-referential additionalProperties $ref crashes LoadFromData while a resolved additionalProperties and a normal recursive schema load fine), and I confirmed at HEAD that loader.go:455 dereferences c.Value.AdditionalProperties with no nil-check on c.Value, on a load path with no recover.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion
CVE-2026-100351 / GHSA-23vg-4cjm-66q5
More information
Details
Summary
openapi3filter.ValidationHandler.Middlewarevalidates requests with kin-openapi'slegacy router, which selects an OpenAPI operation from the decoded
URL.Path. Themethod is documented as implementing
gorilla/mux.MiddlewareFunc, but a downstreamgorilla/mux router configured with
UseEncodedPath()selects its handler from theencoded representation (
URL.RawPath).An unauthenticated request such as
/public%2Fstatuscan therefore be validated as anintentionally public operation (
/public/status) and then dispatched to a protectedoperation (
/{id}). The configured, rejectingAuthenticationFuncis 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
github.com/getkin/kin-openapiopenapi3filter.ValidationHandler.Middlewaresingle-file test was copied into
openapi3filter/, and that test passed; maintainersshould independently confirm the version range
d33e44e67734dcde81b576582185e1343fb3985dsimpler bypass on that release; the distinct post-fix claim starts at v0.144.0
Security impact
An unauthenticated remote requester can reach a handler whose OpenAPI operation
requires authentication when all of the following are true:
ValidationHandler.Middlewareas the security gate;gorilla/mux with
UseEncodedPath();The protected operation's path-parameter value is constrained: it is an encoded
representation that decodes to a public literal path (
public%2Fstatusin this PoC),not an arbitrary attacker-selected identifier. A protected operation without a
compatible parameterized path is not reachable through this specific mechanism.
operation dispatched by the application router.
AuthenticationFuncis never invoked.handler has that authority; the PoC does not demonstrate data disclosure or state
modification.
Root cause
At the confirmed development revision:
openapi3filter/validation_handler.go:ValidationHandler.Loadconstructsrouters/legacy.NewRouterunconditionally.routers/legacy/router.go: route selection uses the decoded request path.routers/gorillamux/router.go: the kin-openapi gorilla router constructs agorilla/mux router with
UseEncodedPath().ValidationHandler.Middlewareforwards 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/httpserver, an explicit API-key callback thatrejects 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.txtintoopenapi3filter/asencoded_path_route_confusion_test.go, then run:Expected attack observation:
Controls included in the test show that:
/ordinaryselects the protected operation, invokes authentication once, and isrejected with HTTP 401;
/public/statusreaches only the intentionally public handler;/{id}handler with HTTP 202 while theauthentication callback remains uncalled;
router.Use(validationHandler.Middleware)wiring reproduce the same result.Reverse-proxy reachability
The same request was reproduced through Nginx 1.31.3 using the official
nginx:alpineimage digestsha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752.The exact container invocation was:
docker run --rm --name kin-openapi-nginx \ --add-host=host.docker.internal:host-gateway \ -p 18081:8080 -p 18082:8081 \ -v "$PWD/poc/nginx.conf:/etc/nginx/nginx.conf:ro" \ nginx:alpineContainer port 8080 uses
proxy_pass http://host.docker.internal:18080;without areplacement URI. Host port 18081 therefore preserved
/public%2Fstatus; the protectedhandler returned HTTP 202 and the
authentication callback remained at zero calls. With
proxy_pass http://host.docker.internal:18080/;on container port 8081 / host port18082, Nginx canonicalized the upstream URI; both layers selected
/public/statusandthe bypass did not occur.
Nginx access-log observations:
The response route headers were
X-Poc-Route: /{id}on the preserving listener andX-Poc-Route: /public/statuson the canonicalizing listener. Backend observations forthe two requests were:
This control shows that upstream path handling is a deployment precondition rather
than claiming that every proxy configuration is affected.
The canonical protected control produced:
Suggested remediation
The authentication layer and downstream dispatcher must select the same OpenAPI
operation from the same request representation.
Potential approaches:
ValidationHandleraccept a caller-suppliedrouters.Routerand require it tomatch downstream routing semantics;
NewValidatoralready accepts a router but is safe only when thesupplied router selects operations using the same semantics as the dispatcher;
callers must also supply an
AuthenticationFuncthroughValidationOptions, orprotected requests fail with the existing missing-authentication-service error;
ValidationHandlerfail closed on an encodedpath separator when
URL.PathandURL.RawPathcan select different operations,and verify this behavior against the full suite;
Replacing the legacy router with the kin-openapi gorilla router closes this PoC, but a
local compatibility check changed two existing missing-path-parameter tests from HTTP
400 semantics to route-not-found HTTP 404 semantics. A direct router swap is therefore
not a fully validated drop-in fix.
Public-reference triage
The public advisory list and related path-encoding reports reviewed on 2026-08-18 did
not describe this authentication-boundary crossing. Relevant nearby reports include
issues #397, #1089, and #1105 and PR #400. This search is not proof of novelty; please
deduplicate against private reports.
Credit
Preferred credit: Satoru Kanno (GMO CONNECT Inc., GMO Internet Group, Inc.)
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
kin-openapi: YAML NaN/Inf Values Bypass Built-in Guards and Panic via OAS 3.1 Validation Path
CVE-2026-100352 / GHSA-rj39-cv6w-8wv7
More information
Details
Summary
kin-openapi guards against
NaNandInfvalues in its built-in schema visitor (visitJSON) by returningErrSchemaInputNaN/ErrSchemaInputInfwhen afloat64input violates those constraints. For OAS 3.1 specs, however,Schema.VisitJSONroutes throughuseJSONSchema2020, which hands the value directly tosanthosh-tekuri/jsonschema/v6v6.0.2 without applying the same guard.Inside
jsonschema/v6v6.0.2,numValidatebuilds a*big.Ratfrom the input viabig.Rat.SetString(fmt.Sprintf("%v", v)). ForNaN/Infthis parse fails silently and returnsnil.numValidatethen dereferences the nil*big.Rat(inmath/big.(*Rat).Cmp), producing a Go runtime panic.An attacker delivers this by sending an HTTP request with
Content-Type: application/yaml(orapplication/x-yaml) and a YAML body containing.nan,.inf, or-.inf. TheYamlBodyDecoderdecodes those tokens intomath.NaN()/math.Inf(±1)(standard YAML 1.2 behavior), and they propagate to the unguardeduseJSONSchema2020path whenever the schema declares a numeric constraint (minimum,maximum,exclusiveMinimum,exclusiveMaximum, ormultipleOf).Details
Root Cause
The built-in visitor
visitJSONatopenapi3/schema.go:1968guards NaN/Inf explicitly:For OAS 3.1 specs,
VisitJSONdispatches touseJSONSchema2020(openapi3/schema_jsonschema_validator.go:204), which contains no such guard:jsonSchemaValidator.validatecallsjsonschema/v6.Schema.Validate(line 146), which reachesnumValidatein v6.0.2. There,big.Rat.SetString(fmt.Sprintf("%v", v))returns(nil, false)forNaN/Inf, and the code dereferences thenil*big.RatinRat.Cmp, causing the panic.Proof of Concept
Environment
v0.144.0, commitf0407d5)Spec
Minimal OAS 3.1 spec (
spec.yaml) declaring a YAML body with a numeric constraint:Trigger
A single
POST /testwithContent-Type: application/yamland body.nan,.inf, or-.inf. All three variants panic:Panic stack trace (confirms exact chain)
net/http behavior (severity nuance)
Behind a standard
net/httpserver, the panic is recovered per-connection. The client sees a dropped connection; the server process continues:This is a recoverable panic, unlike the recursion finding.
recover()catches it (verified by capturing the panic value in adeferin the same goroutine). Non-net/httphosts or validation performed in an application-spawned goroutine are not covered by that recovery and would experience a full-process crash.Fix verification
Upgrading only the transitive dependency to
jsonschema/v6@v6.0.3(viago get github.com/santhosh-tekuri/jsonschema/v6@v6.0.3) eliminates the panic entirely; all three payloads return a clean validation error:This confirms the upstream
jsonschema/v6v6.0.3 release treats the NaN/Inf case as a bug and fixes it at the source. It also confirmsuseJSONSchema2020is the reachable path: patching only the transitive dep removes the panic without touching kin-openapi code.Why This Is a Vulnerability, Not by Design
ErrSchemaInputNaN/ErrSchemaInputInfatschema.go:1968). The stated policy is: these values are not allowed.useJSONSchema2020) simply omits the same guard — a coding gap, not a design decision.jsonschema/v6v6.0.3 fixes the same case as a bug. Two independent code owners agree it should not panic..nan/.infas a numeric field.Impact
net/httprecovery wrapper is present; the whole process crashes on a single request.minimum,maximum,exclusiveMinimum,exclusiveMaximum,multipleOf) are common on any numeric field with a range.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
kin-openapi: Uncontrolled Recursion on Circular allOf/anyOf/oneOf Schemas Causes Fatal Process Crash
CVE-2026-100354 / GHSA-g8cf-rcjf-c8cf
More information
Details
Summary
kin-openapi's spec loader and spec-time validator both handle circular schema references safely: the loader resolves circular
$refs on purpose (to support recursive data structures), andSchema.validate()uses stack-based cycle detection.Validate()therefore accepts a schema whoseallOf/anyOf/oneOfchain refers back to itself, returning no error.The runtime validators do not have that protection. When such a schema is used for request or response validation, the recursion through the combinator chain is unbounded. In Go this produces a fatal stack overflow (
runtime: goroutine stack exceeds ... limit/fatal error: stack overflow), which is not a recoverable panic.recover()cannot catch it, sonet/http's per-connection recovery does not help. The entire process is terminated, including all goroutines serving unrelated clients.Two independent unguarded recursion sites were confirmed:
openapi3/schema.go—visitJSON/visitXOFOperations(reached byVisitJSON, i.e. response validation and direct schema validation).openapi3filter/req_resp_decoder.go—decodeValue(reached first during request parameter decoding). The report also identifies the same gap inurlValuesDecoder.parseValueandbuildResObj/buildFromSchemas.Details
Root Cause
Schema.validate()has cycle detection (openapi3/schema.go:1396):The runtime visitor has none.
visitJSON(line 1951) callsvisitXOFOperations(line 2189), which iterates the combinator slice and callsvisitJSONagain on each sub-schema:The request-decoding path has the same structure in
decodeValue(openapi3filter/req_resp_decoder.go:270):Proof of Concept
Environment
v0.144.0, commitf0407d5)Path A: response / direct schema validation (
VisitJSON)A schema whose
allOfrefers to itself.Validate()is called first to show the schema is accepted, thenVisitJSON():Output:
A
defer recover()placed around the call did not catch the fatal error — the process aborted with a non-zero exit code, confirming it is unrecoverable.Path B: HTTP request validation against a loaded spec (realistic delivery)
A legal OAS 3.0 spec with a circular
allOf$ref, loaded normally, served behind a standardnet/httphandler usingopenapi3filter.ValidateRequest:A single
GET /test?data=xcrashes the whole server process:The line printed after the request ("the process survived") was never reached, and the process exited with a non-zero code — the standard
net/httpper-connectionrecover()did not save it. This is the key distinction from a recoverable panic: a fatal stack overflow takes the entire process down regardless of host.Fix verification
Adding stack-based cycle detection to both sites (matching
validate()'s pattern) eliminated the crash:visitJSONguard:VisitJSON()returned normally instead of crashing.decodeValueguard: the sameGET /test?data=xreturned a clean400:Impact
An unrecoverable, whole-process denial of service. Because the crash is a fatal Go runtime error (not a panic), it cannot be contained by
net/http's per-request recovery, so A:H applies to all host types, unlike a recoverable-panic bug.Attack surface, in order of exposure:
allOf/anyOf/oneOf. Here any client request to the affected endpoint crashes the process. The spec author does not need malicious intent; a degenerate recursive combinator is enough. This is a latent reliability bug that becomes remotely triggerable once present.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
kin-openapi: Incomplete Fix for GHSA-p6wj-qrr4-pgh5: Three Unpatched nil-Items Panic Paths in openapi3filter
CVE-2026-100353 / GHSA-vrcc-3ch7-hppw
More information
Details
Summary
The fix for GHSA-p6wj-qrr4-pgh5 addressed a nil-pointer dereference that occurs when an OpenAPI 3.1 array schema omits the
itemskeyword (which is legal under JSON Schema 2020-12). That fix patched three decoder paths: the standaloneparseArrayfunction, the top-level array check inUrlencodedBodyDecoder, andMultipartBodyDecoder.Three additional crash paths were missed. All of them reach the unguarded
urlValuesDecoder.parseArraymethod (openapi3filter/req_resp_decoder.go:576) or the unguarded array branch inbuildResObj(line 1015):type: arrayand noitems.items.allOf/anyOf/oneOfsub-schema. This path bypasses the guard added by the GHSA-p6wj-qrr4-pgh5 fix, because that guard only inspects top-level properties.Each path is triggerable by an unauthenticated client and produces a deterministic nil-pointer panic during request validation.
Details
Root Cause
The three paths patched for GHSA-p6wj-qrr4-pgh5 each received a nil-
itemsguard:But
urlValuesDecoder.parseArray(line 576), which handles query-parameter and urlencoded-body array decoding, has no such guard:parseValueimmediately dereferences the schema it is handed:For the deepObject path,
buildResObj(line 1015) has the same gap. Its array branch recurses withschema.Value.Items(line 1028), which can be nil, and the recursive call dereferences it at line 1015:For the allOf body path,
UrlencodedBodyDecodervalidates only top-levelschema.Value.Properties(line 1429-1449). ButdecodeSchemaConstructs(line 1474) recursively walksAllOf/AnyOf/OneOfsub-schemas and callsdecodePropertyon their properties, which never pass through the top-level guard and reachurlValuesDecoder.parseArray.Proof of Concept
Environment
v0.144.0, commitf0407d5)doc.Validate()first to prove the spec is legal, then drivesopenapi3filter.ValidateRequestdirectlyPath 1: Query parameter array without items
Spec (query param
idsistype: array, noitems), requestGET /test?ids=1&ids=2:Path 2: deepObject nested array without items
Spec (deepObject param
filterwith array propertytags, noitems), requestGET /test?filter[tags][0]=a:Path 3: URL-encoded body with array inside allOf (bypasses the existing fix)
Spec (urlencoded body,
allOfsub-schema with array propertytags, noitems), requestPOST /submitbodytags=a&tags=b:The
decodePropertyframe confirms the array was reached by walking theallOfsub-schema, bypassing the top-level guard that the GHSA-p6wj-qrr4-pgh5 fix added.Fix verification
Adding a single nil-
itemsguard tourlValuesDecoder.parseArray(plus one to thebuildResObjarray branch) turns all three panics into clean validation errors:This confirms
urlValuesDecoder.parseArrayis the shared root cause for Paths 1 and 3, andbuildResObjfor Path 2.Impact
An unauthenticated client can trigger a deterministic nil-pointer panic in request validation with a single crafted request, against any application that validates OAS 3.1 requests with
openapi3filterwhere a spec declares an array withoutitems.The severity depends on the host:
net/httpserver (validation runs in the handler goroutine)net/httprecovers the panic per-connection; the connection is dropped and the process survivesnet/httphosts (e.g. fasthttp/connect adapters) or validation performed in an application-spawned goroutineThis was verified in both configurations: under a live
net/httpserver the process survived (the panic was logged ashttp: panic serving ...and the process exited 0 at end of test), while the direct-call PoCs above crashed the process withexit status 2.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
HTTP/2 server memory exhaustion due to Trailer headers in net/http
CVE-2026-78659 / GO-2026-6603
More information
Details
When "Trailer" headers are sent by a client, the HTTP server internally uses the header values to populate the Request.Trailer map passed to the server handler. Because Request.Trailer is a map, each entry incurs memory overhead. For HTTP/2 servers, a malicious client can exploit this by sending a "Trailer" header that declares a large number of fields, causing the server to allocate a disproportionate amount of memory while bypassing Server.MaxHeaderValueCount and Server.MaxHeaderBytes limits. This exploit is not applicable for HTTP/1 servers, which do not support multiplexing a large number of requests over one TCP connection, and whose Server.MaxHeaderBytes are calculated differently.
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
HTTP/2 transport accepts malformed framing-related headers in net/http
CVE-2026-78660 / GO-2026-6610
More information
Details
Historically, we have been rather lax about malformed framing-related headers in our HTTP/2 implementation, as they cannot interfere with HTTP/2 framing. However, this makes it possible for our HTTP/2 implementation to forward responses containing such headers to an HTTP/1 client when acting as a reverse proxy. If the HTTP/1 client also does not behave strictly enough, this can result in response smuggling.
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
Excessive CPU consumption from repeated initial window changes in net/http
CVE-2026-78669 / GO-2026-6611
More information
Details
A malicious HTTP/2 peer can cause excessive CPU consumption in the client or server by opening a large number of streams and then sending many small SETTINGS frames containing SETTINGS_INITIAL_WINDOW_SIZE values.
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
Double flow control refund on HTTP/2 server streams in net/http
CVE-2026-78663 / GO-2026-6612
More information
Details
The HTTP/2 server can refund connection-level flow control twice for the same data: Once when a client resets a stream (refunding data for any sent-but-unread portion of the stream), and again when a request handler reads the buffered data. A malicious client can exploit this to bypass the configured connection-level flow control limit (MaxReceiveBufferPerConnection). Total buffered data is still limited by the concurrent stream limit and stream-level flow control.
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
HTTP/2 server crash due to HPACK encoder race in net/http
CVE-2026-97032 / GO-2026-6617
More information
Details
HTTP/2 servers could end up crashing due to inadvertently modifying its HPACK encoder concurrently. This happens because the server modifies the HPACK encoder from two goroutines without synchronization: one uses the encoder to encode a HEADERS frame as part of a response sent to a client and the other modifies the encoder's table size when handling a SETTINGS frame containing SETTINGS_HEADER_TABLE_SIZE that a client sends. A malicious client can repeatedly send a request while changing the header table size to crash the server.
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
Release Notes
getkin/kin-openapi (github.com/getkin/kin-openapi)
v0.149.0Compare Source
What's Changed
Full Changelog: <https://github.com/getkin/ki
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.