Splunk Enterprise Unauthenticated RCE — CVE-2026-20253

PostgreSQL sidecar unauthenticated file-write chains to remote code execution on the Splunk host · CISA KEV, exploited in the wild
Threat
CVE-2026-20253
Severity
EXPLOITED ITW
Type
CVE / Edge App / RCE
Access
Unauthenticated · Network
CVSS
9.8 (Critical) · CWE-306
Version
v0.1 · 2026-06-20
Author
HuntPack
Confidence
High (behavioral)
01

Executive Summary

CVE-2026-20253 is a critical (CVSS 9.8) missing-authentication flaw (CWE-306) in Splunk Enterprise. A PostgreSQL sidecar service endpoint bundled with Splunk Enterprise exposes file-create and file-truncate operations without authentication. watchTowr Labs demonstrated that this arbitrary file-write primitive chains into full remote code execution on the Splunk host: the PostgreSQL lo_export large-object export function is abused to write an attacker-controlled script to disk, which is then executed. Because the entry point requires no credentials and is reachable over the network, a single request to an exposed Splunk instance can yield code execution as the Splunk service account.

Affected: Splunk Enterprise 10.0.0–10.0.6 and 10.2.0–10.2.3. Fixed in 10.0.7 / 10.2.4 (or later). watchTowr published a technical write-up and PoC on 2026-06-12; CISA added the CVE to the KEV catalog on 2026-06-18 — the first-ever Splunk vulnerability on KEV — confirming limited in-the-wild exploitation, with an FCEB remediation deadline of 2026-06-21.

Attacker objective: establish unauthenticated code execution on an internet- or intranet-reachable Splunk indexer/search head, then pivot — Splunk hosts are high-value (centralized log data, credentials in config, lateral reach to the rest of the estate).

Highest-value defensive angle: the exploit's terminal step is a Splunk service process spawning a shell or interpreter. splunkd and the bundled postgres sidecar should essentially never parent /bin/sh, bash, python, cmd.exe or powershell.exe. That parent/child anomaly is the cleanest, version-independent detection and the centerpiece of this pack.

Defender priority: Patch to 10.0.7 / 10.2.4+ now (KEV deadline 2026-06-21). Until patched, restrict network access to the Splunk management/sidecar ports and hunt for any Splunk service process spawning a shell/interpreter or writing new executables/scripts under the Splunk install dir.

02

Source Review & Web Hunter Notes

SourceTierPulledNote
NVD — CVE-2026-20253AuthoritativeCVSS 9.8, CWE-306, version rangesCanonical CVE record
CISA KEV catalog (added 2026-06-18)AuthoritativeITW confirmation, FCEB deadline 2026-06-21First Splunk CVE on KEV
Splunk security advisoryVendorFixed versions 10.0.7 / 10.2.4Remediation guidance
watchTowr Labs write-up + PoC (2026-06-12)ResearchRoot cause, lo_export chain, file-write → RCETechnical primitive detail
SOCRadar blogSecondaryTimeline, detection guidance summaryCorroborating aggregator

Decision: No atomic IOCs (attacker IPs, payload hashes, dropped filenames) have been published as of 2026-06-20. This pack ships behavioral signatures only — no fabricated indicators. Concrete IOC fields use REPLACE_WITH_… placeholders to be filled from your own telemetry or a future vendor feed.

03

Hunt Brief & Attack Chain

Hunt hypotheses

  • H1: A Splunk service process (splunkd, bundled postgres sidecar, or a splunk-* helper) spawns a shell or scripting interpreter — the terminal RCE step.
  • H2: A new executable or script file is written under the Splunk install directory (/opt/splunk/…, C:\Program Files\Splunk\…) by a Splunk-owned process — the lo_export drop.
  • H3: The Splunk host makes anomalous outbound network connections (reverse shell / C2) shortly after a child-process anomaly.
  • H4: Splunk internal access logs (splunkd_access.log) show unauthenticated POST traffic to the management/sidecar endpoint from unexpected sources.

Attack chain

#StepObservableATT&CK
1Reach unauthenticated PostgreSQL sidecar endpoint over networkAnomalous POST to Splunk mgmt/sidecar port from unexpected srcT1190
2Arbitrary file create/truncate via sidecarUnexpected file writes under Splunk install dirT1190
3Write script to disk via PostgreSQL lo_exportNew script/executable under Splunk paths, Splunk-ownedT1505.003 / T1059
4Execute the dropped scriptSplunk service process spawns shell/interpreterT1059
5Establish C2 / reverse shell, then pivotOutbound connection from Splunk host processT1071 / T1059
04

