安全决策报告

smyx-pet-grooming-stress-behavior-analysis

技能包含未声明的subprocess执行能力和凭证存储机制,虽代码被注释但意图可疑,且通过环境变量和数据库持续追踪用户身份,发送宠物视频到外部服务器。

安装决策优先 来源: ClawHub 扫描时间: 12 天前
文件 30
IOC 12
越权项 4
发现 6
最直接的威胁证据
01
用户安装技能并上传宠物美容视频 初始入口 · SKILL.md
02
技能自动创建User_开头的默认身份并存储到数据库 权限提升 · skills/smyx_common/scripts/util.py
03
视频和身份凭证通过HTTP发送到外部API 权限提升 · skills/smyx_analysis/scripts/skill.py

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

阻止
攻击链与高危发现

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

通过
依赖与供应链卫生

依赖结构存在,但暂未看到明显高危告警。

攻击链

01
用户安装技能并上传宠物美容视频

初始入口 · SKILL.md:1

02
技能自动创建User_开头的默认身份并存储到数据库

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

03
视频和身份凭证通过HTTP发送到外部API

权限提升 · skills/smyx_analysis/scripts/skill.py:95

04
可选:若ai_chat方法被激活,可执行任意shell命令

最终危害 · skills/smyx_common/scripts/skill.py:36

风险分是怎么被拉高的

未声明的shell执行能力 +25

smyx_common/scripts/skill.py中存在ai_chat方法,可通过subprocess执行openclaw agent命令,SKILL.md未声明此能力

用户身份追踪机制 +20

OpenIdUtil自动创建/追踪User_开头的默认用户,存储token到本地SQLite数据库

凭证本地存储 +15

UserDao将用户token/open_token存储在workspace/data/smyx-common-claw.db中

环境变量读取敏感信息 +10

读取OPENCLAW_SENDER_OPEN_ID, OPENCLAW_SENDER_USERNAME, FEISHU_OPEN_ID等环境变量

外部API数据传输 +10

用户视频和身份信息发送到外部API服务器

最关键的证据

高危 代码执行

未声明的subprocess执行能力

smyx_common/scripts/skill.py中存在ai_chat方法,包含完整的subprocess.run()代码用于执行openclaw agent命令,虽被注释但保留了完整功能结构,表明开发者有意保留此能力用于未来激活。

skills/smyx_common/scripts/skill.py:23
删除ai_chat方法或明确在SKILL.md中声明此能力
高危 凭证窃取

用户凭证本地存储

UserDao将用户token、open_token、username等敏感凭证存储在workspace/data/smyx-common-claw.db数据库中,攻击者可直接读取获取用户身份。

skills/smyx_common/scripts/dao.py:189
不要在本地存储凭证,使用内存临时存储或加密存储
高危 文档欺骗

身份追踪机制未声明

SKILL.md未提及技能会自动创建User_开头的默认用户、追踪用户行为、存储账户token到本地数据库。OpenIdUtil.resolve_current_open_id()在每次API调用时自动解析并关联用户身份。

skills/smyx_common/scripts/util.py:280
在SKILL.md中明确声明身份创建和追踪机制
中危 敏感访问

环境变量读取敏感信息

ConstantEnum.init()从环境变量读取OPENCLAW_SENDER_OPEN_ID, OPENCLAW_SENDER_USERNAME, FEISHU_OPEN_ID等敏感标识,用于追踪用户身份。

skills/smyx_common/scripts/config.py:118
明确声明需要读取的环境变量及其用途
中危 数据外泄

视频数据外传外部API

用户上传的宠物美容视频通过HTTP POST发送到外部API服务器(api.health.com或类似地址),视频内容和用户身份信息同时传输。

skills/smyx_analysis/scripts/skill.py:95
明确告知用户视频数据的外传目的地,并在部署前获取用户同意
中危 持久化

数据库路径强制重定向

Dao.get_db_path()强制将数据库文件重定向到workspace/data/目录,实现了跨技能的持久化存储机制,可被其他技能利用。

skills/smyx_common/scripts/dao.py:54
评估此机制是否被恶意技能滥用

声明能力 vs 实际能力

文件系统 阻止
声明 READ
推断 WRITE
skills/smyx_common/scripts/util.py:168 FileUtil.mkdir()创建目录
网络访问 阻止
声明 READ
推断 WRITE
skills/smyx_common/scripts/util.py:262 发送HTTP请求携带token/身份信息
命令执行 通过
声明 NONE
推断 WRITE
skills/smyx_common/scripts/skill.py:23-43 注释的subprocess代码
环境变量 阻止
声明 NONE
推断 READ
skills/smyx_common/scripts/config.py:118-122 读取多个环境变量
数据库 阻止
声明 NONE
推断 WRITE
skills/smyx_common/scripts/dao.py:47 存储用户凭证到SQLite

可疑产物与外联

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

SKILL.md:37

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

skill-card.md:9

中危 外部 URL
https://clawhub.ai/18072937735/skills/smyx-pet-grooming-stress-behavior-analysis

skill-card.md:39

中危 外部 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中声明但实际代码中未直接使用
pydash 8.0.6 pip 已锁定版本
SQLAlchemy 2.0.46 pip 已锁定版本

文件构成

30 个文件 · 2712 行
Python 18 个文件 · 2363 行Markdown 4 个文件 · 314 行YAML 6 个文件 · 29 行Text 2 个文件 · 6 行
需关注文件 · 7
skills/smyx_common/scripts/util.py Python · 718 行
身份追踪机制未声明
skills/smyx_common/scripts/config.py Python · 399 行
环境变量读取敏感信息
skills/smyx_common/scripts/dao.py Python · 499 行
用户凭证本地存储 · 数据库路径强制重定向
SKILL.md Markdown · 215 行
https://lifeemergence.com/sample.html
skills/smyx_analysis/scripts/skill.py Python · 175 行
视频数据外传外部API
skill-card.md Markdown · 60 行
https://clawhub.ai/user/18072937735 · https://clawhub.ai/18072937735/skills/smyx-pet-grooming-stress-behavior-analysis
skills/smyx_common/scripts/skill.py Python · 85 行
未声明的subprocess执行能力
其他文件 · smyx_analysis.py · smyx_pet_grooming_stress_behavior_analysis.py · api_service.py · api_service.py · config.py

安全亮点

依赖包版本已锁定(pydash==8.0.6, SQLAlchemy==2.0.46)
使用SQLAlchemy ORM而非裸SQL,减小SQL注入风险
文件上传有格式验证和大小限制(10MB)
HTTP请求有超时控制(120秒)