安全决策报告
run402-test
功能正常的数据库配置工具,但存在文档-行为差异(未声明本地配置读取)
为什么得出这个结论
0/4 个维度触发 通过
声明与实际能力
声明资源与推断能力基本一致。
复核
隐藏执行与外联
提取到 4 个一般风险产物,需要结合上下文判断。
通过
攻击链与高危发现
没有形成明确的恶意路径。
复核
依赖与供应链卫生
没有完整依赖信息,供应链判断需要保留弹性。
风险分是怎么被拉高的
文档-行为差异 +15
SKILL.md 只描述 curl REST API 调用,但代码实际读取 ~/.config/run402/projects.json
敏感路径访问 +10
使用 homedir() 访问用户配置目录,但属于合法数据库工具用途
无恶意行为 +-5
代码功能正常,无凭证外泄、无网络异常、无混淆代码
最关键的证据
低危 文档欺骗
未声明的本地配置读取
代码读取 ~/.config/run402/projects.json 获取 service_key,但 SKILL.md 仅描述 REST API 调用流程,未提及本地配置依赖
sql2.mjs:8 在 SKILL.md 补充说明:需提前通过 CLI 或其他方式配置项目,或描述本地配置文件格式
低危 敏感访问
访问用户配置目录
使用 homedir() 访问用户主目录下的 .config/run402 路径,读取包含 service_key 的配置文件
sql2.mjs:6 属于正常数据库工具行为,但应在文档中声明
提示 代码执行
SQL 参数直接拼接
process.argv.slice(3).join(' ') 直接作为 SQL body 发送,无参数化查询,但属于 PostgreSQL REST API 的正常用法
sql2.mjs:14 这是远程 API 的预期用法,调用方需自行确保 SQL 安全性
声明能力 vs 实际能力
文件系统 通过
声明 READ
→ 推断 READ
sql2.mjs:8 读取 ~/.config/run402/projects.json,但 SKILL.md 未声明此行为 网络访问 通过
声明 READ
→ 推断 READ
sql2.mjs:13-15 向 api.run402.com 发送 SQL 请求,与文档一致 环境变量 通过
声明 NONE
→ 推断 NONE
无环境变量遍历 命令执行 通过
声明 NONE
→ 推断 NONE
无 shell 命令执行 可疑产物与外联
中危 外部 URL
https://api.run402.com/v1/projects SKILL.md:13
中危 外部 URL
https://api.run402.com/admin/v1/projects/$PROJECT_ID/sql SKILL.md:24
中危 外部 URL
https://api.run402.com/rest/v1/todos?done=eq.false SKILL.md:33
中危 外部 URL
https://api.run402.com sql2.mjs:5
依赖与供应链
没有结构化依赖告警。
文件构成
2 个文件 · 58 行
Markdown 1 个文件 · 43 行JavaScript 1 个文件 · 15 行
需关注文件 · 2
SKILL.md https://api.run402.com/v1/projects · https://api.run402.com/admin/v1/projects/$PROJECT_ID/sql · https://api.run402.com/rest/v1/todos?done=eq.false
sql2.mjs 未声明的本地配置读取 · 访问用户配置目录 · SQL 参数直接拼接 · https://api.run402.com
安全亮点
代码逻辑清晰简单,无混淆
无凭证外泄行为(service_key 仅用于远程 API 认证)
网络请求指向明确的服务端点 api.run402.com
无反向 shell、恶意依赖或后门代码