Consolidated IOC Table

No atomic IOCs (IPs / hashes / filenames) published as of 2026-06-20. The table below is behavioral. Replace REPLACE_WITH_… values from your own incident telemetry or a vetted feed before alerting.

TypeValueConfidenceActionContext
BehaviorSplunk service proc (splunkd/postgres/splunk-*) → shell/interpreter childhighdetectTerminal RCE step (Q1, Q4)
BehaviorNew script/exe written under Splunk install dir by Splunk-owned prochighdetectlo_export drop (Q2)
BehaviorOutbound connection from Splunk host process to non-baseline destmediumhuntReverse shell / C2 (Q3)
BehaviorUnauthenticated POST to Splunk mgmt/sidecar endpoint, unexpected srcmediumhuntNative log hunt (Q5, §7)
IPv4REPLACE_WITH_C2_IPlowenrichNone published — fill from incident
SHA256REPLACE_WITH_SHA256lowenrichNone published — fill from incident
FilenameREPLACE_WITH_DROPPED_SCRIPTlowenrichNone published — fill from incident
05

Affected Surface & Telemetry Matrix

Affected: Splunk Enterprise 10.0.0–10.0.6 and 10.2.0–10.2.3 (any role: indexer, search head, heavy forwarder running the bundled PostgreSQL sidecar). Fixed: 10.0.7 / 10.2.4 or later. Default install paths: Linux /opt/splunk (binaries in /opt/splunk/bin); Windows C:\Program Files\Splunk.

SurfaceTelemetryPriorityGap
Splunk host process tree (Linux/Windows)Falcon ProcessRollup2 / SyntheticProcessRollup2CriticalRequires Falcon sensor on the Splunk host
Splunk install-dir filesystemFalcon file-write events (NewExecutableWritten / file mods)CriticalScript (non-PE) writes may need OS file auditing too
Splunk host network egressFalcon NetworkConnectIP4 / NetworkConnectIP6HighNeeds egress baseline to reduce FP
Splunk internal access logssplunkd_access.log (native, self-monitored in _internal)HighSidecar endpoint may log separately; confirm coverage
Perimeter / mgmt port exposureFirewall / NDR for Splunk mgmt (8089) and sidecar portsHighSidecar port not in standard NDR app signatures
06

ATT&CK Mapping

TacticTechniqueBehaviorQuery / Control
Initial AccessT1190 — Exploit Public-Facing ApplicationUnauthenticated request to PostgreSQL sidecar endpointQ5, §7, patch
Persistence / ExecutionT1505.003 — Server Software Component: Web Shell / payload dropScript written under Splunk dir via lo_exportQ2
ExecutionT1059 — Command & Scripting InterpreterSplunk service proc spawns shell/interpreterQ1, Q4
ExecutionT1059.004 / T1059.001 — Unix Shell / PowerShell/bin/sh, bash, powershell.exe child of Splunk procQ1, Q4
Command & ControlT1071 — Application Layer ProtocolOutbound C2 / reverse shell from Splunk hostQ3
07

Native Audit-Log Hunts

Hunts runnable inside Splunk itself and on host OS audit logs — complement the Falcon CQL in §8.

Splunk internal access log (run in Splunk)

index=_internal sourcetype=splunkd_access method=POST
| stats count min(_time) max(_time) values(uri_path) by clientip, status
| where count > 0

Look for POSTs to the management/sidecar endpoint from unexpected client IPs or with no preceding authentication event. Baseline known admin/forwarder IPs first, then alert on the remainder. Confirm whether the PostgreSQL sidecar logs to splunkd_access.log or a separate channel in your build and extend coverage accordingly.

Linux host (auditd / OS)

  • Watch for splunkd or postgres (Splunk-owned) as the parent of execve for /bin/sh, bash, python*, perl, curl, wget, nc.
  • Watch for new files created under /opt/splunk/ with execute bit set, owned by the Splunk service user, outside upgrade windows.

Windows host (Sysmon)

  • Sysmon Event ID 1 — ParentImage under C:\Program Files\Splunk\ spawning cmd.exe / powershell.exe / wscript.exe.
  • Sysmon Event ID 11 — file create of .ps1 / .bat / .vbs / .exe under the Splunk install path by a Splunk service process.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Splunk service process spawns a shell / interpreter
