CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-JPCW-4WR7-C3VQ

GHSA-JPCW-4WR7-C3VQ: Remote Denial of Service via NULL Pointer Dereference in kin-openapi Parameter Validation

Alon Barad
Alon Barad
Software Engineer

Jul 25, 2026·5 min read·7 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can crash Go web servers using the kin-openapi validation middleware by sending a request containing a parameter whose media type has no defined schema, triggering a fatal NULL pointer dereference.

A NULL pointer dereference vulnerability was discovered in the getkin/kin-openapi Go library. When parsing incoming request parameters that are validated against a content map with an empty media type, the openapi3filter request validation engine attempts to resolve an uninitialized schema pointer. This results in an unhandled Go runtime panic and process termination, yielding an unauthenticated, remote Denial of Service vector.

Vulnerability Overview

The getkin/kin-openapi Go package is widely used to load, parse, and validate OpenAPI specifications. Within this package, the openapi3filter module serves as the core request validation engine, verifying that incoming parameters and payloads conform to the defined API schema.

This vulnerability, tracked as GHSA-JPCW-4WR7-C3VQ, is a NULL pointer dereference (CWE-476) occurring within the openapi3filter request parser. The flaw allows an unauthenticated remote attacker to trigger a runtime panic, which crashes the parent process and achieves a Denial of Service.

Because Go processes do not automatically recover from unhandled goroutine panics, this vulnerability poses a severe threat to service availability if global recovery middleware is absent.

Root Cause Analysis

The OpenAPI Specification allows API designers to define input parameters using either a direct schema or a content map. Within a content map, developers associate media types with schema structures that govern serialization.

Crucially, the specification dictates that the inner schema property within a media type object is optional. Consequently, specifications with empty media type definitions are fully valid and cleanly pass the initial document parser phase.

At runtime, openapi3filter fails to check if the schema pointer inside the media type is initialized. When parsing an incoming request parameter mapped to an empty media type, the decoder attempts to dereference this uninitialized pointer, leading to a fatal application panic.

Code-Level Deep Dive

The vulnerability resides inside req_resp_decoder.go within the defaultContentParameterDecoder function. The original logic retrieved the media type and resolved the schema pointer without validating its existence.

// Vulnerable Code Path
func defaultContentParameterDecoder(param *openapi3.Parameter, values []string) (outSchema *openapi3.Schema, unmarshal func(string, *openapi3.SchemaRef) (any, error), err error) {
    content := param.Content
    mt := content.Get("application/json")
    if mt == nil {
        err = fmt.Errorf("parameter %q has no content schema", param.Name)
        return
    }
    // BUG: mt.Schema is a pointer and can be nil
    outSchema = mt.Schema.Value
}

To remediate the bug, the maintainers introduced an explicit validation check to ensure the schema reference is initialized before accessing its properties. If mt.Schema is nil, the function returns a structured error rather than dereferencing a nil pointer.

// Patched Code Path (Commit 68ac2affa325514d7d6e731204d6a1edf6bdff64)
func defaultContentParameterDecoder(param *openapi3.Parameter, values []string) (outSchema *openapi3.Schema, unmarshal func(string, *openapi3.SchemaRef) (any, error), err error) {
    content := param.Content
    mt := content.Get("application/json")
    if mt == nil {
        err = fmt.Errorf("parameter %q has no content schema", param.Name)
        return
    }
    // FIX: Verify Schema pointer is initialized
    if mt.Schema == nil {
        err = fmt.Errorf("parameter %q content media type has no schema", param.Name)
        return
    }
    outSchema = mt.Schema.Value
}

Attack Methodology and Proof-of-Concept

To exploit this vulnerability, an attacker must identify an API endpoint validated by openapi3filter that utilizes content parameter validation without a defined schema structure. Because the crash occurs during request validation, the attack is executed prior to any business logic processing.

An attacker sends a standard HTTP request targeting the parameter. The request does not require specific credentials or complex delivery payloads, lowering the barrier to entry.

When the application processes the request, the Go runtime triggers a nil pointer dereference panic, stopping the active goroutine. If the HTTP server does not utilize robust panic recovery, the entire service halts immediately.

Impact Assessment

This vulnerability is classified as a high-severity Denial of Service vector, carrying an assessed CVSS score of 7.5. Because the flaw can be triggered remotely without authentication, it is highly attractive for service disruption campaigns.

No data leakage, privilege escalation, or unauthorized data modification risks are present. The impact is strictly restricted to service availability.

If the target application runs inside containers without automated restart capabilities, a single exploit request can result in prolonged service outages.

Mitigation and Defense-in-Depth

The primary remediation is upgrading the getkin/kin-openapi dependency to version v0.144.0 or later. This ensures that parameter schemas are validated prior to parsing.

