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·44 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 4 hours ago•GHSA-JQ7H-WRVP-3RGX
7.5

GHSA-JQ7H-WRVP-3RGX: Insufficient Session Invalidation in pyLoad Core REST API

An insufficient session invalidation vulnerability exists in pyLoad (pyload-ng) versions 0.5.0b3.dev98 through 0.5.0b3.dev101. When administrative actions like privilege revocation or password changes are executed via the public REST API, active user sessions on disk are not updated or invalidated. Consequently, affected sessions remain fully authenticated with stale permissions for up to 31 days.

Amit Schendel
Amit Schendel
8 views•4 min read
•about 5 hours ago•GHSA-9Q47-3CM2-2RP8
6.5

GHSA-9Q47-3CM2-2RP8: Rate-Limit Bypass and Audit Log Spoofing in pyLoad WebUI

A critical security vulnerability has been identified and patched in the WebUI component of pyLoad, a popular Python-based open-source download manager. This vulnerability allows attackers to completely bypass API rate limits and spoof client IP addresses in audit logs due to unsafe parsing of the X-Forwarded-For HTTP header.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 6 hours ago•GHSA-68W4-83FH-F2W8
8.8

GHSA-68W4-83FH-F2W8: Privilege Escalation and Administrative Password Oracle in pyLoad-ng

An authorization bypass and credential oracle vulnerability in pyload-ng allows authenticated users with minimal or no privileges to brute-force the administrator password. This is achieved through sensitive API methods exposed globally combined with a non-constant-time password hash comparison algorithm.

Alon Barad
Alon Barad
8 views•7 min read
•about 7 hours ago•GHSA-R44W-V6GF-X3P6
8.1

Authentication Bypass in pyLoad API Key Caching Mechanism (GHSA-R44W-V6GF-X3P6)

An authentication bypass vulnerability in pyLoad allows unauthenticated remote attackers to gain administrative API access. The vulnerability is caused by a logical flaw in the API key cache validation lookup, where authentication states are cached using only the public key identifier, skipping cryptographic token verification on cache hits.

Alon Barad
Alon Barad
10 views•7 min read
•about 8 hours ago•CVE-2026-107728
7.5

CVE-2026-107728: Authorization Bypass in Strawberry GraphQL Permission Validation

An authorization bypass vulnerability in Strawberry GraphQL between versions 0.217.0 and 0.326.1 occurs when a synchronous permission handler returns an awaitable object (such as an unawaited coroutine). Due to Python's truthiness rules, the unawaited coroutine is evaluated as True, leading to an immediate bypass of security policies.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 9 hours ago•CVE-2026-107727
3.7

CVE-2026-107727: Connection-Level Denial of Service via State Leak in Strawberry GraphQL Legacy WS Handler

An uncontrolled resource consumption vulnerability in Strawberry GraphQL allows unauthenticated remote attackers to trigger a Denial of Service on persistent WebSocket connections using the legacy graphql-ws protocol. When the server enforces max_subscriptions_per_connection, naturally terminating subscriptions are not cleared from memory registries, leading to exhaustion of connection slots.

Alon Barad
Alon Barad
12 views•6 min read