CONF HIGHFP LOWCOST LOW

Looks for: the terminal RCE step — splunkd, the bundled postgres sidecar, or a splunk-* helper parenting a shell or scripting interpreter. FP: Splunk legitimately runs scripted inputs and alert actions; exclude known scripted-input wrappers and your alert-action scripts by path/command-line.

// HUNT: Splunk service process spawning a shell/interpreter (CVE-2026-20253 RCE terminal step)
// MITRE: T1059, T1190 | CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 on Splunk hosts
// FALSE POSITIVES: Splunk scripted inputs, alert-action scripts, custom commands
// TUNING: add ImageFileName exclusions for sanctioned scripted-input wrapper paths
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(splunkd|splunk-optimize|postgres|splunk-.*)$/i
| ImageFileName=/(\/(sh|bash|dash|zsh|ksh|python[0-9.]*|perl|ruby|php)|\\(cmd|powershell|pwsh|wscript|cscript|mshta)\.exe)$/i
| groupBy([ComputerName, ParentBaseFileName, ImageFileName], function=([count(aid, as=hits), collect([CommandLine, UserName])]))
| sort(hits, order=desc)
Q2 · New executable / script written under Splunk install dir
CONF HIGHFP MEDCOST LOW

Looks for: the lo_export drop — a new PE / script file appearing under the Splunk install path. FP: Splunk upgrades and app installs write executables/scripts under the install dir; exclude maintenance windows and the splunkd/updater as the writing process, or scope to script extensions only.

// HUNT: New executable/script written under Splunk install directory (CVE-2026-20253 payload drop)
// MITRE: T1505.003, T1059 | CONF: high  FP: medium  COST: low | REQUIRES: file-write telemetry on Splunk hosts
// FALSE POSITIVES: Splunk upgrades, app/add-on installs, updater-written binaries
// TUNING: exclude change windows; exclude ContextBaseFileName in (splunkd, msiexec) for sanctioned updates
#event_simpleName=/NewExecutableWritten|PeFileWritten|NewScriptWritten/
| TargetFileName=/(\/opt\/splunk\/|\\Program Files\\Splunk\\)/i
| TargetFileName=/\.(sh|py|pl|rb|php|ps1|bat|cmd|vbs|exe|dll|elf)$/i
| groupBy([ComputerName, ContextBaseFileName, TargetFileName], function=([count(aid, as=writes), collect([UserName])]))
| sort(writes, order=desc)
Q3 · Outbound connection from a Splunk host process
CONF MEDFP MEDCOST MED

Looks for: reverse-shell / C2 egress from a Splunk host, especially from a non-Splunk binary (shell/interpreter) or to a non-baseline destination. FP: Splunk forwarders/indexers make legitimate outbound connections (deployment server, S2S on 9997, license master, external lookups); baseline and exclude sanctioned destinations and ports before alerting.

// HUNT: Outbound network connection from a Splunk host process (CVE-2026-20253 C2 / reverse shell)
// MITRE: T1071, T1059 | CONF: medium  FP: medium  COST: medium | REQUIRES: NetworkConnect telemetry + egress baseline
// FALSE POSITIVES: S2S forwarding (9997), deployment/license traffic, external lookups
// TUNING: maintain an allowlist of RemoteAddressIP4/RemotePort for sanctioned Splunk peers
#event_simpleName=/NetworkConnectIP4|NetworkConnectIP6/
| ContextBaseFileName=/(sh|bash|dash|python[0-9.]*|perl|nc|ncat|socat|powershell|pwsh)/i
| RemotePort!=9997 AND RemotePort!=8089
| RemoteAddressIP4!=/^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.)/
| groupBy([ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], function=count(aid, as=conns))
| sort(conns, order=desc)
Q4 · Reverse-shell command-line patterns from Splunk-parented process
CONF HIGHFP LOWCOST MED

Looks for: classic reverse-shell / download-and-run command lines among processes descended from a Splunk service process. FP: low — these command-line shapes are rarely benign under a Splunk parent; review any hit immediately.

