可疑 — 风险评分 55/100
上次扫描:3 小时前 重新扫描
55 /100
baidu-netdisk-skill
百度网盘文件管理 for OpenClaw - OAuth 2.0 一键授权,支持列表/搜索/下载/上传
硬编码加密密钥导致声称的 AES-256 加密形同虚设,文档-行为存在欺骗,依赖无版本锁定存在供应链风险,但无主动恶意行为证据。
技能名称baidu-netdisk-skill
分析耗时81.8s
引擎pi
ClawHub Baidu Netdisk Skill v1.0.10 by niukesi
📥 253 📦 1
ClawHub 判定 可疑 env_credential_accessllm_suspiciouspotential_exfiltration
谨慎使用
1. 立即将 ENCRYPTION_KEY 替换为用户提供的密钥或从密钥管理服务获取;2. 在 SKILL.md 中完整声明 filesystem 路径访问和 env 读取;3. 锁定所有依赖版本并定期审查已知漏洞;4. 移除 README 中的付费订阅推广链接。

安全发现 6 项

严重性 安全发现 位置
高危
硬编码加密密钥使 AES-256 加密承诺失效 文档欺骗
auth.js:18 和 baidu-api.js:20 使用固定字符串 'baidu-netdisk-skill-secret-2026' 经 SHA-256 派生 ENCRYPTION_KEY,该密钥随源码公开。所有用户 Token 使用相同密钥加密,攻击者获取源码后可直接解密全部已存储 Token。SKILL.md 和 SECURITY.md 均未披露此设计,声称'Token 本地加密存储(AES-256)'但加密密钥已知使该保护名存实亡。
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || crypto.createHash('sha256').update('baidu-netdisk-skill-secret-2026').digest('hex');
→ 将 ENCRYPTION_KEY 改为必须由用户提供或从系统密钥管理服务获取,绝不能使用内置默认值。
src/auth.js:18
高危
内置加密密钥使已加密 Token 可被批量解密 凭证窃取
由于 ENCRYPTION_KEY 硬编码且公开,用户存储的 accessToken 和 refreshToken 虽经 AES 加密但密钥已知。攻击者只需读取配置文件并用同一密钥解密即可获得明文 Token,影响所有用户。
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || crypto.createHash('sha256').update('baidu-netdisk-skill-secret-2026').digest('hex');
→ 使用用户提供的主密码派生密钥(PBKDF2),或集成系统密钥链(如 keytar),禁止内置默认密钥。
src/baidu-api.js:20
中危
npm 依赖无版本锁定 供应链
package.json 中 axios ^1.6.0, crypto-js ^4.2.0, commander ^11.1.0, conf ^10.2.0 等依赖使用 caret 范围,未锁定具体版本。npm install 时可能安装带有安全漏洞的更新版本。
"axios": "^1.6.0",
"crypto-js": "^4.2.0",
"commander": "^11.1.0"
→ 使用 npm ci 或将 package.json 改为精确版本(~ 或无修饰符),并定期运行 npm audit 扫描已知漏洞。
package.json:38
中危
skill.json 声明 tools: ['exec'] 但代码无任何 exec 调用 文档欺骗
skill.json 的 tools 字段声明使用 'exec' 工具,但实际代码中无 child_process.exec/spawn/fork 等任何 shell 执行调用。声明的工具与实际代码能力不匹配,可能误导 AI Agent 授予不必要的 shell 执行权限。
"tools": ["exec"]
→ 将 tools 字段改为描述实际使用的资源类型,如 ['filesystem:READ', 'network:READ'] 或移除 tools 字段。
skill.json:18
中危
未声明的敏感文件路径访问 权限提升
代码通过 conf 库访问 ~/.config/configstore/baidu-netdisk-skill.json 存储配置和加密 Token,但 skill.json 和 SKILL.md 均未声明 filesystem 权限及此具体路径。用户在授权时无法了解该路径将被访问。
const config = new Conf({ projectName: 'baidu-netdisk-skill' });
→ 在 skill.json security.fileAccess 字段中明确列出 ~/.config/configstore/ 路径,并在 SKILL.md 安全说明中告知用户。
src/auth.js:35
低危
README.md 包含付费订阅推广内容 文档欺骗
README.md 末尾包含'首发优惠'、'前100名用户5折'、'年付用户¥999/年'等付费推广内容,与工具类开源项目性质不符,可能是诱导付费的营销手段。
前 100 名用户:个人版首月 5 折(¥49.5)
→ 如为开源工具,移除付费推广内容;如为付费产品,在 SKILL.md 中明确标注。
README.md:337
资源类型声明权限推断权限状态证据
文件系统 NONE READ ✓ 一致 src/auth.js:35 使用 Conf 库读取 ~/.config/configstore/baidu-netdisk-skill.json; src/b…
网络访问 READ READ ✓ 一致 仅调用 pan.baidu.com 和 openapi.baidu.com,与 skill.json 声明的 externalDomains 一致
环境变量 NONE READ ✓ 一致 src/auth.js:17-18, src/baidu-api.js:20-21 读取 ENCRYPTION_KEY/BAIDU_API_KEY/BAIDU_…
命令执行 NONE NONE skill.json 声明 tools: ['exec'] 但代码中无任何 child_process.exec/spawn/popen 调用
27 项发现
🔗
中危 外部 URL 外部 URL
https://img.shields.io/badge/License-MIT-yellow.svg
README.md:5
🔗
中危 外部 URL 外部 URL
https://opensource.org/licenses/MIT
README.md:5
🔗
中危 外部 URL 外部 URL
https://img.shields.io/badge/Node.js-%3E%3D18.0.0-green.svg
README.md:6
🔗
中危 外部 URL 外部 URL
https://nodejs.org/
README.md:6
🔗
中危 外部 URL 外部 URL
https://img.shields.io/badge/ClawHub-Skill-blue.svg
README.md:7
🔗
中危 外部 URL 外部 URL
https://clawhub.ai/
README.md:7
🔗
中危 外部 URL 外部 URL
https://img.shields.io/badge/Security-Self--Audited-brightgreen.svg
README.md:8
🔗
中危 外部 URL 外部 URL
https://img.shields.io/badge/Privacy-No%20Data%20Collection-success.svg
README.md:9
🔗
中危 外部 URL 外部 URL
https://pan.baidu.com/union/console
README.md:150
🔗
中危 外部 URL 外部 URL
https://clawhub.ai/niukesi/baidu-netdisk-skill
TODO.md:60
🔗
中危 外部 URL 外部 URL
https://pan.baidu.com/union/apply
docs/QUICKSTART.md:7
🔗
中危 外部 URL 外部 URL
https://openapi.baidu.com/oauth/2.0/authorize?
docs/QUICKSTART.md:30
🔗
中危 外部 URL 外部 URL
https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=你的
docs/QUICKSTART.md:40
🔗
中危 外部 URL 外部 URL
https://opencollective.com/eslint
package-lock.json:43
🔗
中危 外部 URL 外部 URL
https://www.patreon.com/feross
package-lock.json:331
🔗
中危 外部 URL 外部 URL
https://feross.org/support
package-lock.json:335
🔗
中危 外部 URL 外部 URL
https://eslint.org/version-support
package-lock.json:723
🔗
中危 外部 URL 外部 URL
https://opencollective.com/fastify
package-lock.json:925
🔗
中危 外部 URL 外部 URL
https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=$
src/auth.js:54
🔗
中危 外部 URL 外部 URL
https://openapi.baidu.com/oauth/2.0/token
src/auth.js:80
🔗
中危 外部 URL 外部 URL
https://pan.baidu.com/rest/2.0/xpan
src/baidu-api.js:40
🔗
中危 外部 URL 外部 URL
https://pan.baidu.com/union/doc/pksg0s9ns
src/baidu-api.js:99
🔗
中危 外部 URL 外部 URL
https://pan.baidu.com/rest/2.0/xpan/nas
src/baidu-api.js:103
🔗
中危 外部 URL 外部 URL
https://pan.baidu.com/rest/2.0/xpan/file
src/baidu-api.js:131
📧
提示 邮箱 邮箱地址
[email protected]
README.md:299
📧
提示 邮箱 邮箱地址
[email protected]
SECURITY.md:161
📧
提示 邮箱 邮箱地址
[email protected]
package-lock.json:1085

