update-approval-guard (primary) + instreet + 25+ sub-skills (workspace)
Workspace contains a live InStreet API key stored in plaintext across 4 config files, undeclared shell execution in publish.sh, and the Instreet skill lacks declared filesystem/network permissions despite reading configs and making network requests.
The InStreet/Coze API key sk_inst_c7acbeabd3c0c24acac6afb98db3828d is stored in plaintext in 4 files: skills/instreet/config.json, skills/instreet/scripts/config.json, IDENTITY.md, and instreet-config.json. If any of these files are accidentally shared, committed to a public repo, or accessed by a malicious skill, the API key can be stolen. Note: the key is used legitimately by the Instreet heartbeat script, but the storage pattern is a significant security concern.
skills/instreet/config.json:4 Why this conclusion was reached
3/4 dimensions flagged4 undeclared or violating capabilities were inferred.
3 high-risk artifacts or egress signals were extracted.
The report includes 0 attack-chain steps and 2 severe findings.
Dependencies are present but no obvious high-risk issue stands out.
What drove the risk score up
InStreet API key sk_inst_c7acbeabd3c0c24acac6afb98db3828d appears in 4 plaintext files (skills/instreet/config.json, skills/instreet/scripts/config.json, IDENTITY.md, instreet-config.json). While the key is used legitimately by the heartbeat script, storing credentials in plaintext across multiple locations creates significant exfiltration risk.
update-approval-guard/publish.sh runs git init, git add/commit/push, gh repo create, clawhub login/publish — all shell:WRITE operations — but these are not declared anywhere in update-approval-guard/SKILL.md or the root SKILL.md.
skills/Elite-Longterm-Memory/SKILL.md:293 documents 'rm -rf ~/.openclaw/memory/lancedb/' as a maintenance command. Although documented, it's a broad recursive delete and targets a system directory (~/.openclaw/). Pre-scan misreported this as 'rm -rf ~'; the actual path is more specific but still dangerous.
skills/instreet/scripts/heartbeat.mjs reads config.json (filesystem:READ) and makes network requests (network:WRITE) — both undeclared in skills/instreet/SKILL.md. The capability model requires declaration of all resources accessed.
Most important evidence
Live InStreet API Key Stored in Plaintext
The InStreet/Coze API key sk_inst_c7acbeabd3c0c24acac6afb98db3828d is stored in plaintext in 4 files: skills/instreet/config.json, skills/instreet/scripts/config.json, IDENTITY.md, and instreet-config.json. If any of these files are accidentally shared, committed to a public repo, or accessed by a malicious skill, the API key can be stolen. Note: the key is used legitimately by the Instreet heartbeat script, but the storage pattern is a significant security concern.
skills/instreet/config.json:4 Undeclared Shell Execution in publish.sh
update-approval-guard/publish.sh executes git commands (init, add, commit, push), gh CLI (repo create), and clawhub CLI (login, publish) — all requiring shell:WRITE permissions. These operations are not declared in any SKILL.md file. The script also prompts for user input interactively, which is a social-engineering risk if executed in an automated context.
update-approval-guard/publish.sh:1 Destructive Recursive Delete in Elite-Longterm-Memory SKILL.md
The maintenance commands section of skills/Elite-Longterm-Memory/SKILL.md at line 293 documents 'rm -rf ~/.openclaw/memory/lancedb/' as a 'nuclear option' to clear vectors. While documented (not hidden), this command is a broad recursive delete targeting a system directory. Additionally, the pre-scan misidentified this as 'rm -rf ~' (user home), which is even more dangerous — this is a scanning accuracy concern worth noting.
skills/Elite-Longterm-Memory/SKILL.md:293 Hardcoded Internal IP in SOUL.md
A hardcoded IP address 115.190.250.10 for the star-office UI dashboard is embedded in SOUL.md. This is an internal network address (not a public/external IP), so the exfiltration risk is low. However, it represents hardcoded infrastructure assumption that may become invalid if the service moves.
SOUL.md:59 Example Placeholder API Keys in translate-cli Quickstart
The translate-cli quickstart references example API key names (OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPL_API_KEY) with placeholder values like 'your_openai_key'. These are clearly example placeholders, not real credentials. This is a documentation false positive — no actual credentials are exposed.
skills/translate-cli/references/quickstart.md:9 Declared capability vs actual capability
skills/instreet/scripts/heartbeat.mjs:15 — reads config.json via readFileSync skills/instreet/scripts/heartbeat.mjs:30 — POST to /api/v1/upvote, /api/v1/posts/.../comments, etc. update-approval-guard/publish.sh — git init/commit/push, gh repo create, clawhub publish (undeclared) skills/Elite-Longterm-Memory/SKILL.md:293 — rm -rf ~/.openclaw/memory/lancedb/ Suspicious artifacts and egress
rm -rf ~ skills/Elite-Longterm-Memory/SKILL.md:293
115.190.250.10 SOUL.md:59
API_KEY="your_anthropic_key" skills/translate-cli/references/quickstart.md:9
http://115.190.250.10:19000 SOUL.md:59
https://feishu.cn/docx/EKn6dmGxsoj4SZxJEbOciyIVnNf UPDATE-APPROVAL-GUARD-PUBLISH.md:45
https://feishu.cn/docx/ZU8ZdvND0oHV79xSVe1cbqeinrd UPDATE-APPROVAL-GUARD-PUBLISH.md:46
https://docs.clawhub.com UPDATE-APPROVAL-GUARD-PUBLISH.md:105
https://docs.openclaw.ai UPDATE-APPROVAL-GUARD-PUBLISH.md:106
https://api.z.ai/api/mcp/zread/mcp config/mcporter.json:4
https://api.z.ai/api/mcp/web_search_prime/mcp config/mcporter.json:10
https://ucn19uuu5wk8.feishu.cn/base/JFWebb76KaFd7as501ac3UIDnxb docs/industry_news_README.md:51
https://instreet.coze.site instreet-config.json:9
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| fetch (built-in Node.js) | N/A | Node.js built-in | No | Used for API requests in heartbeat.mjs; no external dependencies |
| gh CLI | unknown | system | No | Used in publish.sh; must be pre-installed on the system |
| clawhub CLI | unknown | system | No | Used in publish.sh; must be pre-installed on the system |
File composition
skills/instreet/config.json skills/instreet/scripts/config.json skills/tech-news-digest/config/defaults/sources.json skills/tech-news-digest/scripts/fetch-twitter.py skills/hiic-industry-daily-report/scripts/generate-report.mjs scripts/industry_daily_news.mjs skills/tech-news-digest/SKILL.md