// HUNT: Reverse-shell / download-cradle command line under a Splunk service process (CVE-2026-20253)
// MITRE: T1059, T1071 | CONF: high  FP: low  COST: medium | REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: rare under a Splunk parent; validate scripted inputs that use curl/wget
// TUNING: widen/narrow the CommandLine regex to local tradecraft
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(splunkd|postgres|splunk-.*)$/i
| CommandLine=/(\/dev\/tcp\/|bash\s+-i|nc\s+-e|ncat\s|socat\s|python.{0,40}socket|powershell.{0,40}(IEX|DownloadString|TcpClient)|curl\s.{0,80}\|\s*(sh|bash)|wget\s.{0,80}\|\s*(sh|bash))/i
| groupBy([ComputerName, ParentBaseFileName, ImageFileName, CommandLine], function=count(aid, as=hits))
| sort(hits, order=desc)
Q5 · Splunk descendant process burst (post-exploit activity)
CONF MEDFP MEDCOST MED

Looks for: a Splunk service process suddenly parenting many distinct child binaries in a short window — discovery / hands-on-keyboard after the initial shell. FP: busy scripted-input hosts; raise the distinct_children threshold and exclude sanctioned wrapper paths to tune.

// HUNT: Burst of distinct child processes under a Splunk service parent (CVE-2026-20253 post-exploit)
// MITRE: T1059, T1190 | CONF: medium  FP: medium  COST: medium | REQUIRES: ProcessRollup2 on Splunk hosts
// FALSE POSITIVES: hosts with heavy legitimate scripted inputs / alert actions
// TUNING: adjust the distinct_children threshold (default >= 5) to your baseline
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(splunkd|postgres|splunk-.*)$/i
| groupBy([ComputerName, ParentBaseFileName], function=([count(ImageFileName, distinct=true, as=distinct_children), collect([ImageFileName])]))
| distinct_children >= 5
| sort(distinct_children, order=desc)

