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.
4 steps from start to impact.
Discover internet-facing Grafana instance
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.- Target Grafana instance is network-reachable (internet or internal)
- 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
title:"Grafana" or http.favicon.hash:-1399433489. Tenable plugin 329319 detects vulnerable versions via remote version check.Craft oversized JSON payload targeting unauthenticated endpoints
/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.- Public dashboards feature is enabled (CVE-2026-42127)
- No reverse proxy enforcing body-size limits upstream of Grafana
- Production Grafana behind nginx/HAProxy/Cloudflare/AWS ALB typically enforces
client_max_body_sizeor equivalent by default - Enterprise WAF rules for oversized payloads are a standard baseline control
Memory exhaustion triggers OOM kill and service crash
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.- Payload reaches Grafana without truncation by upstream infrastructure
- Kubernetes deployments with memory limits and liveness probes auto-restart the pod in 5-15 seconds
- systemd units with
Restart=alwaysrecover in 1-5 seconds - HA Grafana behind a load balancer fails over to surviving nodes transparently
dmesg/journalctl. Grafana process exit in systemd journal. Kubernetes pod restart count increment. Prometheus up{job="grafana"} drops to 0.(Alternative chain) Authenticated path traversal via Tempo/Loki plugins
- 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
- 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
The supporting signals.
| In-the-wild exploitation | None 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 availability | No 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 / VPR | EPSS 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 status | Not listed in the Known Exploited Vulnerabilities catalog as of 2026-09-21. |
| CVSS vectors | CVE-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 ranges | Grafana 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 versions | 11.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 exposure | Shodan 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 timeline | 2026-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 / credit | No 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. |
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 1min nginx,LimitRequestBodyin 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.
What to do — in priority order.
- Enforce request body size limits on your reverse proxy — Add
client_max_body_size 1m;in nginx,LimitRequestBody 1048576in 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. - Rate-limit OAuth login endpoints — Configure your reverse proxy or WAF to rate-limit requests to
/login/generic_oauthand 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 nginxlimit_reqall work. Deploy within your normal change window — no mitigation SLA for MEDIUM. - Disable public dashboards on instances that don't need them — Set
[feature_toggles] publicDashboards = falseingrafana.inion 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. - 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.
- 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.
- 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.
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
#!/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- Grafana Advisory — CVE-2026-42127 (Pre-auth DoS via public dashboard query)
- Grafana Advisory — CVE-2026-33382 (DoS via oversized request bodies)
- Grafana Advisory — CVE-2026-8609 (OAuth login unbounded memory growth)
- Grafana Advisory — CVE-2026-10601 (Tempo/Loki path traversal)
- Tenable Plugin 329319 — Grafana Multiple Vulnerabilities
- Grafana Feature Toggles Documentation (sqlExpressions GA status)
- BleepingComputer — Grafana Shodan Exposure Data (128K+ instances)
- Grafana Security Advisories Index
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.