← Back to Feed CACHED · 2026-09-21 08:51:31 · CACHE_KEY tenable:329319
tenable:329319 · CWE-770 · Disclosed 2026-06-09

Grafana Labs < 11.6.15 / 12.2.0 < 12.2.9 / 12.3.0 < 12.3.7 / 1...

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Someone found four ways to throw a brick through your monitoring TV, but the TV turns itself back on

Tenable plugin 329319 bundles four Grafana CVEs disclosed on June 9, 2026. CVE-2026-42127 and CVE-2026-33382 (both CVSS 7.5 High) let unauthenticated attackers crash Grafana by sending oversized JSON payloads to the public dashboard query endpoint and several other API endpoints that lack request-body size limits — Grafana reads the entire body into memory, the Go runtime balloons, and the OS OOM-killer finishes the job. CVE-2026-8609 (CVSS 5.3 Medium) achieves the same crash by hammering the OAuth login route with unique parameter values, causing unbounded goroutine memory growth. CVE-2026-10601 (CVSS 5.4 Medium) is the odd one out: a path traversal in the Tempo and Loki data source plugins that lets an authenticated Viewer reach unintended backend endpoints, potentially leaking data source credentials or triggering backend administrative actions. All four are fixed in Grafana 11.6.15, 12.2.9, 12.3.7, 12.4.4, and 13.0.2+. Grafana 12.0.x is end-of-life and received no patch.

Grafana Labs rates the two memory-exhaustion DoS CVEs at HIGH (7.5), while Tenable's composite plugin severity lands at MEDIUM with a VPR of just 3.0 (23rd percentile). The MEDIUM composite is closer to reality. The individual 7.5 scores are mechanically correct per CVSS — network-accessible, no-auth, low-complexity, high availability impact — but they ignore that the target is a monitoring dashboard, not a domain controller or data store. Crashing Grafana costs you visibility, not confidentiality or integrity. Modern deployments auto-restart via systemd or Kubernetes liveness probes in seconds, and a single client_max_body_size directive on your reverse proxy eliminates the entire DoS attack surface. The path traversal (CVE-2026-10601) is the more interesting bug from a security perspective, but its 5.4 CVSS, authentication prerequisite, and dependence on Tempo/Loki backend configuration keep it from elevating the bundle.

"Four DoS bugs that crash Grafana dashboards, not your infrastructure — reverse proxy limits fix all of them."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Discover internet-facing Grafana instance

The attacker uses Shodan (title:"Grafana"), Censys, or FOFA to enumerate Grafana instances. Over 128,000 Grafana instances are internet-facing per current Shodan data. The default port 3000 and the distinctive /login page make fingerprinting trivial. Even instances behind reverse proxies typically expose the Grafana login UI or public dashboard paths.
Conditions required:
  • Target Grafana instance is network-reachable (internet or internal)
Where this breaks in practice:
  • Many enterprise Grafana instances sit behind VPNs, SSO gateways, or are internal-only
  • Grafana Cloud (managed SaaS) is not affected by self-hosted memory-exhaustion patterns
Detection/coverage: Shodan dork title:"Grafana" or http.favicon.hash:-1399433489. Tenable plugin 329319 detects vulnerable versions via remote version check.
STEP 02

Craft oversized JSON payload targeting unauthenticated endpoints

For CVE-2026-42127 the attacker crafts an arbitrarily large JSON body targeting /api/public/dashboards/:uid/panels/:panelId/query. No authentication token is needed — the endpoint is pre-auth by design for public dashboards. For CVE-2026-33382 the same technique applies to several other API endpoints that also lack body-size validation. A simple curl -X POST -d @bigfile.json is sufficient; no exploit framework or specialized tooling is required.
Conditions required:
  • Public dashboards feature is enabled (CVE-2026-42127)
  • No reverse proxy enforcing body-size limits upstream of Grafana
Where this breaks in practice:
  • Production Grafana behind nginx/HAProxy/Cloudflare/AWS ALB typically enforces client_max_body_size or equivalent by default
  • Enterprise WAF rules for oversized payloads are a standard baseline control
Detection/coverage: WAF/reverse proxy access logs showing abnormally large POST bodies (>1 MB) to Grafana API paths. Grafana access log captures the request before crash.
STEP 03

Memory exhaustion triggers OOM kill and service crash

Grafana's HTTP handler reads the entire request body into memory without bounds checking. A single multi-megabyte payload — or a sustained stream of moderately large payloads — causes the Go runtime to allocate memory until the OS OOM killer terminates the grafana-server process. Alternatively, for CVE-2026-8609, the attacker floods /login/generic_oauth with unique state parameter values, each creating a new in-memory session entry that is never garbage-collected, producing a slower but equally fatal memory leak.
Conditions required:
  • Payload reaches Grafana without truncation by upstream infrastructure
