Register for the AI for Security Summit: Join Figma, Perplexity & Wiz

CVE-2026-6993
Grafana vulnerability analysis and mitigation

Overview

CVE-2026-6993 is a Confused Deputy (CWE-441) vulnerability in the go-kratos/kratos Go microservices framework, affecting all versions up to and including v2.9.2. The flaw exists in the NewServer() function within transport/http/server.go, where http.DefaultServeMux is set as the fallback handler for unmatched routes and disallowed HTTP methods. This allows unauthenticated remote attackers to access unintended handlers — most notably Go's net/http/pprof debug endpoints — that are silently registered on the global DefaultServeMux by side-effect imports. The vulnerability was disclosed on April 25, 2026, with a CVSS v3.1 score of 5.3 (Medium) and a CVSS v4.0 score of 5.5 (Medium) (Github Advisory, Feedly).

Technical details

The root cause is that NewServer() in transport/http/server.go (lines 192–193) assigns http.DefaultServeMux as both srv.router.NotFoundHandler and srv.router.MethodNotAllowedHandler. Because http.DefaultServeMux is a global, shared Go instance, any package that registers handlers during init() — most notably net/http/pprof — inadvertently exposes those handlers through the Kratos HTTP server. When an HTTP request arrives for a path not registered in the Kratos router (e.g., /debug/pprof/), it falls through to DefaultServeMux, which serves the registered debug handlers without any authentication or authorization check. This is classified as CWE-441 (Unintended Proxy or Intermediary / 'Confused Deputy'), and a proof-of-concept demonstrating exploitation against Kratos v2.9.2 was publicly released alongside the disclosure (GitHub Issue #3810, Github Advisory).

Impact

Successful exploitation allows an unauthenticated remote attacker to access Go pprof debug endpoints exposed through the Kratos HTTP server, including /debug/pprof/cmdline (which may reveal secrets passed as command-line flags), /debug/pprof/heap (which may contain in-memory credentials, session tokens, or PII), /debug/pprof/goroutine (which exposes source code paths, dependency versions, and runtime state), and /debug/pprof/profile and /debug/pprof/trace (which reveal internal business logic and execution flow). Additionally, repeated requests to /debug/pprof/profile — which triggers a 30-second CPU profile by default — can be abused to cause denial of service. The impact is primarily a confidentiality breach with secondary availability risk; no integrity impact has been identified (GitHub Issue #3810).

Exploitability

A public proof-of-concept exploit consisting of simple curl commands was released alongside the vulnerability disclosure, making exploitation trivial for any attacker with network access to the target service. No authentication, privileges, or user interaction are required. The vulnerability is exploitable remotely over the network with low attack complexity, and is triggered only when the application's dependency tree includes a side-effect import of net/http/pprof (a common pattern in Go production services). The EPSS score is approximately 0.035–0.051%, indicating low but non-negligible exploitation probability. There is no evidence of active in-the-wild exploitation or CISA KEV catalog listing at this time (Github Advisory, Feedly).

Exploitation steps

  1. Reconnaissance: Identify internet-facing services built on go-kratos/kratos v2.9.2 or earlier using tools like Shodan, Censys, or by inspecting HTTP response headers for framework indicators.
  2. Verify pprof exposure: Send a simple HTTP GET request to the target's pprof index endpoint to confirm the fallback handler is active:
    curl http://target:8000/debug/pprof/
    A 200 OK response with an HTML profile listing confirms the vulnerability.
  3. Extract command-line arguments: Retrieve process startup arguments, which may contain database passwords, API keys, or configuration secrets:
    curl http://target:8000/debug/pprof/cmdline
  4. Dump goroutine stacks: Obtain full goroutine stack traces including absolute source file paths, dependency versions, and internal package structure:
    curl "http://target:8000/debug/pprof/goroutine?debug=2"
  5. Extract heap memory: Download a binary heap dump and search for sensitive strings such as credentials or tokens:
    curl -s http://target:8000/debug/pprof/heap > heap.out
    strings heap.out | grep -iE "password|secret|token|key"
  6. Capture execution trace: Record a short execution trace to analyze request processing and internal logic:
    curl -o trace.out "http://target:8000/debug/pprof/trace?seconds=5"
    go tool trace trace.out
  7. (Optional) Denial of Service: Trigger multiple concurrent 30-second CPU profiles to exhaust server resources:
    for i in {1..10}; do curl http://target:8000/debug/pprof/profile & done
    (GitHub Issue #3810)

Indicators of compromise

  • Network: Unexpected HTTP GET requests to /debug/pprof/, /debug/pprof/cmdline, /debug/pprof/heap, /debug/pprof/goroutine, /debug/pprof/profile, /debug/pprof/symbol, or /debug/pprof/trace on Kratos HTTP server ports (commonly 8000); these paths returning 200 OK on a Kratos service are anomalous.
  • Network: Outbound binary data transfers (heap or trace files) from the application server to unknown external IP addresses following pprof endpoint access.
  • Logs: HTTP access logs showing 200 responses to /debug/pprof/* paths from external or unexpected source IPs; repeated requests to /debug/pprof/profile (indicating potential DoS abuse).
  • Process: Elevated CPU utilization on the Go application process coinciding with requests to /debug/pprof/profile, potentially indicating concurrent profiling abuse.
  • File System: Presence of downloaded .out files (e.g., heap.out, trace.out) on attacker-controlled systems, though these would not appear on the victim server itself.

Mitigation and workarounds

The fix is identified as commit 0284a5bcf92b5a7ee015300ce3051baf7ae4718d, which replaces http.DefaultServeMux with http.NotFoundHandler() (returning 404) for NotFoundHandler and a simple 405 handler for MethodNotAllowedHandler. Organizations should upgrade to a version of go-kratos/kratos beyond v2.9.2 that includes this patch. As an immediate workaround for users who cannot upgrade, explicitly override the fallback handlers when creating the server using the NotFoundHandler() and MethodNotAllowedHandler() server options introduced in PR #3131. Additionally, ensure that net/http/pprof is not imported (even transitively) in production builds, or restrict access to debug endpoints via network-level controls such as firewalls or API gateways (GitHub PR #3814, Github Advisory).

Community reactions

The vulnerability was reported by community researcher 'August829' via GitHub Issue #3810 on April 4, 2026, with a detailed technical write-up including a proof-of-concept and suggested fix. A community contributor (Yanhu007) submitted PR #3814 on April 13, 2026, implementing the recommended safe defaults. The issue was labeled as a bug by the go-kratos maintainers. No major media coverage or broad social media discussion has been identified beyond standard CVE aggregator publications (GitHub Issue #3810, GitHub PR #3814).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

RHEL / CentOS

Affected

OpenShift

butane.src

Affected

RHEL 8

container-tools:rhel8/buildah.src

Affected

RHEL 9

buildah.src

Affected

RHEL 10

buildah.src

Affected

SourceThis report was generated using AI

Related Grafana vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-15815HIGH8.8
  • Grafana logoGrafana
  • cpe:2.3:a:grafana:grafana
NoYesSep 17, 2026
CVE-2026-92596HIGH8.7
  • Grafana logoGrafana
  • node-nodemailer
NoYesSep 16, 2026
CVE-2026-76154HIGH7.3
  • Grafana logoGrafana
  • cpe:2.3:a:grafana:grafana
NoNoSep 17, 2026
CVE-2026-81872MEDIUM6.3
  • Grafana logoGrafana
  • grafana
NoNoSep 16, 2026
CVE-2026-81871MEDIUM6.3
  • Grafana logoGrafana
  • harbor-registry
NoYesSep 16, 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