TheConfigPig

Blinding the Watchman: Why an Unauthenticated RCE on Splunk Is a Detection-Integrity Emergency

Here is the move that should change how you triage this one. An attacker who reaches an unpatched Splunk Enterprise box can, before doing anything else, start deleting the evidence. CVE-2026-20253 is described by NVD as a flaw where “an unauthenticated user could create or truncate arbitrary files through a PostgreSQL sidecar service endpoint.” Truncate arbitrary files. On a SIEM, “arbitrary files” includes the record of what just happened — and what happens next.

That is why this is not a routine 9.8. It is a detection-integrity emergency. The fix matters and you should ship it, but the harder problem is the one the score doesn’t capture: the system whose entire job is to tell you when you’ve been hit can now be made to lie.

The score measures the bug, not the asset

A CVSS 3.1 base score of 9.8 on a print server and a 9.8 on your SIEM are the same number describing two completely different incidents. CVSS measures the properties of the vulnerability — unauthenticated, network-reachable, full impact to confidentiality, integrity, and availability. It does not, and was never meant to, measure what the compromised box is in your environment.

A popped print server is a beachhead. A popped SIEM is a beachhead plus a pair of scissors aimed at your incident timeline. Both score 9.8. Only one of them can rewrite the record of how the attacker got in, where they went, and whether they’re still there. Triaging them identically — same queue, same SLA, same “critical, patch this sprint” treatment — is a category error. The number tells you the bug is bad. It can’t tell you that this particular bug landed on the one asset you rely on to evaluate every other bug.

The mechanism, kept short

You don’t need the recipe; you need the shape of the capability. The root cause is CWE-306, missing authentication for a critical function: a PostgreSQL sidecar endpoint that should have required credentials didn’t. From there, an unauthenticated request can create or truncate files on the host. The path from “write files” to “run code” — abusing PostgreSQL’s lo_export to drop a script the host later executes — is detailed in vendor write-ups from NetSPI, Orca, Resecurity, and watchTowr; treat that chain as reported rather than primary-confirmed, and a public proof-of-concept reportedly followed within days of disclosure.

The point of this beat is not the elegance of the chain. It’s the asymmetry: the bar to entry is the floor (no credentials, network access), and the payoff is the ceiling (write anywhere, then run anything). And on a SIEM, the most valuable thing “write anywhere” reaches isn’t a reverse shell. It’s the logs.

Every asset has a watcher. The SIEM’s watcher is the SIEM.

This is the part that earns the alarm. Your endpoints are watched by the EDR. The EDR’s telemetry is watched by the SIEM. Detection works because there is always a layer above the thing being attacked, looking down.

So what watches the SIEM? In most shops, the honest answer is: the SIEM. It ingests its own audit logs. It runs the correlation rules that would fire on tampering. It holds the dashboards an analyst would check to notice something is wrong. When the top of that stack is the thing that’s compromised, the only system positioned to detect the compromise is the compromised one. An attacker with file-write on that box isn’t just another foothold in your estate — they’re sitting at the exact vantage point your detection program treats as ground truth. (This watcher-is-itself argument is an inference from standard monitoring architecture, not a vendor claim — but it’s the inference that makes this CVE different from every other 9.8.) Splunk’s own advisory frames the impact around an attacker reaching security data; the SVD-2026-0603 advisory describes the core defect as the same unauthenticated file create-or-truncate primitive, which is precisely what makes the security data reachable. (I’m not quoting the “access, tamper with, or delete” wording verbatim — I couldn’t confirm the exact sentence on the page — so take that as the advisory’s framing, not a hard quote.)

So what you actually do — and the order matters

Patch. SVD-2026-0603 gives fixed builds: 10.2.0–10.2.3 upgrade to 10.2.4, and 10.0.0–10.0.6 upgrade to 10.0.7. Splunk Enterprise 9.4 and earlier are not affected — don’t burn a maintenance window chasing a fix on a version that never had the bug, and don’t trust any “9.x patch” advice you see floating around, because there isn’t one. The 10.4.0 branch is likewise outside the affected range.

But patching is step two, not step one, on any box that might already have been walked through. A patch closes the door; it does not tell you whether someone already came in and tidied up after themselves. The order of operations that actually protects you:

  • Assume the watchman’s testimony is suspect. If the box was reachable and unpatched during the exposure window, its local logs are evidence of nothing until proven otherwise. Absence of alerts is not absence of compromise — it may be the compromise.
  • Reconstruct ground truth from data the attacker on that box couldn’t reach. Forwarded copies that left the host before it was touched, upstream telemetry (network flow, firewall, identity provider, cloud audit logs), and immutable or write-once storage. If your Splunk logs only live on Splunk, that’s the lesson, separate from this CVE.
  • Don’t clear the compromised system using the compromised system. You cannot use a box that may have been owned to certify that the box is clean. That investigation runs on the out-of-band copies, not on the suspect’s own diary.

Reality check, honestly

Strip the hype before it strips your judgment. Exploitation here is limitedthe advisory notes Splunk’s PSIRT became aware of limited exploitation, not exploitation at scale. The CVE was published June 10, 2026 and added to CISA’s KEV on June 18 with an action-due date of June 21 — so the bug is about ten days old and the KEV coverage is only a couple of days old; what’s fresh is the attention, not the vulnerability. And that three-day KEV window is aggressive but not unheard of: 2026 has already run the same three-day window on Check Point CVE-2026-50751 (KEV-added June 8, due June 11) and Fortinet CVE-2026-35616 (KEV-added April 6, due April 9), both confirmed via NVD’s CISA-KEV fields. Short fuse, established pattern.

ClaimRungBasis
Unauthenticated create/truncate of arbitrary files via a PostgreSQL sidecar endpointObservedNVD description
CVSS 9.8, CWE-306, published 2026-06-10ObservedNVD
Fixed in 10.2.4 and 10.0.7; 9.4 and earlier not affectedObservedSplunk SVD-2026-0603
KEV add 2026-06-18, due 2026-06-21ObservedNVD KEV fields
Limited exploitation observed by PSIRTObservedSplunk advisory
lo_export→RCE chain; public PoC within daysReportedNetSPI, Orca, Resecurity, watchTowr
Three-day KEV windows on Check Point CVE-2026-50751 and Fortinet CVE-2026-35616ObservedNVD CISA-KEV fields (cisaExploitAdd / cisaActionDue)
“Access, tamper with, or delete security data” exact wordingUnprovenCould not confirm verbatim on advisory page
A SIEM’s effective watcher is itselfInferredStandard monitoring architecture

The takeaway isn’t “patch fast” — you already know that. It’s that this CVE is a stress test of an assumption most detection programs never examine: that the SIEM’s own account of events is trustworthy. For the duration of this exposure, it isn’t. Build your response on data the attacker couldn’t touch, treat the box’s own logs as a hypothesis rather than a record, and use the incident to ask the uncomfortable question while it’s cheap — when the watchman gets owned, what watches the watchman? If your answer is “the watchman,” you don’t have a detection gap. You have a single point of failure wearing a detection program’s clothes.

Sources