Field-name note: queries use standard Falcon fields (#event_simpleName, ParentBaseFileName, ImageFileName, CommandLine, TargetFileName, ContextBaseFileName, RemoteAddressIP4, RemotePort, ComputerName, aid). Validate NewScriptWritten availability in your tenant — if absent, Q2 still fires on PE writes via NewExecutableWritten/PeFileWritten plus the file-extension filter.

09

Custom IOA Recommendations

IOA namePatternExclusionsDeployment
Splunk-Service-Spawns-ShellParent splunkd/postgres/splunk-* → child shell or interpreter (process-create IOA)Sanctioned scripted-input wrappers, alert-action script pathsHost group: Splunk servers; Action: Detect (then Prevent after baselining)
Splunk-Dir-Script-DropFile-write of .sh/.py/.ps1/.exe under Splunk install dir by Splunk-owned procUpdater (msiexec/splunkd upgrade), change windowsHost group: Splunk servers; Action: Detect
Splunk-Host-RevShell-CmdLineCommand-line reverse-shell tokens (/dev/tcp, nc -e, IEX+TcpClient) under a Splunk parentNone typical — high fidelityHost group: Splunk servers; Action: Prevent

Deploy IOAs scoped to a Splunk-servers host group so the parent-image constraints stay tight and FP stays low. Start in Detect, promote the high-fidelity reverse-shell IOA to Prevent first.

10

Machine-Readable IOC Appendix

No atomic IOCs published as of 2026-06-20. CSV rows use REPLACE_WITH_… placeholders — do not import until populated from your own incident data or a vetted feed. The behavioral-signature and audit blocks are ready to use as-is.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
ipv4,REPLACE_WITH_C2_IP,detect,high,2026-12-20,Splunk CVE-2026-20253 C2 (fill from incident),campaign:CVE-2026-20253
sha256,REPLACE_WITH_SHA256,prevent,critical,2026-12-20,Splunk CVE-2026-20253 dropped payload,campaign:CVE-2026-20253
domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-09-20,Splunk CVE-2026-20253 C2 domain,campaign:CVE-2026-20253
Behavioral Signaturesship as-is
BEHAVIOR: Splunk service proc (splunkd|postgres|splunk-*) parents shell/interpreter   -> detect (Q1,Q4)
BEHAVIOR: New .sh|.py|.ps1|.exe written under /opt/splunk or C:\Program Files\Splunk  -> detect (Q2)
BEHAVIOR: Outbound conn from Splunk host shell/interpreter to non-baseline dest       -> hunt   (Q3)
BEHAVIOR: Reverse-shell cmdline (/dev/tcp, nc -e, IEX+TcpClient) under Splunk parent   -> prevent (Q4)
BEHAVIOR: Unauth POST to Splunk mgmt/sidecar endpoint from unexpected client IP        -> hunt   (Q5,sect 7)
Native Splunk / Host HuntsSPL + auditd
SPL  index=_internal sourcetype=splunkd_access method=POST | stats count by clientip,uri_path,status
LIN  ausearch -m EXECVE | grep -E "ppid.*(splunkd|postgres)" | grep -E "/bin/sh|bash|python"
LIN  find /opt/splunk -newer /opt/splunk/etc/splunk.version -type f -perm -u+x 2>/dev/null
WIN  Sysmon EID 1 ParentImage="C:\Program Files\Splunk\*" Image="*\\(cmd|powershell|wscript).exe"
WIN  Sysmon EID 11 TargetFilename="C:\Program Files\Splunk\*" + ext in (.ps1,.bat,.vbs,.exe)
Patch & Exposure Auditremediation
FIXED: Splunk Enterprise 10.0.7+ (from 10.0.0-10.0.6) | 10.2.4+ (from 10.2.0-10.2.3)
AUDIT: /opt/splunk/bin/splunk version    (Linux)
AUDIT: "C:\Program Files\Splunk\bin\splunk.exe" version    (Windows)
EXPOSE: restrict mgmt 8089 + PostgreSQL sidecar port to admin subnets only (firewall/segmentation)
KEV: CISA added 2026-06-18, FCEB remediation deadline 2026-06-21
11

Detection Validation Gates

GateCheckPass criteria
Telemetry readyFalcon sensor reporting ProcessRollup2, file-write, NetworkConnect on every Splunk hostAll Splunk indexers/search heads visible in last 24h
Benign baselineRun Q1/Q2 over 7–14 days; catalog legitimate scripted-input wrappers, alert-action scripts, upgrade writesDocumented allowlist before enabling alerts
Positive testIn a lab Splunk host, spawn a benign /bin/sh -c id as a child of splunkd; drop a test .sh under /opt/splunkQ1 and Q2 both fire
Egress baselineEstablish sanctioned destinations/ports for Splunk hosts before enabling Q3FP rate acceptable for alerting
PromotionHigh-fidelity reverse-shell IOA (Q4 pattern) → Prevent; Q1 → Detect then PreventSigned off by detection owner
12

Hardening — Tiered

Immediate (0–48h · KEV deadline 2026-06-21)
  • Patch all Splunk Enterprise to 10.0.7 / 10.2.4 or later. This is the only complete fix.
  • Restrict network exposure of the Splunk management port (8089) and the PostgreSQL sidecar port to admin subnets only; remove any internet exposure immediately.
  • Hunt now with Q1–Q5 over the last 14 days on every Splunk host — assume-breach for any internet-reachable unpatched instance.
Near term (this week)
  • Deploy the §9 custom IOAs scoped to a Splunk-servers host group (Detect, then Prevent for the reverse-shell IOA).
  • Enable / verify host file-integrity and OS process auditing (auditd / Sysmon) on Splunk hosts so non-PE script drops are captured.
  • Rotate any credentials/secrets stored in Splunk configs on hosts that were internet-reachable while unpatched (MITRE M1027 / M1041).
Strategic
  • Run Splunk service accounts with least privilege; restrict the service user's shell and write permissions outside required paths (M1026).
  • Place Splunk infrastructure behind segmentation so management/sidecar ports are never reachable from untrusted networks (M1030).
  • Add Splunk version/exposure to the vulnerability-management cadence; alert on edge-app KEV additions automatically.
13

Deployable Playbooks

1 · Confirm version on every Splunk host

# Linux
/opt/splunk/bin/splunk version
# Windows (PowerShell)
& "C:\Program Files\Splunk\bin\splunk.exe" version
# Flag any host reporting 10.0.0-10.0.6 or 10.2.0-10.2.3 as VULNERABLE

2 · Restrict mgmt + sidecar exposure (interim, until patched)

# Linux host firewall example (allow only admin subnet to 8089)
iptables -A INPUT -p tcp --dport 8089 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 8089 -j DROP
# Confirm the PostgreSQL sidecar port (per your build) is NOT exposed beyond localhost/admin subnet
ss -ltnp | grep -E "postgres|splunkd"

3 · Sweep install dir for recently-written executables/scripts

# Linux: files under Splunk dir newer than the version marker, with exec bit
find /opt/splunk -type f -perm -u+x -newer /opt/splunk/etc/splunk.version 2>/dev/null
# Windows (PowerShell): scripts/exe written in the last 14 days under the install path
Get-ChildItem "C:\Program Files\Splunk" -Recurse -Include *.ps1,*.bat,*.vbs,*.exe -ErrorAction SilentlyContinue |
  Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-14) }

