安全决策报告

smyx-family-conflict-aftercare-suggest-analysis

该技能存在多个未声明的敏感行为:本地SQLite数据库存储用户凭证、自动创建用户账户、将token/open_token/username等凭证外发到外部API服务器,且SKILL.md完全未提及这些行为,构成严重文档欺骗。

安装决策优先 来源: ClawHub 扫描时间: 16 天前
文件 30
IOC 12
越权项 3
发现 7
最直接的威胁证据
严重 文档欺骗
未声明的本地凭证数据库存储

代码通过SQLAlchemy创建本地SQLite数据库(smyx-common-claw.db),存储用户的username、token、open_token等敏感凭证。SKILL.md完全未提及此本地存储行为,用户无法知晓凭证被持久化到本地文件系统。

skills/smyx_common/scripts/dao.py:72

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

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

攻击链

01
用户安装技能,技能自动执行初始化

初始入口 · skills/smyx_common/scripts/util.py:269

02
OpenIdUtil自动创建默认用户User_xxxxxx并写入本地SQLite数据库

权限提升 · skills/smyx_common/scripts/dao.py:72

03
通过/sys/phoneLogin接口将自动创建的用户注册到云端

权限提升 · skills/smyx_common/scripts/util.py:263

04
每次API请求将X-Access-Token/Authorization等凭证发送到外部服务器

最终危害 · skills/smyx_common/scripts/util.py:217

风险分是怎么被拉高的

未声明的本地凭证存储 +25

SQLite数据库(smyx-common-claw.db)存储username/token/open_token等敏感凭证,SKILL.md完全未提及

未声明的凭证外发 +25

通过RequestUtil.http_request将X-Access-Token/X-Api-Key/Authorization等凭证header发送至外部API服务器

未声明的自动用户创建 +15

OpenIdUtil自动生成User_xxxxxx格式用户并通过/sys/phoneLogin注册到云端

未声明的API端点和App ID +10

硬编码App ID(x1a3s4nwy1s2r4se)和多个外部API端点(https://lifeemergence.com等)

硬编码的凭证注释 +5

util.py:157存在注释掉的username包含ou_前缀,可能是测试凭证

最关键的证据

严重 文档欺骗

未声明的本地凭证数据库存储

代码通过SQLAlchemy创建本地SQLite数据库(smyx-common-claw.db),存储用户的username、token、open_token等敏感凭证。SKILL.md完全未提及此本地存储行为,用户无法知晓凭证被持久化到本地文件系统。

skills/smyx_common/scripts/dao.py:72
SKILL.md必须声明:1)本地SQLite数据库位置和用途;2)存储的凭证类型;3)数据库文件保护措施
严重 凭证窃取

未声明的凭证外部传输

RequestUtil.http_request方法将X-Access-Token、X-Api-Key、Authorization等敏感凭证header通过HTTP请求发送到外部API服务器(https://lifeemergence.com等),存在凭证拦截风险。

skills/smyx_common/scripts/util.py:217
SKILL.md必须声明:1)外部API服务器域名;2)传输的凭证类型;3)传输目的和必要性
严重 文档欺骗

未声明的自动用户创建机制

OpenIdUtil.resolve_current_open_id自动创建User_xxxxxx格式的默认用户名,通过/sys/phoneLogin接口注册到云端系统,形成未声明的用户账户体系。

skills/smyx_common/scripts/util.py:263
SKILL.md必须声明:1)自动创建用户的触发条件;2)用户名生成规则;3)用户数据用途
高危 数据外泄

未声明的用户身份外发

HTTP请求data参数中包含pnaUserName字段,携带当前用户名发送到外部API,泄露用户身份标识。

skills/smyx_common/scripts/util.py:230
必须声明上传的用户身份数据内容和目的
高危 供应链

硬编码的App ID和API端点

config.yaml中硬编码了App ID(x1a3s4nwy1s2r4se)和多个外部API端点域名,用户无法审核这些外部连接的安全性。

skills/smyx_common/scripts/config.yaml:6
App ID和API端点应从环境变量或配置文件读取,避免硬编码
中危 文档欺骗

未声明的API Key文件读写

OpenIdUtil.get_api_key_file_open_id读取data/smyx-api-key.txt文件获取API Key,该文件操作未在SKILL.md中声明。

skills/smyx_common/scripts/util.py:249
声明API Key文件的存储位置、用途和保护方式
低危 代码执行

被注释的测试凭证

util.py:157存在注释掉的username变量(ou_86fdd8e0d5f116c18a9dd550abefe6d2),可能是测试用凭证遗留。

skills/smyx_common/scripts/util.py:157
删除遗留的测试凭证代码

声明能力 vs 实际能力

文件系统 阻止
声明 READ
推断 WRITE
skills/smyx_common/scripts/dao.py:72 创建SQLite数据库写入token/open_token
网络访问 阻止
声明 READ
推断 WRITE
skills/smyx_common/scripts/util.py:217-220 将X-Access-Token/Authorization等凭证发送到外部API
环境变量 阻止
声明 NONE
推断 READ
skills/smyx_common/scripts/config.py:63-65 读取OPENCLAW_SENDER_OPEN_ID等环境变量

可疑产物与外联

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

SKILL.md:34

中危 外部 URL
https://clawhub.ai/user/smyx-sunjinhui

skill-card.md:9

中危 外部 URL
https://clawhub.ai/smyx-sunjinhui/skills/smyx-family-conflict-aftercare-suggest-analysis

skill-card.md:43

中危 外部 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

依赖与供应链

包名版本来源漏洞备注
pydash 8.0.6 requirements.txt 版本已锁定
SQLAlchemy 2.0.46 requirements.txt 版本已锁定
PyYAML 6.0.3 requirements.txt YAML反序列化漏洞(CVE-2020-14343等),建议升级
requests >=2.28.0 SKILL.md依赖说明 无版本上限,存在引入恶意版本风险

文件构成

30 个文件 · 2779 行
Python 18 个文件 · 2363 行Markdown 4 个文件 · 381 行YAML 6 个文件 · 29 行Text 2 个文件 · 6 行
需关注文件 · 4
skills/smyx_common/scripts/util.py Python · 718 行
未声明的凭证外部传输 · 未声明的自动用户创建机制 · 未声明的用户身份外发 · 未声明的API Key文件读写 · 被注释的测试凭证
skills/smyx_common/scripts/dao.py Python · 499 行
未声明的本地凭证数据库存储
SKILL.md Markdown · 194 行
https://lifeemergence.com/sample.html
skill-card.md Markdown · 63 行
https://clawhub.ai/user/smyx-sunjinhui · https://clawhub.ai/smyx-sunjinhui/skills/smyx-family-conflict-aftercare-suggest-analysis
其他文件 · config.py · api_doc.md · skill.py · smyx_analysis.py · smyx_family_conflict_aftercare_suggest_analysis.py · api_service.py +2

安全亮点

代码结构清晰,使用标准SQLAlchemy ORM
用户身份参数由系统内部自动处理,不要求用户输入
敏感header打印时进行了截断处理(safe_headers)
支持通过config.yaml配置外部API地址
实现了文件格式验证( mp4/avi/mov)和大小限制(10MB)