PHP2Shell: Read our blog on the critical RCE vulnerabilities affecting 70% of the Internet

CVE-2026-97394: 
Chainguard vulnerability analysis and mitigation

Overview

CVE-2026-97394 is a nil-pointer dereference vulnerability in kin-openapi (Go package github.com/getkin/kin-openapi), a Go library for handling OpenAPI files. The flaw exists in the openapi3filter package, which accepts OpenAPI 3.1 array schemas lacking an items keyword and subsequently dereferences the nil Schema.Items value during request/response validation, causing a deterministic panic. Affected versions are >= 0.136.0 and < 0.143.0; the issue is fixed in v0.143.0. It carries a CVSS v3.1 base score of 7.5 (High) (Github Advisory).

Technical details

The root cause is a spec-validation asymmetry between OpenAPI 3.0 and 3.1 (CWE-476: NULL Pointer Dereference; CWE-248: Uncaught Exception). Under OpenAPI 3.0, doc.Validate() rejects array schemas missing items, but under OpenAPI 3.1 (JSON Schema 2020-12), omitting items is legal, so Schema.Items remains nil after a clean validation pass. The vulnerable decoders — UrlencodedBodyDecoder (at req_resp_decoder.go:1421), MultipartBodyDecoder (~line 1564–1579), and parseArray (~line 1129/1151) — all dereference propSchema.Value.Items.Value without a nil guard, triggering a panic on any non-empty application/x-www-form-urlencoded or multipart/form-data request body, or on array-typed response headers. Because openapi3filter contains no recover(), the panic propagates into the calling application and can crash the process if no per-request recovery is in place. JSON request bodies are not affected as they use a different decoder path (Github Advisory, Fix Commit).

Impact

Successful exploitation results in a deterministic, 100% reproducible denial of service: every request to an affected operation triggers a nil-pointer panic, crashing the request handler or the entire Go process if no per-request recover() is present. There is no confidentiality or integrity impact — the vulnerability is purely an availability issue. Applications using openapi3filter to validate requests/responses against OpenAPI 3.1 documents with items-less array schemas are at risk, including those where specs are generated by code-generation tools or loaded from untrusted sources (Github Advisory).

Exploitability

No public proof-of-concept exploit code has been released beyond the detailed PoC included in the security advisory itself, and there is no evidence of in-the-wild exploitation at this time. The vulnerability requires no authentication, no privileges, and no user interaction — a single HTTP POST with any non-empty body to an affected endpoint is sufficient to trigger the panic deterministically. The EPSS score is 0.0, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities catalog. No threat actor attribution has been reported (Github Advisory).

Exploitation steps

  1. Identify a target: Find a Go application that uses github.com/getkin/kin-openapi versions >= 0.136.0 and < 0.143.0 with openapi3filter.ValidateRequest or ValidateResponse middleware enabled against an OpenAPI 3.1 document.
  2. Locate a vulnerable operation: Identify an API endpoint whose OpenAPI 3.1 spec defines a requestBody with application/x-www-form-urlencoded or multipart/form-data content type, where a body property is declared as type: array without an items keyword. Alternatively, target an endpoint with an array-typed response header.
  3. Craft the attack request: Send a minimal HTTP POST with a non-empty body to the vulnerable endpoint:
POST /vulnerable-endpoint HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded

tags=a
  1. Trigger the panic: The UrlencodedBodyDecoder (or MultipartBodyDecoder) dereferences propSchema.Value.Items.Value with Items == nil during schema inspection before form parsing, causing a runtime error: invalid memory address or nil pointer dereference.
  2. Achieve denial of service: The panic propagates out of openapi3filter into the application. Without a per-request recover(), the Go HTTP server logs http: panic serving and aborts the connection; in non-net/http contexts, the process may crash entirely. Repeating the request causes a panic on every attempt (Github Advisory).

Indicators of compromise

  • Logs: Go HTTP server logs containing http: panic serving <IP>:<port>: runtime error: invalid memory address or nil pointer dereference with a stack trace referencing openapi3filter.UrlencodedBodyDecoder or openapi3filter.MultipartBodyDecoder in req_resp_decoder.go.
  • Logs: Stack traces showing the call chain ValidateRequest → ValidateRequestBody → decodeBody → UrlencodedBodyDecoder or ValidateResponse → ... → parseArray → parsePrimitive.
  • Network: Repeated HTTP POST requests to the same endpoint with Content-Type: application/x-www-form-urlencoded or multipart/form-data and minimal non-empty bodies (e.g., tags=a), especially from the same source IP.
  • Process: Unexpected Go process crashes or restarts correlated with inbound HTTP requests to specific API endpoints (Github Advisory).

Mitigation and workarounds

The primary remediation is to upgrade github.com/getkin/kin-openapi to version v0.143.0 or later, which adds nil guards in UrlencodedBodyDecoder, MultipartBodyDecoder, and parseArray before dereferencing Schema.Items (Fix Commit, v0.143.0 Release). As a temporary workaround, ensure all OpenAPI 3.1 array schemas in your specifications include the items keyword, which prevents Schema.Items from being nil. Additionally, adding a per-request recover() in HTTP handlers can prevent process crashes while a patch is applied (Github Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

golang-github-getkin-kin-openapi

Fixed

sid

golang-github-getkin-kin-openapi

Fixed

trixie

golang-github-getkin-kin-openapi

Fixed

Ubuntu

Unknown

devel

golang-github-getkin-kin-openapi

Unknown

jammy

golang-github-getkin-kin-openapi

Unknown

jammy (esm-apps)

golang-github-getkin-kin-openapi

Unknown

noble

golang-github-getkin-kin-openapi

Unknown

noble (esm-apps)

golang-github-getkin-kin-openapi

Unknown

resolute

golang-github-getkin-kin-openapi

Unknown

resolute (esm-apps)

golang-github-getkin-kin-openapi

Unknown

RHEL / CentOS

Unknown

Source: This report was generated using AI

Related Chainguard vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-115365HIGH7.5
  • Wolfi logoWolfi
  • openbao
NoYesOct 22, 2026
CVE-2026-115369LOW2.1
  • Wolfi logoWolfi
  • openbao
NoYesOct 22, 2026
CVE-2026-115364LOW2.1
  • Wolfi logoWolfi
  • openbao
NoYesOct 22, 2026
CVE-2026-115363LOW2.1
  • Wolfi logoWolfi
  • openbao
NoNoOct 22, 2026
CVE-2026-115366LOW2
  • Wolfi logoWolfi
  • openbao
NoYesOct 22, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management