dataagent/core/flex/nodes/executor.py:948-991 的 _check_bash_whitelist 只在 runtime.bash_tool_whitelist 非 None 时生效。flex_runtime_from_config.py:266-269 中 bash_tool_whitelist 默认 None(除非 YAML 配 BASH_TOOL_WHITELIST)。
dataagent/core/flex/nodes/executor.py:948-991
_check_bash_whitelist
runtime.bash_tool_whitelist
flex_runtime_from_config.py:266-269
bash_tool_whitelist
BASH_TOOL_WHITELIST
结果:主 Agent 可直接调用 bash(command="sqlite3 /path/to/db 'SELECT * FROM secrets'"),完全绕过 NL2SQL 与 schema 抽象。
bash(command="sqlite3 /path/to/db 'SELECT * FROM secrets'")
任选其一或组合:
sqlite3
mysql
psql
BASH_TOOL_WHITELIST: forbidden_commands: - sqlite3 - mysql - psql - sqlcmd
bash 工具描述强化:在 bash 工具描述里强化"数据库查询必须用 nl2sql_sub_agent_tool,禁止直接使用 sqlite3/mysql/psql"。
运行时拦截:在 _check_bash_whitelist 默认开启模式下,检测 bash 命令含 sqlite3|mysql|psql 时拒绝并提示用 nl2sql_sub_agent_tool。
sqlite3|mysql|psql
dataagent/core/flex/flex_runtime_from_config.py:266-269
dataagent/core/flex/examples/nl2sql_flex_e2e_subagent.yaml
dataagent/actions/tools/local_tool/tools.py
major(安全风险 + 架构边界破坏)
0623
c5c899a4196717d1eb5944a9736f766310655ef7
现象
dataagent/core/flex/nodes/executor.py:948-991的_check_bash_whitelist只在runtime.bash_tool_whitelist非 None 时生效。flex_runtime_from_config.py:266-269中bash_tool_whitelist默认 None(除非 YAML 配BASH_TOOL_WHITELIST)。结果:主 Agent 可直接调用
bash(command="sqlite3 /path/to/db 'SELECT * FROM secrets'"),完全绕过 NL2SQL 与 schema 抽象。影响
修复方案
任选其一或组合:
BASH_TOOL_WHITELIST,排除sqlite3/mysql/psql等 DB CLI:BASH_TOOL_WHITELIST: forbidden_commands: - sqlite3 - mysql - psql - sqlcmdbash 工具描述强化:在 bash 工具描述里强化"数据库查询必须用 nl2sql_sub_agent_tool,禁止直接使用 sqlite3/mysql/psql"。
运行时拦截:在
_check_bash_whitelist默认开启模式下,检测 bash 命令含sqlite3|mysql|psql时拒绝并提示用 nl2sql_sub_agent_tool。涉及文件
dataagent/core/flex/nodes/executor.py:948-991(白名单逻辑)dataagent/core/flex/flex_runtime_from_config.py:266-269(默认 None)dataagent/core/flex/examples/nl2sql_flex_e2e_subagent.yaml(示例 YAML 加默认白名单)dataagent/actions/tools/local_tool/tools.py(bash 工具描述)关联
严重性
major(安全风险 + 架构边界破坏)
环境
0623c5c899a4196717d1eb5944a9736f766310655ef7