If immediate upgrading is unfeasible, developers should audit their OpenAPI specifications to ensure every parameter media type includes a defined schema structure. Alternatively, global panic recovery middleware should be implemented to capture goroutine crashes gracefully.

func RecoveryMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if err := recover(); err != nil {
                http.Error(w, "Internal Server Error", http.StatusInternalServerError)
            }
        }()
        next.ServeHTTP(w, r)
    })
}

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

getkin/kin-openapi Go library and dependent API gateways/microservices

Affected Versions Detail

Product
Affected Versions
Fixed Version
kin-openapi
getkin
< v0.144.0v0.144.0
AttributeDetail
Vulnerability IDGHSA-JPCW-4WR7-C3VQ
CWE IDCWE-476 (Null Pointer Dereference)
Attack VectorNetwork
CVSS v3.1 Score7.5 (High)
Exploit StatusProof of Concept (PoC) public
CISA KEV StatusNot Listed
ImpactDenial of Service (DoS)

MITRE ATT&CK Mapping

T1499.004Endpoint Denial of Service: Application Exhaustion or Flood
Impact
CWE-476
Null Pointer Dereference

A NULL pointer dereference occurs when the application dereferences a pointer that it expects to be valid, but is NULL, typically causing a crash.

Vulnerability Timeline

Vulnerability patched in commit 68ac2affa325514d7d6e731204d6a1edf6bdff64
2026-07-23
Official fix released in package tag v0.144.0
2026-07-23
Public disclosure of GHSA-JPCW-4WR7-C3VQ
2026-07-23

References & Sources

  • [1]GitHub Security Advisory GHSA-JPCW-4WR7-C3VQ
  • [2]Fix Commit in kin-openapi
  • [3]v0.144.0 Release Notes

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•GHSA-3R53-75J5-3G7J
5.6

GHSA-3r53-75j5-3g7j: Prototype Pollution in Quasar Framework extend Utility

A prototype pollution vulnerability (CWE-1321) in the Quasar framework's utility function 'extend' allows unauthenticated remote attackers to modify the global Object.prototype. This vulnerability can lead to application-level logic bypasses, denial of service, or potentially arbitrary code execution depending on downstream implementation.

Alon Barad
Alon Barad
4 views•6 min read
•about 2 hours ago•GHSA-HMJ8-5XMH-5573
7.5

GHSA-HMJ8-5XMH-5573: Connection Denial of Service via Oversized DATA Frame in py-libp2p

A critical connection-level Denial of Service (DoS) vulnerability exists in the Yamux stream multiplexer implementation of py-libp2p (versions <= 0.6.0). The flaw allows unauthenticated or authenticated peers to permanently stall a Yamux multiplexed connection by transmitting a single malformed 12-byte header claiming an oversized payload while withholding the payload bytes.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 3 hours ago•CVE-2026-16756
7.5

CVE-2026-16756: Slowloris Denial of Service via Resource Exhaustion in aws-smithy-http-server

An unauthenticated remote resource exhaustion vulnerability in Amazon aws-smithy-http-server enables denial-of-service (DoS) attacks. Affected versions do not enforce connection limits or header timeouts, allowing standard Slowloris techniques to block server operations.

Alon Barad
Alon Barad
7 views•7 min read
•about 4 hours ago•GHSA-XG4H-6GFC-H4M8
6.5

GHSA-XG4H-6GFC-H4M8: Watch API Authorization Bypass via Open-Ended Range Requests in etcd

An authorization bypass vulnerability in the gRPC Watch API of etcd allows low-privileged users to read keys outside of their authorized range. By utilizing an open-ended range request sentinel, the input is prematurely normalized before RBAC validation, misclassifying a range watch as a single-key point query.

Amit Schendel
Amit Schendel
4 views•8 min read
•about 5 hours ago•CVE-2026-16796
7.3

CVE-2026-16796: Command Argument Injection in AWS Bedrock AgentCore SDK

An argument injection vulnerability in the AWS Bedrock AgentCore Python SDK allows authenticated users to execute arbitrary commands inside the Code Interpreter sandbox container via crafted Python package specifiers containing shell metacharacters.

Alon Barad
Alon Barad
8 views•5 min read
•about 7 hours ago•GHSA-8Q49-2H5H-434X
8.6

GHSA-8Q49-2H5H-434X: Server-Side Request Forgery in FrontMCP OpenAPI Spec Poller

A Server-Side Request Forgery (SSRF) vulnerability in FrontMCP allows unauthenticated remote attackers to query internal network services by exploiting the un-guarded background OpenAPI specification polling mechanism.

Amit Schendel
Amit Schendel
7 views•6 min read