Treat any unexpected hit as potential compromise: isolate the host, preserve /opt/splunk (or the Windows install dir) and host process/network logs, and run the §14 containment runbook.

14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the affected Splunk host via Falcon RTR / host firewall; block egress to suspect destinationsSOCContainment timestamp, host ID
TriagePull Splunk process tree (Q1/Q4 hits), file writes under install dir (Q2), egress (Q3); identify the dropped script + child commandsIRProcess tree, file list, CommandLines
EradicateRemove dropped scripts/binaries; patch to 10.0.7 / 10.2.4+; rebuild if hands-on-keyboard activity confirmedPlatform + IRPatch confirmation, removed artifact hashes
CredentialsRotate Splunk admin tokens, service-account creds, and any secrets stored in Splunk configs on the hostIAMRotation records
Recover & monitorRestore service, verify patched version, keep Q1–Q5 + IOAs enabled, watch for re-exploitationSOC + PlatformPost-recovery hunt results
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190Unauth request to sidecar endpointQ5 (post-exploit) · §7 nativePartial
T1505.003Script written under Splunk dirQ2Splunk-Dir-Script-DropGood
T1059Splunk proc spawns shell/interpreterQ1, Q4, Q5Splunk-Service-Spawns-ShellGood
T1071C2 / reverse shell egressQ3, Q4Splunk-Host-RevShell-CmdLineGood
Initial network entrySidecar POST visibility in FalconGAP

Coverage gap: the initial unauthenticated HTTP request to the PostgreSQL sidecar endpoint is not directly visible in standard Falcon process telemetry — it surfaces in Splunk's own access logs (§7) and at the network/NDR layer. Pair this pack with Splunk _internal log monitoring and firewall/NDR visibility on the sidecar port to close it.

Validation: all five CQL queries depend on Falcon sensor coverage of Splunk hosts. Confirm telemetry per §11 before promoting any query to alert, and baseline scripted-input / upgrade activity to keep FP low.

16

Hunt Summary Ticket

TITLE      : Splunk Enterprise Unauthenticated RCE — CVE-2026-20253 (PostgreSQL sidecar)
SEVERITY   : Critical (CVSS 9.8, CWE-306) — EXPLOITED ITW, CISA KEV (added 2026-06-18)
SCOPE      : Splunk Enterprise 10.0.0-10.0.6 and 10.2.0-10.2.3 (all roles w/ bundled PostgreSQL sidecar)
HYPOTHESIS : Unauth sidecar file-write -> lo_export script drop -> Splunk proc spawns shell -> C2/pivot
QUERIES    : Q1 svc->shell | Q2 dir script-drop | Q3 host egress | Q4 revshell cmdline | Q5 child burst
DO FIRST   : Patch 10.0.7/10.2.4+ (KEV deadline 2026-06-21); restrict mgmt 8089 + sidecar port; run Q1-Q5 14d
FINDINGS   : <fill from hunt>
GAPS       : Initial sidecar POST not in Falcon process telemetry — cover via Splunk _internal + NDR
ACTIONS    : Patch, deploy IOAs (sect 9), rotate Splunk creds on exposed hosts, enable file/process auditing
OWNER      : HuntPack
VERSION    : v0.1 · 2026-06-20
17

Changelog

v0.12026-06-20Initial HuntPack for CVE-2026-20253. 5 CQL hunt queries (Splunk service→shell, install-dir script drop, host egress, reverse-shell command line, child-process burst), native Splunk/host hunts, custom IOA recommendations, tiered hardening, playbooks, and containment runbook. Behavioral signatures only — no atomic IOCs published as of 2026-06-20.
18

References

TierSourceUsed forAccess date
AuthoritativeNVD — CVE-2026-20253CVSS, CWE, affected/fixed versions2026-06-20
AuthoritativeCISA KEV Catalog (added 2026-06-18)ITW confirmation, FCEB deadline2026-06-20
VendorSplunk Security Advisory — CVE-2026-20253Fixed versions, remediation2026-06-20
ResearchwatchTowr Labs — write-up & PoC (2026-06-12)Root cause, lo_export → RCE chain2026-06-20
SecondarySOCRadar — CVE-2026-20253 analysisTimeline, detection guidance2026-06-20
Vendor docsSplunk Docs — install paths (Linux/Windows)Install-dir paths for file/process hunts2026-06-20