安全决策报告
coppa-check
技能代码本身无明显恶意,但存在影子行为(--non-interactive 声称离线却实际联网获取规则)和文件系统越权写入(--output 可写任意路径)。凭证收集仅限于声明的登录流程,API端点硬编码防重定向,但文档-行为存在不一致。
最直接的威胁证据
为什么得出这个结论
1/4 个维度触发 阻止
声明与实际能力
发现 1 项声明之外的能力或越权行为。
复核
隐藏执行与外联
提取到 4 个一般风险产物,需要结合上下文判断。
通过
攻击链与高危发现
没有形成明确的恶意路径。
复核
依赖与供应链卫生
没有完整依赖信息,供应链判断需要保留弹性。
风险分是怎么被拉高的
影子行为:文档声明离线预览,实际联网获取规则 +20
SKILL.md称--non-interactive为完全离线预览,但代码第361行 fetch_rules() 在非交互模式下仍先调用网络
文件系统越权写入 +15
声明仅写入~/.config/compliancehub,但--output允许写任意路径
最关键的证据
中危 文档欺骗
--non-interactive 模式影子联网行为
SKILL.md声明--non-interactive为'完全离线预览',但代码在非交互模式下仍先调用 fetch_rules() 联网获取规则(第361行),与文档声明的离线行为不符。这是典型的文档-行为差异,属于影子功能。
scripts/coppa-check.py:361 修改代码逻辑,在--non-interactive模式下跳过fetch_rules()调用,直接使用本地CHECK_ITEMS
低危 权限提升
--output 参数超出声明的文件系统权限
声明仅写入~/.config/compliancehub,但--output允许写入任意用户指定路径。虽然这可能是合法的报告导出需求,但超出了SKILL.md声明的范围。
scripts/coppa-check.py:407 限制--output仅允许写入~/.config/compliancehub目录,或在SKILL.md中明确声明可写任意路径
声明能力 vs 实际能力
网络访问 通过
声明 READ
→ 推断 READ
SKILL.md声明仅访问compliancehub.cn;代码所有端点均硬编码为此域名 文件系统 阻止
声明 WRITE(~/.config/compliancehub)
→ 推断 WRITE(任意路径)
scripts/coppa-check.py:407 args.output可写任意路径,超出声明范围 环境变量 通过
声明 READ(COMPLIANCEHUB_API_KEY)
→ 推断 READ
代码仅读取COMPLIANCEHUB_API_KEY 命令执行 通过
声明 NONE
→ 推断 NONE
代码仅用stdlib,无subprocess等shell调用 可疑产物与外联
中危 外部 URL
https://compliancehub.cn SKILL.md:21
中危 外部 URL
https://compliancehub.cn/account.html?skill=coppa-check SKILL.md:71
中危 外部 URL
https://clawhub.ai/user/wwumit skill-card.md:9
中危 外部 URL
https://clawhub.ai/wwumit/skills/coppa-check skill-card.md:39
依赖与供应链
没有结构化依赖告警。
文件构成
5 个文件 · 660 行
Python 1 个文件 · 457 行Markdown 2 个文件 · 157 行JSON 2 个文件 · 46 行
需关注文件 · 3
scripts/coppa-check.py --non-interactive 模式影子联网行为 · --output 参数超出声明的文件系统权限
SKILL.md https://compliancehub.cn · https://compliancehub.cn/account.html?skill=coppa-check
skill-card.md https://clawhub.ai/user/wwumit · https://clawhub.ai/wwumit/skills/coppa-check
其他文件 · package.json · _meta.json
安全亮点
无第三方依赖,仅用Python stdlib(urllib, json, ssl, getpass)
API_BASE硬编码防环境变量注入,注释明确说明安全理由
API Key文件权限设为0600,存储在skill目录外
代码无混淆、无base64编码执行
无凭证收割、无环境变量遍历
无远程脚本执行、无subprocess调用
网络请求使用HTTPS + Bearer token