x-scout
X-Scout performs undeclared analytics phone-home on every execution and stores credentials in plaintext at ~/.x-scout/config.json, with shell execution via subprocess undocumented in SKILL.md.
为什么得出这个结论
2/4 个维度触发发现 2 项声明之外的能力或越权行为。
提取到 13 个一般风险产物,需要结合上下文判断。
报告包含 3 步攻击链,另有 2 项高危或严重发现。
发现 2 项需要关注的依赖或供应链线索。
攻击链
初始入口 · setup.sh:165
usage · x_scout.py:100
持久化 · x_scout.py:165
风险分是怎么被拉高的
POSTs to clawagents.dev/usage on every run with query hashes, install_id, mode, and result counts. Not declared in SKILL.md.
subprocess.run() used for yt-dlp, ffmpeg, pip install in x_scout.py. setup.sh uses bash and pip. Not declared in allowed-tools or SKILL.md.
Writes all API keys in plaintext to ~/.x-scout/config.json. No mention in SKILL.md of file write to HOME directory.
最关键的证据
Silent phone-home analytics on every execution
x_scout.py reports usage to https://clawagents.dev/reddit-rank/v1/xs/usage on every CLI invocation. Payload includes install_id, version, mode, query_hash (SHA256 of search terms), results count, and timestamp. This behavior is not declared in SKILL.md and sends search queries to an external server.
x_scout.py:100 Setup registration phone-home with API key presence
setup.sh POSTs install metadata to https://clawagents.dev/reddit-rank/v1/xs/register including which optional API keys are configured (has_openrouter, has_cerebras, has_deepgram booleans). This reveals what services the user has enabled.
setup.sh:165 Plaintext credential storage in sensitive path
All API keys (TWITTERAPI_KEY, OPENROUTER_API_KEY, CEREBRAS_API_KEYS, DEEPGRAM_API_KEY) are written in plaintext to ~/.x-scout/config.json. This is a sensitive path (~/.x-scout) that could be targeted by credential theft malware.
x_scout.py:165 Undeclared shell execution via subprocess
SKILL.md does not declare any shell execution capability. However, x_scout.py uses subprocess.run() to execute yt-dlp, ffmpeg, and pip install commands. setup.sh executes bash scripts and pip. This is a mismatch between documented and actual capabilities.
x_scout.py:280 Unpinned dependencies in requirements.txt
requirements.txt specifies 'requests>=2.28.0' and 'python-dotenv>=1.0.0' without upper bounds. This allows dependency confusion or malicious package updates to be installed silently.
requirements.txt:1 Analytics registration endpoint reveals skill branding
The analytics URL 'clawagents.dev/reddit-rank/v1/xs/...' contains 'reddit-rank' which suggests this code may have been adapted from a Reddit-focused tool. SKILL.md branding as 'X-Scout' for Twitter scraping appears different from the analytics endpoint naming.
setup.sh:15 声明能力 vs 实际能力
x_scout.py:~100 writes ~/.x-scout/config.json x_scout.py:~100 POSTs analytics to clawagents.dev x_scout.py:subprocess.run for yt-dlp/ffmpeg os.environ.get for API keys 可疑产物与外联
https://clawagents.dev/x-scout SKILL.md:15
https://x.com/user/status/123456 SKILL.md:59
https://clawagents.dev/reddit-rank/v1/xs/register setup.sh:8
https://twitterapi.io setup.sh:109
https://openrouter.ai$ setup.sh:125
https://cerebras.ai setup.sh:137
https://deepgram.com setup.sh:149
https://x.com/user/status/123\ setup.sh:223
https://api.twitterapi.io/twitter x_scout.py:67
https://openrouter.ai/api/v1 x_scout.py:71
https://api.cerebras.ai/v1/chat/completions x_scout.py:75
https://clawagents.dev/reddit-rank/v1/xs/usage x_scout.py:97
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| requests | >=2.28.0 | pip | 否 | Version not pinned, only lower bound specified |
| python-dotenv | >=1.0.0 | pip | 否 | Version not pinned, only lower bound specified |
文件构成
x_scout.py setup.sh SKILL.md requirements.txt