-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Add vulnerability detection module for CVE-2026-20253 (Splunk Enterprise unauthenticated auth-bypass) #1665
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
NSK-394
wants to merge
6
commits into
OWASP:master
Choose a base branch
from
NSK-394:add-splunk-cve-2026-20253
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+86
−0
Open
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
b183d7f
Add vulnerability detection module for CVE-2026-20253 (Splunk unauthe…
NSK-394 a59df3d
Add docs/Modules.md entry for splunk_cve_2026_20253_vuln module
NSK-394 d591b7c
Fix module to be genuinely non-destructive: detect auth-bypass via
NSK-394 e67b829
Use {user_agent} placeholder instead of hardcoded User-Agent value
NSK-394 194e327
Add quotes around {user_agent} placeholder for consistency with exist…
NSK-394 4a13718
Merge branch 'master' into add-splunk-cve-2026-20253
securestep9 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,85 @@ | ||
| info: | ||
|
NSK-394 marked this conversation as resolved.
|
||
| name: splunk_cve_2026_20253_vuln | ||
| author: NSK-394 | ||
| severity: 9.8 | ||
| description: > | ||
| CVE-2026-20253 (CVSS 9.8, CISA KEV) is a missing-authentication flaw | ||
| (CWE-306) in Splunk Enterprise's bundled PostgreSQL sidecar service, | ||
| reachable through an unauthenticated raw-passthrough proxy path on | ||
| Splunk Web (default port 8000). Splunk Enterprise 10.0.0-10.0.6 and | ||
| 10.2.0-10.2.3 accept POST /en-US/splunkd/__raw/v1/postgres/recovery/backup | ||
| with ANY syntactically-valid HTTP Basic Authorization header -- including | ||
| a blank ":" credential or entirely fabricated ones -- because the | ||
| credential value itself is never checked and the request is allowed to | ||
| proceed past authentication. Patched versions (10.0.7, 10.2.4, 10.4.0+) | ||
| reject the identical request with 401 "Authorization header must use | ||
| Splunk token" before ever inspecting the body, having dropped Basic-auth | ||
| support on this endpoint entirely. This module detects that | ||
| unauthenticated auth-bypass primitive -- the CVE's actual root cause -- | ||
| non-destructively: it sends a blank-Basic-auth POST whose JSON body | ||
| deliberately omits the required "backupFile" field. On vulnerable | ||
| instances, auth is bypassed first and the request then fails input | ||
| validation with 400 "backupFile is a required field" -- no backup job | ||
| is ever created. On patched instances, the same request is rejected at | ||
| the auth layer with 401 before validation runs. An earlier version of | ||
| this module distinguished the two by checking for a real 200 response | ||
| with a "BackupPending" job-creation body; that was corrected after | ||
| review because it meant every scan created a real, tracked backup job | ||
| on the target, contradicting a non-destructive design. Both the old and | ||
| new signatures were confirmed live and repeatable against the official | ||
| splunk/splunk:10.0.6 (vulnerable) and splunk/splunk:10.0.7 (patched) | ||
| Docker images. This module does NOT attempt or verify the full RCE | ||
| chain some public writeups describe: that chain additionally requires | ||
| standing up an attacker-controlled external PostgreSQL server to inject | ||
| a malicious connection string via this same endpoint, then waiting on | ||
| Splunk's own task scheduler to execute a file planted through a | ||
| lo_export-based restore. This module confirms the input-validation/auth | ||
| flaw that chain depends on, not code execution itself. | ||
| reference: | ||
| - https://nvd.nist.gov/vuln/detail/CVE-2026-20253 | ||
| - https://advisory.splunk.com/advisories/SVD-2026-0603 | ||
| - https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-20253 | ||
| profiles: | ||
| - vuln | ||
| - http | ||
| - critical_severity | ||
| - cve | ||
| - cve2026 | ||
| - splunk | ||
| - cisa_kev | ||
| - auth_bypass | ||
|
|
||
| payloads: | ||
|
NSK-394 marked this conversation as resolved.
|
||
| - library: http | ||
| steps: | ||
| - method: post | ||
| timeout: 5 | ||
| headers: | ||
| User-Agent: "{user_agent}" | ||
| Content-Type: application/json | ||
| Authorization: "Basic Og==" | ||
|
NSK-394 marked this conversation as resolved.
|
||
| ssl: false | ||
| data: '{{"database": "postgres"}}' | ||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
| url: | ||
| nettacker_fuzzer: | ||
| input_format: "{{schema}}://{target}:{{ports}}/en-US/splunkd/__raw/v1/postgres/recovery/backup" | ||
| prefix: "" | ||
| suffix: "" | ||
| interceptors: | ||
| data: | ||
| schema: | ||
| - "http" | ||
| - "https" | ||
| ports: | ||
| - 8000 # Default Splunk Web port | ||
| - 80 | ||
| - 443 | ||
|
NSK-394 marked this conversation as resolved.
|
||
| response: | ||
| condition_type: and | ||
| conditions: | ||
| status_code: | ||
| regex: "400" | ||
| reverse: false | ||
| content: | ||
| regex: "backupFile is a required field" | ||
| reverse: false | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.