Where this breaks in practice:
  • Kubernetes deployments with memory limits and liveness probes auto-restart the pod in 5-15 seconds
  • systemd units with Restart=always recover in 1-5 seconds
  • HA Grafana behind a load balancer fails over to surviving nodes transparently
Detection/coverage: OS OOM killer events in dmesg/journalctl. Grafana process exit in systemd journal. Kubernetes pod restart count increment. Prometheus up{job="grafana"} drops to 0.
STEP 04

(Alternative chain) Authenticated path traversal via Tempo/Loki plugins

CVE-2026-10601 is a separate chain: an attacker with Viewer credentials sends crafted proxy requests through the Tempo or Loki data source plugin using path-traversal sequences to escape the intended backend API prefix. Depending on backend configuration this can expose data source credentials stored in Grafana provisioning, leak internal Tempo/Loki admin responses, or trigger backend administrative actions. The blast radius depends entirely on what the upstream backend exposes.
Conditions required:
  • Attacker holds valid Viewer-level Grafana credentials
  • Tempo or Loki data source plugins are configured on the instance
  • Backend services expose sensitive endpoints reachable via the traversed path
Where this breaks in practice:
  • Requires authenticated access — limits attack surface to insiders or credential-compromised accounts
  • SSO/MFA raises the bar for credential acquisition
  • Tempo/Loki backends behind network segmentation may not expose sensitive endpoints through the Grafana proxy path
Detection/coverage: Grafana Enterprise audit logs showing unusual data source proxy request patterns. Backend Tempo/Loki access logs showing unexpected admin-endpoint hits from Grafana's service account IP.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not listed in CISA KEV. No public reports of active exploitation campaigns targeting CVE-2026-42127, CVE-2026-33382, CVE-2026-8609, or CVE-2026-10601 as of September 2026.
Proof-of-concept availabilityNo dedicated PoC repositories found on GitHub or exploit databases for any of the four CVEs. The DoS variants are trivially reproducible with curl — sending a large POST body to an unauthenticated endpoint requires zero specialized tooling.
EPSS / VPREPSS data is nascent for these June 2026 CVEs. Tenable VPR assigns 3.0 (Low, 23.61st percentile) across the plugin, indicating very low predicted exploitation probability in the near term.
CISA KEV statusNot listed in the Known Exploited Vulnerabilities catalog as of 2026-09-21.
CVSS vectorsCVE-2026-42127: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (7.5) · CVE-2026-33382: identical vector (7.5) · CVE-2026-8609: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L (5.3) · CVE-2026-10601: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L (5.4). All four are Scope:Unchanged, meaning impact is confined to the Grafana instance.
Affected version rangesGrafana 11.6.0 – 11.6.14, 12.0.x – 12.1.x (12.0 is EOL, no fix), 12.2.0 – 12.2.8, 12.3.0 – 12.3.6, 12.4.0 – 12.4.3, 13.0.0 – 13.0.1
Fixed versions11.6.15, 12.2.9, 12.3.7, 12.4.4, 13.0.2. Grafana 12.0.x is EOL — no patch issued; upgrade to 12.2.9+ is required.
Internet exposureShodan indexes ~128,000 internet-facing Grafana instances globally. CyCognito sector breakdown: IT sector 33.6%, Communications 23.2% of observed vulnerable assets. Many instances expose public dashboard endpoints by default.
Disclosure timeline2026-06-09: Grafana Labs publishes advisories for all four CVEs and releases patched versions. 2026-07-24: Tenable publishes plugin 329319. 2026-08-24: Plugin last updated.
Reporter / creditNo external researcher credited for the three DoS CVEs — likely discovered internally by Grafana Labs security team. CVE-2026-10601 (path traversal) also uncredited in the public advisory.
04 · The Call

Final Verdict
= UNCHANGED to MEDIUM (5.0/10)

