可疑 — 风险评分 40/100
上次扫描:1 天前 重新扫描
40 /100
pumpclaw-agent
Generate customer-ready Telegram polling bots + Express-style web server integrating Pump.fun Tokenized Agent payments
The skill generates a legitimate Telegram+web payment template but contains an undocumented deposit-wallet pattern that stores private keys in SQLite, plus unused treasury keypair code creating shadow surface.
技能名称pumpclaw-agent
分析耗时68.3s
引擎pi
谨慎使用
Add explicit documentation for deposit wallet private key storage, remove unused treasury keypair code, and consider encrypting SQLite or using a hardware security module for key storage.

安全发现 4 项

严重性 安全发现 位置
中危
Deposit wallet private keys stored in plaintext SQLite 敏感访问
The template generates per-user deposit keypairs and stores the base58-encoded secret key (deposit_secret_b58) in a SQLite database. This directly contradicts SKILL.md safety rule 'Never handle private keys / secret key material' and creates severe risk if the database file is accessed.
db.prepare('INSERT INTO deposit_wallets (telegram_user_id, deposit_pubkey, deposit_secret_b58, created_at) VALUES (?,?,?,?)').run(telegramUserId, kp.publicKey.toBase58(), secretB58, Date.now());
→ Document this design decision explicitly in SKILL.md and consider encrypting SQLite database at rest, using environment-backed keys, or redesigning to avoid server-side key custody.
assets/template/src/server.js:77
中危
Unused treasury keypair created from environment secret 文档欺骗
Both server.js and server.cjs decode TREASURY_SECRET_KEY_BASE58 into a Keypair and assign it to a 'treasury' variable that is never used in any subsequent code path. This creates shadow attack surface for credential harvesting.
const treasury = (() => { const secret = bs58.decode(env.TREASURY_SECRET_KEY_BASE58); return Keypair.fromSecretKey(secret); })();
→ Remove the unused treasury keypair construction, or document its intended purpose. If it will be used later, implement it fully.
assets/template/src/server.js:40
中危
Transaction signing not declared in SKILL.md 文档欺骗
SKILL.md states 'Never sign transactions on behalf of the user', but the template server signs invoice transactions from deposit keypairs (server-controlled wallets). While technically not user keys, this operational behavior is not declared.
tx.sign(depositKeypair); const sig = await connection.sendRawTransaction(tx.serialize(), ...);
→ Clarify SKILL.md to distinguish between 'user keys' (never handled) and 'service keys' (managed for deposit wallet operation), documenting the trust model.
assets/template/src/server.js:116
低危
Native module dependency without explicit security controls 供应链
better-sqlite3 is a native Node.js module that reads/writes binary database files. If the module or its build artifacts are compromised, the entire database including stored secrets could be exposed.
"better-sqlite3": "^12.6.2"
→ Pin to exact version and consider adding integrity verification for native dependencies.
assets/template/package.json:12
资源类型声明权限推断权限状态证据
文件系统 WRITE WRITE ✓ 一致 SKILL.md stamps assets/template/ to customer folder
命令执行 WRITE WRITE ✓ 一致 scripts/stamp_template.sh uses tar/bash
网络访问 READ READ ✓ 一致 Solana RPC URL for payment verification
数据库 WRITE WRITE ✓ 一致 better-sqlite3 stores deposit wallets and balances
技能调用 NONE NONE Skill generates project; doesn't execute template
凭证窃取 NONE WRITE ✗ 越权 deposit_secret_b58 stored in SQLite without encryption
10 项发现
🔗
中危 外部 URL 外部 URL
http://127.0.0.1:3033
assets/template/README-FAST.md:4
🔗
中危 外部 URL 外部 URL
http://127.0.0.1:3033/health
assets/template/README.md:19
🔗
中危 外部 URL 外部 URL
https://opencollective.com/fastify
assets/template/package-lock.json:111
🔗
中危 外部 URL 外部 URL
https://paulmillr.com/funding/
assets/template/package-lock.json:275
🔗
中危 外部 URL 外部 URL
https://www.patreon.com/feross
assets/template/package-lock.json:758
🔗
中危 外部 URL 外部 URL
https://feross.org/support
assets/template/package-lock.json:762
🔗
中危 外部 URL 外部 URL
https://opencollective.com/express
assets/template/package-lock.json:987
🔗
中危 外部 URL 外部 URL
https://dotenvx.com
assets/template/package-lock.json:1079
💰
中危 钱包地址 加密货币钱包地址
3j5fMGzUMCxWBJ3dV3a7Wz8y2f
assets/template/package-lock.json:1141
🔗
中危 外部 URL 外部 URL
https://paypal.me/kozjak
assets/template/package-lock.json:1768

目录结构

11 文件 · 114.6 KB · 3298 行
JSON 2f · 2239L JavaScript 4f · 858L Markdown 4f · 160L Shell 1f · 41L
├─ 📁 assets
│ └─ 📁 template
│ ├─ 📁 src
│ │ ├─ 📜 server.cjs JavaScript 324L · 11.5 KB
│ │ ├─ 📜 server.js JavaScript 251L · 8.5 KB
│ │ ├─ 📜 standalone-telegram.cjs JavaScript 142L · 4.4 KB
│ │ └─ 📜 telegram-bot.cjs JavaScript 141L · 4.6 KB
│ ├─ 📋 package-lock.json JSON 2215L · 79.5 KB
│ ├─ 📋 package.json JSON 24L · 537 B
│ ├─ 📝 README-FAST.md Markdown 31L · 635 B
│ └─ 📝 README.md Markdown 30L · 607 B
├─ 📁 references
│ └─ 🔑 PUMP_TOKENIZED_AGENTS.md Markdown 21L · 805 B
├─ 📁 scripts
│ └─ 🔧 stamp_template.sh Shell 41L · 1.0 KB
└─ 📝 SKILL.md Markdown 78L · 2.4 KB

依赖分析 6 项

包名版本来源已知漏洞备注
@pump-fun/agent-payments-sdk 3.0.0 npm Major version only; supply chain risk for SDK
@solana/web3.js ^1.98.0 npm Pinned to major version
better-sqlite3 ^12.6.2 npm Native module; database contains plaintext private keys
fastify ^5.8.2 npm Pinned to major version
grammy ^1.41.1 npm Pinned to major version
zod ^4.3.6 npm Pinned to major version

安全亮点

✓ Server binds exclusively to 127.0.0.1, preventing remote access
✓ All endpoints except /health require API token authentication
✓ No credential exfiltration or C2 communication detected
✓ No obfuscation, base64 execution, or suspicious download patterns
✓ Rate limiting registered on Fastify (60 req/min)
✓ Input validation using Zod schemas on all endpoints
✓ No remote script execution (curl|bash, wget|sh)
✓ stamp_template.sh uses safe tar copy with no arbitrary command injection
✓ Skill generates templates without executing them, limiting direct attack surface