Someone left a loaded gun in the SIEM's optional AI drawer, but only the safe owner has the key
CVE-2026-76404 is a classic CWE-502 insecure deserialization bug in the Splunk MCP Server app (versions below 1.2.1), an *optional* Splunkbase add-on that exposes Splunk data to AI agents via the Model Context Protocol. The credential management component deserializes stored data without type-checking, allowing an attacker who already holds the Splunk admin role to inject a crafted serialized payload and achieve arbitrary OS command execution on the underlying search head. The Scope is Changed (S:C), meaning the blast radius escapes the Splunk application context and lands on the host OS. Fixed in version 1.2.1, disclosed 2026-08-19, reported by Kuniyoshi Noguchi.
Splunk tagged this CVSS 9.1 CRITICAL, which is *technically correct* per the vector math (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) but overstates the real-world urgency for most shops. The PR:H gate means only Splunk administrators — a role typically held by a handful of people per org — can trigger it. The affected component is an optional AI-integration app that is *not* shipped with Splunk Enterprise or Cloud by default; you had to deliberately install it from Splunkbase. The combination of a narrow privilege requirement and a limited installed base significantly reduces the exploitable population, even though the *consequence* of successful exploitation (OS-level RCE on a SIEM search head) remains severe.
4 steps from start to impact.
Obtain Splunk admin credentials
admin role in the target Splunk deployment. This could come from credential stuffing, phishing a Splunk admin, prior compromise of a secrets vault, or insider threat. Without this role, the deserialization endpoint is inaccessible.- Valid Splunk account with the admin role
- Network access to the Splunk management port (default 8089) or Splunk Web (default 8000)
- Splunk admin accounts are typically limited to 2-5 individuals per org and are often protected by MFA
- Management port 8089 is rarely exposed to the internet; most orgs restrict it to a management VLAN
_audit index; successful admin logins can trigger alerts via index=_audit action=login info=succeeded user=adminConfirm MCP Server app is installed
- Splunk MCP Server app < 1.2.1 installed and enabled
- The app is optional, not bundled by default — only orgs adopting MCP/AI agent integration will have it
- The app is relatively new (2026), limiting the installed base to early adopters
| rest /services/apps/local | search title="*mcp*"Craft malicious serialized payload
- Knowledge of the serialization format used by the credential management component
- Ability to write to the credential store via REST API or Splunk Web
- No public PoC exists as of 2026-08-20, so attackers must reverse-engineer the deserialization path independently
- The specific serialization library and injection point are not publicly documented
| rest /servicesNS/-/-/storage/passwords access patternsTrigger deserialization and achieve OS RCE
splunk on Linux or SYSTEM on Windows). Because Scope is Changed, the attacker escapes the Splunk application boundary and operates directly on the host operating system. From a SIEM search head, this means access to all indexed data, the ability to tamper with detections, and a pivot point into the broader network.- Successful payload delivery in step 3
- The credential component must read/deserialize the poisoned entry (may require a trigger action or happen automatically)
- splunkd often runs as a dedicated low-privilege
splunkuser on Linux, limiting immediate lateral movement without further privesc - EDR on the search head should flag anomalous child processes spawned by splunkd
_internal index may capture errors during deserializationThe supporting signals.
| In-the-wild exploitation | Not observed. Not on CISA KEV as of 2026-08-20. No campaigns or threat actor usage reported. |
|---|---|
| Proof-of-concept | No public PoC available. The bug class (CWE-502 in Splunk Python apps) has well-documented prior art from SVD-2024-1205 and SVD-2026-0601 (Splunk Secure Gateway jsonpickle deserialization), which *do* have public PoCs. An experienced attacker could adapt those techniques. |
| EPSS | Not yet scored (disclosed 2026-08-19). Based on the admin-only prerequisite and optional app scope, expect a low-to-moderate EPSS percentile once scored. |
| KEV status | Not listed. No CISA BOD 22-01 deadline applies. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H — Network-accessible, low complexity, but requires high privileges. Scope Changed means OS-level impact beyond Splunk. |
| Affected versions | Splunk MCP Server app < 1.2.1 (base version 1.2 and earlier) |
| Fixed version | Splunk MCP Server app 1.2.1 (available on Splunkbase) |
| Scanning/exposure | Splunk management port 8089 is rarely internet-facing. Shodan/Censys typically show < 5,000 Splunk instances globally with 8089 exposed. The MCP Server app is a subset of those. |
| Disclosure date | 2026-08-19 (SVD-2026-0808) |
| Reporter | Kuniyoshi Noguchi (KuniNogu), credited by Splunk in SVD-2026-0808 |
noisgate verdict.
The single most decisive factor driving the downgrade from CRITICAL to HIGH is the PR:H prerequisite — only Splunk admin-role holders can trigger the deserialization chain, and this role is typically held by fewer than 5 people per organization, dramatically narrowing the exploitable population. The SIEM role multiplier (blast radius includes detection-plane compromise and indexed-data access on successful exploitation) establishes a HIGH floor that prevents further downgrade.
Why this verdict
- PR:H gate: The Splunk admin role is a tightly held credential, typically protected by MFA and held by 2-5 individuals per organization. This compounding prerequisite means the attacker is already deeply trusted before the chain begins — functionally equivalent to insider threat or post-compromise of a privileged identity.
- Optional app, limited installed base: The Splunk MCP Server app is not bundled with Splunk Enterprise or Cloud. It must be deliberately installed from Splunkbase. As a 2026 product tied to the nascent MCP/AI-agent ecosystem, adoption is concentrated among early adopters, significantly reducing the reachable population.
- No exploitation evidence or public PoC: Disclosed yesterday (2026-08-19), not KEV-listed, no known campaigns, no public exploit code. While the bug class has prior art in Splunk Secure Gateway deserialization PoCs, adapting those requires reverse-engineering the MCP Server's credential storage path.
- Role multiplier: Splunk is a SIEM / detection plane component — a high-value role by definition. If the chain succeeds on a search head, the blast radius includes: (a) OS-level RCE on a host that indexes security-critical data, (b) ability to tamper with or delete detections and alerts, (c) access to all indexed data including potential credentials and secrets, (d) pivot point into the network from a trusted monitoring host. This is a fleet-visibility-scale impact. The role multiplier establishes a HIGH floor — the verdict cannot go below HIGH despite the friction from PR:H and optional-app status.
- Scope Changed but gated: The S:C designation correctly captures that exploitation escapes Splunk's application boundary to the host OS. However, on Linux deployments splunkd typically runs as a dedicated
splunkuser (not root), limiting immediate post-exploitation impact without a local privesc chain. On Windows, splunkd may run as SYSTEM, which is worse.
Why not higher?
Despite the Changed Scope and SIEM role multiplier, this cannot stay at CRITICAL because the admin-role prerequisite (PR:H) means an attacker already needs highly privileged authenticated access to even begin the chain. The affected component is also an *optional* add-on app, not core Splunk — so the fraction of Splunk installations where this vulnerability exists is substantially less than the full Splunk installed base. There is no active exploitation, no KEV listing, and no public PoC to indicate imminent weaponization.
Why not lower?
The SIEM/detection-plane role multiplier is the hard floor. A compromised Splunk search head gives attackers the ability to blind the SOC, exfiltrate all indexed telemetry, and pivot from one of the most trusted hosts on the network. Even with the PR:H gate, the *consequence* of successful exploitation is too severe to classify as MEDIUM. Additionally, the deserialization bug class has well-established prior art in Splunk's own ecosystem (jsonpickle in Secure Gateway), lowering the R&D barrier for a motivated attacker.
What to do — in priority order.
- Upgrade the MCP Server app to 1.2.1 immediately — This is the definitive fix. The app is a Splunkbase add-on and can be upgraded independently of Splunk Enterprise/Cloud without a full platform maintenance window. Deploy within the noisgate HIGH mitigation SLA of 30 days, but aim for this week given the SIEM role.
- Disable or remove the MCP Server app if not actively used — If your org installed the app for evaluation but is not using MCP/AI agent integration in production, remove it entirely via
splunk remove app splunk_mcp_serveror disable it in the app management UI. This eliminates the attack surface completely. Do this within 30 days per the noisgate HIGH mitigation SLA. - Restrict Splunk management port 8089 to a dedicated management VLAN — Ensure port 8089 is not accessible from general user networks or the internet. Use firewall rules or network segmentation to limit access to authorized admin workstations and automation hosts only. This reduces the network reachability of the vulnerable endpoint.
- Enforce MFA on all Splunk admin accounts — Since the chain requires admin-role credentials, MFA on Splunk Web and REST API authentication significantly raises the bar for credential-based attacks. Integrate with your IdP (SAML/OIDC) and enforce conditional access policies.
- Monitor for anomalous splunkd child processes — Deploy an EDR detection or Splunk search that alerts on unexpected child processes spawned by the splunkd process (e.g.,
sh,bash,cmd.exe,powershell.exe). This catches the post-exploitation phase of deserialization RCE.
- WAF/reverse proxy in front of Splunk Web — The deserialization occurs in the credential management backend, likely triggered via the REST API on port 8089, not through HTTP request payloads that a WAF would inspect. A WAF cannot parse Splunk's internal serialization format.
- Reducing the admin user's capabilities — The
adminrole is a built-in Splunk role with broad capabilities. You cannot selectively remove credential-store write access without breaking core admin functionality. Role restriction is not a viable workaround here. - Network-level IDS/IPS signatures — The malicious payload is delivered over TLS-encrypted Splunk REST API calls. Without TLS inspection terminating at the Splunk management port, network signatures cannot detect the serialized payload.
Crowdsourced verification payload.
Run this script on each Splunk search head where the MCP Server app might be installed. Execute as the splunk user or any user with read access to $SPLUNK_HOME. No Splunk admin credentials required — it only checks the installed app version on disk. Example: bash check_cve_2026_76404.sh or bash check_cve_2026_76404.sh /opt/splunk
#!/usr/bin/env bash
# check_cve_2026_76404.sh — Detect vulnerable Splunk MCP Server app
# CVE-2026-76404: Deserialization RCE in credential management (< 1.2.1)
# Exit codes: 0 = PATCHED/not installed, 1 = VULNERABLE, 2 = UNKNOWN
set -euo pipefail
SPLUNK_HOME="${1:-/opt/splunk}"
APP_DIR="$SPLUNK_HOME/etc/apps/splunk_mcp_server"
APP_CONF="$APP_DIR/default/app.conf"
if [ ! -d "$APP_DIR" ]; then
echo "PATCHED — Splunk MCP Server app is not installed at $APP_DIR"
exit 0
fi
if [ ! -f "$APP_CONF" ]; then
echo "UNKNOWN — App directory exists but app.conf not found at $APP_CONF"
exit 2
fi
# Extract version from app.conf [launcher] stanza
VERSION=$(grep -A5 '\[launcher\]' "$APP_CONF" | grep -i '^version' | head -1 | sed 's/[^0-9.]//g')
if [ -z "$VERSION" ]; then
# Try [id] stanza as fallback
VERSION=$(grep -A5 '\[id\]' "$APP_CONF" | grep -i '^version' | head -1 | sed 's/[^0-9.]//g')
fi
if [ -z "$VERSION" ]; then
echo "UNKNOWN — Could not parse version from $APP_CONF"
exit 2
fi
# Compare version — vulnerable if < 1.2.1
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
MINOR=${MINOR:-0}
PATCH=${PATCH:-0}
if [ "$MAJOR" -lt 1 ] 2>/dev/null; then
echo "VULNERABLE — Splunk MCP Server app version $VERSION is below 1.2.1 (CVE-2026-76404)"
exit 1
elif [ "$MAJOR" -eq 1 ] && [ "$MINOR" -lt 2 ] 2>/dev/null; then
echo "VULNERABLE — Splunk MCP Server app version $VERSION is below 1.2.1 (CVE-2026-76404)"
exit 1
elif [ "$MAJOR" -eq 1 ] && [ "$MINOR" -eq 2 ] && [ "$PATCH" -lt 1 ] 2>/dev/null; then
echo "VULNERABLE — Splunk MCP Server app version $VERSION is below 1.2.1 (CVE-2026-76404)"
exit 1
else
echo "PATCHED — Splunk MCP Server app version $VERSION is >= 1.2.1"
exit 0
fiIf you remember one thing.
Sources
- Splunk Advisory SVD-2026-0808
- CVE-2026-76404 — THREATINT
- SecurityWeek — Splunk Enterprise Update Patches Code Execution Vulnerability
- Splunk MCP Server Documentation
- HKCERT — Splunk Products Multiple Vulnerabilities
- CyberSecurityNews — Splunk Secure Gateway Deserialization PoC (related bug class)
- CISA Known Exploited Vulnerabilities Catalog
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.