Why this verdict

  • Availability-only impact on a non-critical-path service: All three DoS CVEs (42127, 33382, 8609) affect only the Availability pillar — zero confidentiality breach, zero integrity compromise. CVSS 7.5 is mechanically correct but structurally overweights availability-only bugs that are trivially recoverable on a service that is not in the data path or the authentication path.
  • Auto-restart negates persistence: Grafana under systemd (Restart=always) or Kubernetes (liveness probe + restartPolicy: Always) recovers in 1–15 seconds. The attacker must sustain malicious traffic to maintain the outage, which is noisy and trivially blocked by rate-limiting or body-size enforcement. This is a nuisance DoS, not a persistent compromise.
  • Trivial compensating control eliminates the entire attack surface: A single reverse proxy directive (client_max_body_size 1m in nginx, LimitRequestBody in Apache, payload size policy in AWS ALB/Cloudflare) neutralizes CVE-2026-42127 and CVE-2026-33382 completely. Rate-limiting the OAuth route handles CVE-2026-8609. Most production Grafana deployments already have these controls.
  • Role multiplier: Grafana's deployment roles span (a) dev/sandbox dashboards (low value), (b) team monitoring dashboards (typical), and (c) production/SOC observability panes (high value, closest analog: detection plane). In the worst high-value role — SOC monitoring — a DoS produces *temporary dashboard blindness*. It does NOT produce domain takeover, fleet compromise, data exfiltration, or supply-chain pivot. Alerting pipelines (Prometheus AlertManager, PagerDuty, OpsGenie webhooks) survive independently of the Grafana process. Blast radius is confined to host-level visibility loss with automatic recovery. This does not meet the HIGH floor threshold because the high-value-role outcome is temporary availability loss, not any of the floor-triggering impact classes.
  • CVE-2026-10601 adds minor confidentiality risk but is gated by authentication: The path traversal requires Viewer credentials and specific Tempo/Loki data source configurations. Its CVSS (5.4) and the auth prerequisite prevent it from elevating the bundle. Leaked backend credentials represent a theoretical secondary pivot, not a direct fleet-compromise chain, and require yet another exploitable vulnerability downstream.
  • Zero exploitation signal: Not in CISA KEV, no public PoC repos, Tenable VPR 3.0 (23rd percentile), no campaign reports, no GreyNoise tags. The complete absence of threat-intelligence signal confirms this is a patch-cycle item, not an incident-response trigger.

Why not higher?

Elevating to HIGH would require a plausible chain where crashing Grafana leads to domain takeover, fleet compromise, mass data exfiltration, or supply-chain pivot. No such chain exists here. Grafana is a visualization and dashboarding layer — crashing it costs operators metric visibility, not infrastructure control. The path traversal (CVE-2026-10601) could theoretically leak backend data source credentials, but it requires authenticated Viewer access, specific Tempo/Loki configurations, *and* a second exploitable chain on the leaked target to achieve fleet-scale impact. No exploitation signals, no KEV listing, and a 23rd-percentile VPR all reinforce that urgency is unwarranted.

Why not lower?

Dropping to LOW or IGNORE would undercount the ~128,000 internet-facing Grafana instances where these pre-auth DoS vectors are reachable with nothing more than curl. The three DoS CVEs require zero authentication, zero user interaction, and low complexity — the exploitation friction is near-zero for any exposed instance. Even though the impact is availability-only, the combination of broad exposure, trivial exploitation, and the tactical value of blinding monitoring during a coordinated attack merits MEDIUM. The path traversal also adds a non-trivial confidentiality concern for environments with sensitive Tempo/Loki backend configurations.

05 · Compensating Control

What to do — in priority order.

  1. Enforce request body size limits on your reverse proxy — Add client_max_body_size 1m; in nginx, LimitRequestBody 1048576 in Apache, or equivalent payload-size policy in your ALB/CDN for the Grafana vhost. This neutralizes CVE-2026-42127 and CVE-2026-33382 completely by preventing oversized payloads from ever reaching the Grafana process. No noisgate mitigation SLA applies for MEDIUM — go straight to the 365-day noisgate remediation SLA window. That said, this is a 5-minute config change and should be standard infrastructure hygiene.
  2. Rate-limit OAuth login endpoints — Configure your reverse proxy or WAF to rate-limit requests to /login/generic_oauth and related OAuth callback routes to ≤10 req/s per source IP. This mitigates CVE-2026-8609's unbounded memory growth from repeated unique-state-parameter calls. Cloudflare rate-limiting rules, AWS WAF rate-based rules, or nginx limit_req all work. Deploy within your normal change window — no mitigation SLA for MEDIUM.
  3. Disable public dashboards on instances that don't need them — Set [feature_toggles] publicDashboards = false in grafana.ini on any Grafana instance not actively serving anonymous public dashboards. This eliminates the CVE-2026-42127 attack surface entirely. Audit your fleet — most internal monitoring instances have no business reason for public dashboard access.
  4. Audit Viewer-role access to Tempo/Loki data sources — For CVE-2026-10601, review which users or service accounts have Viewer permissions on folders and dashboards backed by Tempo or Loki data sources. Restrict to need-to-know. If your Tempo/Loki backends store credentials or expose admin endpoints reachable via path traversal, add network segmentation between Grafana's data source proxy and those backends.
  5. Upgrade Grafana to fixed versions within the 365-day remediation window — Patch to Grafana 11.6.15, 12.2.9, 12.3.7, 12.4.4, or 13.0.2+. Per the noisgate remediation SLA for MEDIUM severity, complete this within 365 days. Grafana 12.0.x is EOL with no patch — those instances must be upgraded to at least 12.2.9. Schedule this in your next quarterly patch cycle.