目录结构

13 文件 · 121.0 KB · 3972 行
JSON 4f · 2271L Markdown 5f · 907L JavaScript 3f · 686L Shell 1f · 108L
├─ 📁 docs
│ └─ 📝 QUICKSTART.md Markdown 147L · 2.9 KB
├─ 📁 src
│ ├─ 📜 auth.js JavaScript 123L · 4.0 KB
│ ├─ 📜 baidu-api.js JavaScript 324L · 8.3 KB
│ └─ 📜 index.js JavaScript 239L · 7.3 KB
├─ 📋 _meta.json JSON 5L · 138 B
├─ 📋 package-lock.json JSON 2101L · 72.8 KB
├─ 📋 package.json JSON 61L · 1.4 KB
├─ 📝 README.md Markdown 361L · 8.8 KB
├─ 📝 SECURITY.md Markdown 197L · 3.9 KB
├─ 📋 skill.json JSON 104L · 3.2 KB
├─ 📝 SKILL.md Markdown 126L · 3.4 KB
├─ 🔧 test-local.sh Shell 108L · 3.2 KB
└─ 📝 TODO.md Markdown 76L · 1.7 KB

依赖分析 6 项

包名版本来源已知漏洞备注
axios ^1.6.0 npm semver caret 范围,未锁定版本;需关注已知漏洞报告
crypto-js ^4.2.0 npm semver caret 范围,未锁定版本;本项目用于 AES 加密
commander ^11.1.0 npm semver caret 范围,未锁定版本
conf ^10.2.0 npm semver caret 范围,未锁定版本;存储配置到 ~/.config
ora ^5.4.1 npm semver caret 范围,未锁定版本
chalk ^4.1.2 npm semver caret 范围,未锁定版本

安全亮点

✓ 代码结构清晰,核心功能(文件列表/搜索/上传/下载)与文档描述一致
✓ 仅调用百度官方 API(pan.baidu.com, openapi.baidu.com),无第三方追踪
✓ 无主动的恶意行为证据(无反向 shell、无 base64 编码执行、无凭证外传)
✓ OAuth 2.0 授权流程设计合理,不存储用户明文密码
✓ Token 刷新机制实现正确,refreshAccessToken 方法有效
✓ test-local.sh 提供本地测试支持,辅助安全验证