安全决策报告

smyx-fish-surface-symptom-detection-analysis

Skill performs legitimate fish health analysis but contains undeclared local SQLite database storage of user credentials and silent identity creation that exceeds documented behavior.

安装决策优先 来源: ClawHub 扫描时间: 2026/9/15
文件 31
IOC 12
越权项 2
发现 4
最直接的威胁证据

为什么得出这个结论

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

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

复核
隐藏执行与外联

提取到 12 个一般风险产物,需要结合上下文判断。

通过
攻击链与高危发现

没有形成明确的恶意路径。

复核
依赖与供应链卫生

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

风险分是怎么被拉高的

Undeclared local database with credentials +20

SKILL.md does not mention SQLite storage of tokens, open_token, and user data at data/smyx-common-claw.db

Silent identity auto-creation +10

OpenIdUtil automatically generates User_xxxxxx accounts without user knowledge or consent

Undeclared API key file storage +5

data/smyx-api-key.txt stores identity values not mentioned in documentation

Unpinned dependencies +5

requests>=2.28.0 and pydash==8.0.6 lack strict version pins

最关键的证据

中危 文档欺骗

Undeclared local SQLite database with credential storage

The skill creates a local SQLite database (data/smyx-common-claw.db) that stores user credentials including username, token, open_token, source, and timestamps. This is not mentioned in SKILL.md.

skills/smyx_common/scripts/dao.py:179
Document local credential storage in SKILL.md under Resource Index, or implement transparent user consent for credential persistence.
中危 文档欺骗

Silent auto-creation of synthetic user identities

OpenIdUtil.get_or_create_default_open_id() automatically generates User_xxxxxx identifiers without user knowledge, stores them in the local database, and reuses them across sessions. SKILL.md only states 'system handles identity internally' without explaining this mechanism.

skills/smyx_common/scripts/util.py:230
Disclose synthetic identity generation in SKILL.md, explain why it's necessary, and provide opt-out mechanism.
低危 敏感访问

Undeclared API key file persistence

The skill reads/writes identity values to data/smyx-api-key.txt without mentioning this in documentation. This file can contain sensitive identifiers.

skills/smyx_common/scripts/util.py:212
Document the smyx-api-key.txt file in Resource Index section of SKILL.md.
低危 供应链

Unpinned dependency versions

SKILL.md declares requests>=2.28.0 (loose), while requirements.txt pins pydash==8.0.6 and SQLAlchemy==2.0.46. Loose pinning allows supply chain attacks via version escalation.

SKILL.md:1
Use strict version pinning (requests==2.x.x) in SKILL.md to prevent supply chain attacks.

声明能力 vs 实际能力

文件系统 阻止
声明 NONE
→
推断 WRITE
dao.py:179 - creates SQLite DB in workspace data/
网络访问 通过
声明 READ
→
推断 READ
RequestUtil sends HTTP to lifeemergence.com
数据库 阻止
声明 NONE
→
推断 WRITE
dao.py:179 - UserDao stores tokens in SQLite
环境变量 通过
声明 NONE
→
推断 READ
config.py:76 - reads OPENCLAW_SENDER_OPEN_ID, FEISHU_OPEN_ID

可疑产物与外联

中危 外部 URL
https://lifeemergence.com/sample.html

SKILL.md:34

中危 外部 URL
https://clawhub.ai/user/18072937735

skill-card.md:9

中危 外部 URL
https://clawhub.ai/18072937735/skills/smyx-fish-surface-symptom-detection-analysis

skill-card.md:42

中危 外部 URL
http://192.168.1.234:9601/smyx-open-api

skills/smyx_common/scripts/config-dev.yaml:2

中危 外部 URL
http://192.168.1.234:4100

skills/smyx_common/scripts/config-dev.yaml:3

中危 外部 URL
http://192.168.1.234:7070/jeecg-boot-xzgz

skills/smyx_common/scripts/config-dev.yaml:4

中危 外部 URL
https://livemonitortest.lifeemergence.com/smyx-open-api

skills/smyx_common/scripts/config-test.yaml:2

中危 外部 URL
http://livemonitortest.lifeemergence.com

skills/smyx_common/scripts/config-test.yaml:3

中危 外部 URL
https://healthtest.lifeemergence.com/jeecg-boot-xzgz

skills/smyx_common/scripts/config-test.yaml:4

中危 外部 URL
https://lifeemergence.com/jeecg-boot-xzgz

skills/smyx_common/scripts/config.yaml:4

中危 外部 URL
https://open.lifeemergence.com/smyx-open-api

skills/smyx_common/scripts/config.yaml:5

中危 外部 URL
http://livemonitor.lifeemergence.com

skills/smyx_common/scripts/config.yaml:6

依赖与供应链

包名版本来源漏洞备注
requests >=2.28.0 pip (SKILL.md) 否 Loose version pinning allows potential supply chain attack
pydash 8.0.6 requirements.txt 否 Strictly pinned
SQLAlchemy 2.0.46 requirements.txt 否 Strictly pinned
PyYAML 6.0.3 requirements.txt 否 Strictly pinned

文件构成

31 个文件 · 2777 行
Python 18 个文件 · 2363 行Markdown 4 个文件 · 374 行YAML 6 个文件 · 29 行Text 2 个文件 · 6 行JSON 1 个文件 · 5 行
需关注文件 · 4
skills/smyx_common/scripts/util.py Python · 718 行
Silent auto-creation of synthetic user identities · Undeclared API key file persistence
skills/smyx_common/scripts/dao.py Python · 499 行
Undeclared local SQLite database with credential storage
SKILL.md Markdown · 194 行
Unpinned dependency versions · https://lifeemergence.com/sample.html
skill-card.md Markdown · 60 行
https://clawhub.ai/user/18072937735 · https://clawhub.ai/18072937735/skills/smyx-fish-surface-symptom-detection-analysis
其他文件 · config.py · skill.py · api_doc.md · smyx_analysis.py · smyx_fish_surface_symptom_detection_analysis.py · api_service.py +2

安全亮点

No reverse shell, C2 communication, or credential exfiltration to third parties
No base64 obfuscation or anti-analysis techniques detected
No access to ~/.ssh, ~/.aws, or other sensitive credential paths
Network requests go to legitimate lifeemergence.com domains (verified in config.yaml)
Fish health analysis functionality matches documentation
Uses standard HTTP requests library without suspicious network patterns
Sensitive tokens are not hardcoded (read from config files)
No curl|bash or wget|sh remote script execution
No eval() or exec() with user-controlled input