What doesn't work
  • Volumetric DDoS protection (Cloudflare DDoS scrubbing, AWS Shield): These DoS bugs are application-layer memory-exhaustion flaws, not volumetric floods. A *single* well-crafted POST request of sufficient size can crash Grafana. Standard L3/L4 DDoS scrubbing won't detect or block it unless the provider also enforces HTTP body-size limits at the edge.
  • Grafana authentication / SSO / MFA: CVE-2026-42127, CVE-2026-33382, and CVE-2026-8609 are all pre-authentication — they hit endpoints that execute before any auth middleware runs. Enabling SAML SSO, OAuth, or tightening password policies has zero effect on these three CVEs.
  • Grafana RBAC / Organization-level isolation: Tightening role-based access controls helps with CVE-2026-10601 (the auth-required path traversal) but does nothing for the three pre-auth DoS CVEs that represent the bulk of this plugin's risk surface.
06 · Verification

Crowdsourced verification payload.

Run on each Grafana host, or from any auditor workstation that can reach the Grafana HTTP API. No special privileges needed — the script queries the unauthenticated /api/health endpoint, falling back to the grafana-server binary if the API is unreachable. Usage: bash check_grafana_329319.sh http://grafana.internal:3000

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate verification — tenable:329319
# CVE-2026-42127 / CVE-2026-33382 / CVE-2026-8609 / CVE-2026-10601
# Outputs: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN
set -euo pipefail

GRAFANA_URL="${1:-http://localhost:3000}"
VERSION=""

# --- Method 1: unauthenticated API health endpoint ---
if command -v curl &>/dev/null; then
  VERSION=$(curl -sf --max-time 5 "${GRAFANA_URL}/api/health" 2>/dev/null \
    | grep -oP '"version"\s*:\s*"\K[0-9]+\.[0-9]+\.[0-9]+' || true)
fi

# --- Method 2: grafana-server binary on the local host ---
if [ -z "$VERSION" ]; then
  for BIN in grafana-server /usr/sbin/grafana-server /usr/share/grafana/bin/grafana; do
    if command -v "$BIN" &>/dev/null 2>&1 || [ -x "$BIN" 2>/dev/null ]; then
      VERSION=$("$BIN" -v 2>/dev/null | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
      [ -n "$VERSION" ] && break
    fi
  done
fi

if [ -z "$VERSION" ]; then
  echo "UNKNOWN - could not determine Grafana version via ${GRAFANA_URL}/api/health or local binary"
  exit 2
fi

echo "Detected Grafana version: ${VERSION}"
IFS='.' read -r MAJ MIN PAT <<< "$VERSION"
VULN=0

# Affected ranges:
#   11.6.0  – 11.6.14  → fixed 11.6.15
#   12.0.x  – 12.1.x   → EOL / no patch (vulnerable)
#   12.2.0  – 12.2.8   → fixed 12.2.9
#   12.3.0  – 12.3.6   → fixed 12.3.7
#   12.4.0  – 12.4.3   → fixed 12.4.4
#   13.0.0  – 13.0.1   → fixed 13.0.2

if   [[ $MAJ -eq 11 && $MIN -eq 6 && $PAT -lt 15 ]]; then VULN=1
elif [[ $MAJ -eq 12 && ( $MIN -eq 0 || $MIN -eq 1 ) ]]; then VULN=1  # EOL, no fix
elif [[ $MAJ -eq 12 && $MIN -eq 2 && $PAT -lt 9 ]]; then VULN=1
elif [[ $MAJ -eq 12 && $MIN -eq 3 && $PAT -lt 7 ]]; then VULN=1
elif [[ $MAJ -eq 12 && $MIN -eq 4 && $PAT -lt 4 ]]; then VULN=1
elif [[ $MAJ -eq 13 && $MIN -eq 0 && $PAT -lt 2 ]]; then VULN=1
fi

if [ "$VULN" -eq 1 ]; then
  echo "VULNERABLE - Grafana ${VERSION} is affected by CVE-2026-42127 / 33382 / 8609 / 10601"
  echo "Upgrade to: 11.6.15 | 12.2.9 | 12.3.7 | 12.4.4 | 13.0.2+"
  exit 1
else
  echo "PATCHED - Grafana ${VERSION} is not in any affected range"
  exit 0
fi
07 · Sources

Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.