安全决策报告

ClawSafe AI Skills Portfolio

The repository is a portfolio of 20+ AI agent skills and tools with most IOCs being false positives or confined to archived/low-sensitivity skills, but contains one hardcoded API key in a monitoring tool and undeclared browser automation behavior in an archived skill.

安装决策优先 来源: 手动上传 扫描时间: 2026/4/3
文件 605
IOC 107
越权项 2
发现 8
最直接的威胁证据
01
User clones repository or browses skills directory reconnaissance · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py
02
Attacker extracts the hardcoded API key weaponization · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py
03
Attacker uses extracted API key to query or manipulate ClawHub skill registry 横向移动 · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py

为什么得出这个结论

3/4 个维度触发
阻止
声明与实际能力

发现 2 项声明之外的能力或越权行为。

阻止
隐藏执行与外联

提取到 8 个高危 IOC 或外联信号。

阻止
攻击链与高危发现

报告包含 3 步攻击链,另有 2 项高危或严重发现。

复核
依赖与供应链卫生

发现 1 项需要关注的依赖或供应链线索。

攻击链

01
User clones repository or browses skills directory

reconnaissance · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16

02
Attacker extracts the hardcoded API key

weaponization · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16

03
Attacker uses extracted API key to query or manipulate ClawHub skill registry

横向移动 · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:45

风险分是怎么被拉高的

Hardcoded API key in monitoring tool +15

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16 contains a hardcoded ClawHub API key (clh_rlz3TY0FNrsfHjOcmA5vzoUt4-HjkT4t_B56CZwe0kY) that could be exfiltrated if the file is accessed

Undeclared browser automation in archived skill +12

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py uses Playwright for full browser automation including login, cookies, and order retrieval — not declared in any SKILL.md

False-positive IOCs dominating pre-scan +-10

code_analyzer.sh 'rm -rf /' is a grep DETECTION PATTERN, not execution; base64 in encryption-service.ts is standard crypto IV encoding; test password is in archived test file — all pre-scan IOCs are benign

SKILL.md example uses placeholder credential +8

agents/code/second-brain-triage/SKILL.md:292 shows OPENAI_API_KEY='for-summarization' as a documented example, but could mislead users into hardcoding real keys

Broad API key regex in security checker could cause false positives +5

