安全决策报告

run402-test

功能正常的数据库配置工具,但存在文档-行为差异(未声明本地配置读取)

安装决策优先 来源: ClawHub 扫描时间: 2026/4/6
文件 2
IOC 4
越权项 0
发现 3

为什么得出这个结论

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 Markdown · 43 行
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 JavaScript · 15 行
未声明的本地配置读取 · 访问用户配置目录 · SQL 参数直接拼接 · https://api.run402.com

安全亮点

代码逻辑清晰简单,无混淆
无凭证外泄行为(service_key 仅用于远程 API 认证)
网络请求指向明确的服务端点 api.run402.com
无反向 shell、恶意依赖或后门代码