baidu-netdisk-skill
硬编码加密密钥导致声称的 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)'但加密密钥已知使该保护名存实亡。
src/auth.js:18 Why this conclusion was reached
1/4 dimensions flaggedDeclared resources and inferred behavior are broadly aligned.
27 lower-risk artifacts were extracted and still need context.
The report includes 0 attack-chain steps and 2 severe findings.
6 dependency or supply-chain issues need attention.
What drove the risk score up
auth.js:18 和 baidu-api.js:20 使用固定字符串派生 ENCRYPTION_KEY,任何人可见源码即可解密所有用户 Token,使'AES-256加密存储'承诺形同虚设
SKILL.md 声称'Token 本地加密存储'但未披露使用固定密钥;SECURITY.md 声称'无隐藏后门'但硬编码密钥本质上等同于已知后门
skill.json 未声明 filesystem 权限,代码通过 conf 库访问 ~/.config/configstore/ 路径
代码读取 process.env.BAIDU_API_KEY, process.env.BAIDU_SECRET_KEY, process.env.ENCRYPTION_KEY,但 skill.json tools 列表和 SKILL.md 均未声明
axios ^1.6.0, crypto-js ^4.2.0 等依赖使用 semver caret 范围,未锁定具体版本,存在供应链攻击风险
skill.json 声明 tools: ['exec'] 但代码中无任何 exec/spawn 调用,实际使用 filesystem 操作
Most important evidence
硬编码加密密钥使 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)'但加密密钥已知使该保护名存实亡。
src/auth.js:18 内置加密密钥使已加密 Token 可被批量解密
由于 ENCRYPTION_KEY 硬编码且公开,用户存储的 accessToken 和 refreshToken 虽经 AES 加密但密钥已知。攻击者只需读取配置文件并用同一密钥解密即可获得明文 Token,影响所有用户。
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 时可能安装带有安全漏洞的更新版本。
package.json:38 skill.json 声明 tools: ['exec'] 但代码无任何 exec 调用
skill.json 的 tools 字段声明使用 'exec' 工具,但实际代码中无 child_process.exec/spawn/fork 等任何 shell 执行调用。声明的工具与实际代码能力不匹配,可能误导 AI Agent 授予不必要的 shell 执行权限。
skill.json:18 未声明的敏感文件路径访问
代码通过 conf 库访问 ~/.config/configstore/baidu-netdisk-skill.json 存储配置和加密 Token,但 skill.json 和 SKILL.md 均未声明 filesystem 权限及此具体路径。用户在授权时无法了解该路径将被访问。
src/auth.js:35 README.md 包含付费订阅推广内容
README.md 末尾包含'首发优惠'、'前100名用户5折'、'年付用户¥999/年'等付费推广内容,与工具类开源项目性质不符,可能是诱导付费的营销手段。
README.md:337 Declared capability vs actual capability
src/auth.js:35 使用 Conf 库读取 ~/.config/configstore/baidu-netdisk-skill.json; src/baidu-api.js:296 使用 fs.readFileSync 读取本地文件上传 仅调用 pan.baidu.com 和 openapi.baidu.com,与 skill.json 声明的 externalDomains 一致 src/auth.js:17-18, src/baidu-api.js:20-21 读取 ENCRYPTION_KEY/BAIDU_API_KEY/BAIDU_SECRET_KEY 环境变量,SKILL.md 未提及 skill.json 声明 tools: ['exec'] 但代码中无任何 child_process.exec/spawn/popen 调用 Suspicious artifacts and egress
https://img.shields.io/badge/License-MIT-yellow.svg README.md:5
https://opensource.org/licenses/MIT README.md:5
https://img.shields.io/badge/Node.js-%3E%3D18.0.0-green.svg README.md:6
https://nodejs.org/ README.md:6
https://img.shields.io/badge/ClawHub-Skill-blue.svg README.md:7
https://clawhub.ai/ README.md:7
https://img.shields.io/badge/Security-Self--Audited-brightgreen.svg README.md:8
https://img.shields.io/badge/Privacy-No%20Data%20Collection-success.svg README.md:9
https://pan.baidu.com/union/console README.md:150
https://clawhub.ai/niukesi/baidu-netdisk-skill TODO.md:60
https://pan.baidu.com/union/apply docs/QUICKSTART.md:7
https://openapi.baidu.com/oauth/2.0/authorize? docs/QUICKSTART.md:30
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| axios | ^1.6.0 | npm | No | semver caret 范围,未锁定版本;需关注已知漏洞报告 |
| crypto-js | ^4.2.0 | npm | No | semver caret 范围,未锁定版本;本项目用于 AES 加密 |
| commander | ^11.1.0 | npm | No | semver caret 范围,未锁定版本 |
| conf | ^10.2.0 | npm | No | semver caret 范围,未锁定版本;存储配置到 ~/.config |
| ora | ^5.4.1 | npm | No | semver caret 范围,未锁定版本 |
| chalk | ^4.1.2 | npm | No | semver caret 范围,未锁定版本 |
File composition
package-lock.json README.md src/baidu-api.js src/auth.js SECURITY.md skill.json docs/QUICKSTART.md TODO.md package.json