code_analyzer.sh uses overly broad regex (key.*=.*['"].{8,}['"]) that may misflag legitimate config values

No declared shell/filesystem permissions in main SKILL.md +5

Root SKILL.md (taobao-shopping) declares no tool permissions, yet many scripts use subprocess/shell operations — violation of capability transparency

最关键的证据

高危

Hardcoded API key in ClawHub monitoring tool

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16 contains a hardcoded ClawHub API key 'clh_rlz3TY0FNrsfHjOcmA5vzoUt4-HjkT4t_B56CZwe0kY'. This is the tool's own API key and should be loaded from environment variables to prevent exfiltration if the repo is compromised or cloned.

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16
Replace with: CLAWHUB_API_KEY = os.environ.get('CLAWHUB_API_KEY', '')
高危

Undeclared browser automation with credential handling in archived skill

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py implements full browser automation using Playwright including QR-code login, encrypted cookie storage, and live order state scraping. None of this is declared in a SKILL.md file. The skill is archived but represents a significant hidden capability.

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:107
If promoting this skill to active use, add a SKILL.md that declares browser:WRITE and explicitly documents cookie handling and login flows
中危

Placeholder credential in SKILL.md example

agents/code/second-brain-triage/SKILL.md:292 shows OPENAI_API_KEY='for-summarization' as a documented environment variable example. While this is a placeholder, showing '=' style assignment could mislead users into hardcoding real API keys. Better practice is to show only the export statement without a value.

agents/code/second-brain-triage/SKILL.md:292
Change to: export OPENAI_API_KEY="your-api-key-here" # Replace with your actual key
中危

Security check script has false-positive-prone regex

agents/design/skill-assessment/evaluators/code_analyzer.sh uses regex 'key.*=.*['"].{8,}['"]' to detect hardcoded keys, which will flag any variable assignment with 8+ character values. This could cause alert fatigue and mask real issues.

agents/design/skill-assessment/evaluators/code_analyzer.sh:56
Refine regex to target specific credential patterns (API_KEY, AWS_SECRET, DB_PASSWORD) rather than generic 'key' matches
中危

SecureStorage in didi.py loads from undefined module

didi.py imports SecureStorage from 'security' module but the security.py file is separate. The encryption key management is not visible in the archive, making it impossible to audit key lifecycle security.

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:22
Review security.py to ensure key derivation uses secure random and keys are not hardcoded or logged
低危

Test file contains hardcoded password

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/tests/encryption.test.ts:112 uses password='mySecurePassword123' as a test fixture. This is in a test file within an archived skill — low risk but noted.

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/tests/encryption.test.ts:112
Move test fixtures to external test config or use environment-variable-loaded values
低危

Pre-scan IOCs are predominantly false positives

The high-risk-brief.md reports 8 IOCs, but 5 are false positives: 'rm -rf /' is a grep pattern (not execution), base64 Buffer usage is standard crypto, hardcoded IP in didi.py was not found in current file, and test password is in archived test data. Only the API key in clawhub_api.py is a genuine credential issue.

_clawsafe/high-risk-brief.md:1
Update pre-scan detection logic to distinguish between detection patterns and actual dangerous code execution
低危

skill-assessment tool requires broad bash access

agents/design/skill-assessment/SKILL.md declares 'bash: >=4.0' but the tool performs static file analysis only. The declared dependency on bash for a static analysis tool is overly broad.

agents/design/skill-assessment/SKILL.md:6
Document why bash is needed (e.g., 'uses bash find/grep for file scanning') or consider pure-Python rewrite for narrower permission model

声明能力 vs 实际能力

文件系统 通过
声明 NONE
推断 READ
Multiple scripts in agents/code/, agents/main/publish/ read/write local files without SKILL.md declaration
网络访问 通过
声明 READ
推断 READ
SKILL.md describes reading reference files; actual network calls limited to HTTPS API fetches in monitoring tools
命令执行 阻止
声明 NONE
推断 WRITE
agents/design/skill-assessment/assess.sh and evaluators/ use bash execution; shell:WRITE is required but undeclared
浏览器 阻止
声明 NONE
推断 WRITE
skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:107 uses Playwright for full browser automation (login, cookies, order state) — completely undeclared
环境变量 通过
声明 NONE
推断 READ
scripts/read_reference.py and similar read process environment variables — not declared

可疑产物与外联

严重 危险命令
rm -rf /

agents/design/skill-assessment/evaluators/code_analyzer.sh:63

严重 编码执行
Buffer.from(parts[0], 'base64'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/src/services/encryption-service.ts:52

严重 编码执行
Buffer.from(expectedSignature, 'base64'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/src/services/encryption-service.ts:105

严重 编码执行
Buffer.from(signature, 'base64'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/src/services/encryption-service.ts:106

高危 API 密钥
API_KEY="for-summarization"

agents/code/second-brain-triage/SKILL.md:292

高危 API 密钥
API_KEY = "clh_rlz3TY0FNrsfHjOcmA5vzoUt4-HjkT4t_B56CZwe0kY"

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16

高危 IP 地址
120.0.0.0

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:157

高危 API 密钥
password = 'mySecurePassword123'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/tests/encryption.test.ts:112

中危 外部 URL
https://youtube.com/watch?v=xxx

agents/code/second-brain-triage/TECHNICAL_SPEC.md:858

中危 外部 URL
https://clawhub.com/skills/pdf-editor

agents/design/clawhub-skill-monitor/DESIGN.md:71

中危 外部 URL
https://your-clawhub-instance.com

agents/design/clawhub-skill-monitor/INSTALL.md:108

中危 外部 URL
https://api.your-clawhub-instance.com

agents/design/clawhub-skill-monitor/INSTALL.md:109

依赖与供应链

包名版本来源漏洞备注
playwright unpinned pip (didi.py) Used in archived didi.py for browser automation; not declared in SKILL.md
requests unpinned pip (clawhub_api.py) Used for HTTPS API calls; version not pinned
chalk ^5.0.0 npm (xiangqin, shopping-merchant) Terminal color library; no security implications
commander ^12.0.0 npm (shopping-merchant) CLI framework; no security implications

文件构成

605 个文件 · 102115 行
Markdown 243 个文件 · 35507 行TypeScript 109 个文件 · 19572 行JavaScript 62 个文件 · 15548 行Python 96 个文件 · 15140 行JSON 65 个文件 · 14767 行Shell 14 个文件 · 1222 行
需关注文件 · 5
skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/package-lock.json JSON · 4782 行
https://dotenvx.com · https://opencollective.com/express
agents/design/orchestrator/package-lock.json JSON · 4142 行
https://opencollective.com/babel · https://opencollective.com/browserslist · https://tidelift.com/funding/github/npm/browserslist · https://tidelift.com/funding/github/npm/caniuse-lite · https://opencollective.com/fast-check · https://www.patreon.com/feross · https://feross.org/support · [email protected]
skills-archive/waimai-public-low-sensitivity-20260315-204610/scripts/waimai.js JavaScript · 2186 行
https://www.ele.me · https://www.ele.me/search?keyword=$
skills/health-manager/package-lock.json JSON · 946 行
https://opencollective.com/fastify
skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py Python · 742 行
Undeclared browser automation with credential handling in archived skill · SecureStorage in didi.py loads from undefined module · 120.0.0.0 · https://www.didiglobal.com · https://web.didiglobal.com · https://www.didiglobal.com/passport/login · https://web.didiglobal.com/trip/current · https://web.didiglobal.com/trip/history · https://web.didiglobal.com/coupon
其他文件 · waimai.js · package-lock.json · analyzer.ts · index.ts · TECHNICAL_SPEC.md · study-buddy.py +1

安全亮点

The skill-assessment security checker itself is legitimate defensive tooling with no malicious behavior
Main SKILL.md (taobao-shopping) correctly declares itself as read-only public guidance with no login/automation
Most skills use proper file validation, error handling, and structured logging
Encryption service uses industry-standard AES-256-CBC with PBKDF2 and timing-safe comparisons
skills/didi/SKILL.md explicitly disclaims browser automation and cookie handling — good transparency
Skill-assessment evaluator correctly detects dangerous patterns in OTHER skills' code (not its own)
Many skills use parameterized queries and avoid string interpolation in SQL
Browser automation in didi.py uses encrypted cookie storage via SecureStorage module
Pre-scan correctly identified the clawhub_api.py hardcoded key as a genuine IOC