安全决策报告

smyx-environmental-anomaly-analysis

SKILL.md 声明仅做视频分析,但代码实际包含完整的用户身份管理系统(注册、凭证存储、API登录),存在文档欺骗和未声明的敏感操作

安装决策优先 来源: ClawHub 扫描时间: 23 天前
文件 29
IOC 10
越权项 3
发现 5
最直接的威胁证据
01
用户调用技能分析畜禽舍视频 初始入口 · SKILL.md
02
OpenIdUtil 自动初始化用户身份,创建或读取本地数据库 权限提升 · scripts/smyx_environmental_anomaly_analysis.py
03
自动调用 /sys/phoneLogin 注册用户并获取凭证 权限提升 · skills/smyx_common/scripts/util.py

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

阻止
攻击链与高危发现

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

通过
依赖与供应链卫生

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

攻击链

01
用户调用技能分析畜禽舍视频

初始入口 · SKILL.md:1

02
OpenIdUtil 自动初始化用户身份,创建或读取本地数据库

权限提升 · scripts/smyx_environmental_anomaly_analysis.py:68

03
自动调用 /sys/phoneLogin 注册用户并获取凭证

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

04
凭证(token/open_token)持久化到本地 SQLite 数据库

最终危害 · skills/smyx_common/scripts/dao.py:133

风险分是怎么被拉高的

文档欺骗 - 阴影功能 +20

SKILL.md 仅声明视频分析功能,但代码实现完整的用户身份管理系统(UserDao、User模型、自动注册)

凭证持久化存储 +10

token/openToken 存储在本地 SQLite 数据库,未在文档中声明

自动用户注册 +8

自动调用 /sys/phoneLogin API 注册用户,未在文档中声明

依赖无版本锁定 +4

requests>=2.28.0 无上限版本锁定

最关键的证据

高危 文档欺骗

文档声明与实际能力严重不符

SKILL.md 仅声明畜禽舍视频分析和环境传感器数据处理功能,但代码实际实现完整的用户身份管理系统,包括 UserDao、User 模型、自动注册用户到外部 API、凭证本地持久化等,与声明用途无关的阴影功能

skills/smyx_common/scripts/dao.py:133
如用户身份管理非必需功能,应移除相关代码;如为必需,应在 SKILL.md 中明确声明
高危 凭证窃取

自动注册用户并存储凭证

代码在运行时自动调用 /sys/phoneLogin API 注册用户,并将 token 和 open_token 持久化到本地 SQLite 数据库。这些凭证与外部服务关联,未在文档中声明

skills/smyx_common/scripts/util.py:343
明确告知用户此行为,或提供退出机制
中危 敏感访问

访问内部身份文件

OpenIdUtil.get_api_key_file_open_id() 读取 data/smyx-api-key.txt 中的内部身份值,这是未声明的敏感文件访问

skills/smyx_common/scripts/util.py:300
在文档中声明此文件访问行为
中危 供应链

依赖包无版本锁定

requests>=2.28.0 无上限版本锁定,存在依赖劫持风险

SKILL.md:1
锁定具体版本,如 requests==2.31.0
低危 文档欺骗

注释掉的可疑代码

skills/smyx_common/scripts/skill.py 中存在被注释的 subprocess 调用(ai_chat 方法),虽未执行但表明可能具备远程命令执行能力

skills/smyx_common/scripts/skill.py:30
移除未使用的代码,或明确说明其用途

声明能力 vs 实际能力

网络访问 通过
声明 READ
推断 READ
代码调用外部API进行视频分析和用户认证
文件系统 阻止
声明 NONE
推断 WRITE
skills/smyx_common/scripts/dao.py:94-98 创建和写入本地 SQLite 数据库
数据库 阻止
声明 NONE
推断 WRITE
skills/smyx_common/scripts/dao.py:133-138 UserDao 创建 sys_user 表存储用户凭证
环境变量 阻止
声明 NONE
推断 READ
skills/smyx_common/scripts/config.py:182-190 读取 OPENCLAW_SENDER_OPEN_ID、FEISHU_OPEN_ID 等环境变量

可疑产物与外联

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

SKILL.md:29

中危 外部 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 无上限版本锁定
pydash 8.0.6 pip
SQLAlchemy 2.0.46 pip
yaml 6.0.3 pip

文件构成

29 个文件 · 2699 行
Python 18 个文件 · 2363 行Markdown 3 个文件 · 301 行YAML 6 个文件 · 29 行Text 2 个文件 · 6 行
需关注文件 · 4
skills/smyx_common/scripts/util.py Python · 718 行
自动注册用户并存储凭证 · 访问内部身份文件
skills/smyx_common/scripts/dao.py Python · 499 行
文档声明与实际能力严重不符
SKILL.md Markdown · 262 行
依赖包无版本锁定 · https://lifeemergence.com/sample.html
skills/smyx_common/scripts/skill.py Python · 85 行
注释掉的可疑代码
其他文件 · config.py · skill.py · smyx_analysis.py · smyx_environmental_anomaly_analysis.py · api_service.py · api_service.py +2

安全亮点

代码结构清晰,模块化设计良好
使用 SQLAlchemy ORM 而非直接 SQL 拼接,降低 SQL 注入风险
数据库路径强制重定向到工作区 data 目录,避免污染其他位置
配置文件通过 YAML 管理,易于审计
API 响应包含 success 校验机制