安全决策报告

smyx-environmental-anomaly-analysis

合法的畜禽养殖环境监测技能,功能与文档基本一致,存在自动身份创建、第三方云端数据发送和隐藏参数等可改进之处,但均为有文档支撑的正常行为,无恶意代码发现。

安装决策优先 来源: ClawHub 扫描时间: 29 天前
文件 30
IOC 12
越权项 0
发现 7

为什么得出这个结论

0/4 个维度触发
通过
声明与实际能力

声明资源与推断能力基本一致。

复核
隐藏执行与外联

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

通过
攻击链与高危发现

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

通过
依赖与供应链卫生

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

风险分是怎么被拉高的

第三方云端数据外传 +10

将视频/传感器数据、open_id 身份和历史报告发送到 lifeemergence.com,虽在 skill-card.md Known Risks 中有披露,但未在 SKILL.md 隐私声明中明确列出具体数据类型

静默身份自动创建 +8

无 open_id 时自动生成 User_xxx 并持久化到 SQLite,--open-id 参数隐藏(argparse.SUPPRESS),用户无感知。SKILL.md 有基本描述但粒度不足

静默登录注册 +5

Token 缺失时自动 POST /sys/phoneLogin 注册(silent=1),实现云端账户自动关联,文档未明确说明

依赖外部硬编码 API 地址 +5

API 端点硬编码在 config.yaml(prod 环境指向 lifeemergence.com),完全依赖第三方服务可用性

正面:无高危指标 +-8

无 base64/eval 混淆、无远程 shell 执行、无凭证遍历、无敏感路径访问、依赖已版本锁定

最关键的证据

中危 供应链

完全依赖第三方云服务(lifeemergence.com)

API 端点硬编码在 config.yaml prod 环境:base_url_health=https://lifeemergence.com/jeecg-boot-xzgz, base_url_open_api=https://open.lifeemergence.com/smyx-open-api。视频/传感器数据、open_id 身份信息均发送至该服务。

skills/smyx_common/scripts/config.yaml:2
确认对 lifeemergence.com 的信任级别;考虑在部署前评估数据保护协议
中危 文档欺骗

静默身份创建未充分告知

OpenIdUtil.resolve_current_open_id() 在无 open_id 时自动生成 User_xxx 并持久化到 SQLite,--open-id 参数使用 argparse.SUPPRESS 隐藏。SKILL.md 仅模糊提及"系统自动处理",未说明会创建本地数据库记录。

skills/smyx_common/scripts/util.py:258
在隐私声明中明确说明会创建本地用户记录,以及记录内容(username/token)
中危 文档欺骗

静默登录注册未声明

当本地无 Token 且无 open_id 时,RequestUtil.http_request() 自动调用 /sys/phoneLogin 进行静默注册(silent=1),将 open_id 用作手机号参数向云端注册账户。

skills/smyx_common/scripts/util.py:306
在 SKILL.md 中明确说明"首次使用时可能自动注册云端账户"
低危 权限提升

读取多个环境变量

config.py 的 ConstantEnum.init() 读取 OPENCLAW_SENDER_OPEN_ID、OPENCLAW_SENDER_USERNAME、FEISHU_OPEN_ID 等环境变量,并写入 CURRENT__OPEN_ID、CURRENT__USER_NAME。这些值会被用于 API 请求中。

skills/smyx_common/scripts/config.py:168
确认这些环境变量来源可信,不含敏感信息
低危 敏感访问

本地数据库存储凭证

UserDao 将 token 和 open_token 明文存储在 SQLite 数据库(workspace data 目录下的 shared.db)中。

skills/smyx_common/scripts/dao.py:76
确保 data 目录权限受限,避免其他进程读取
低危 文档欺骗

隐私声明数据覆盖不足

SKILL.md 隐私声明称"仅采集与畜禽舍环境异常联动直接相关的图像/视频/传感器数据",但实际还会发送 pnaUserName(身份标识)、tenantCode 等内部参数到云端,这些在隐私声明中未提及。

skills/smyx_common/scripts/util.py:360
完善隐私声明,明确列出所有传输至第三方的数据类型
提示 凭证窃取

隐藏参数 --api-key 和 --open-id

--api-key 和 --open-id 使用 argparse.SUPPRESS 隐藏,不会在帮助信息中显示。这是 API 客户端的常见做法,但结合静默身份创建,审查难度增加。

scripts/smyx_environmental_anomaly_analysis.py:44
考虑将 --api-key 改为显式参数;--open-id 的 SUPPRESS 可接受但应在文档说明

声明能力 vs 实际能力

文件系统 通过
声明 READ
→
推断 READ
SKILL.md:通过 --input 读取本地文件; skills/smyx_analysis/scripts/skill.py:64 open(input_path,'rb')
网络访问 通过
声明 READ
→
推断 WRITE
SKILL.md:声明通过 API 服务完成分析请求; skills/smyx_common/scripts/util.py:344 POST 请求发送视频/数据/身份到外部 API,实质是网络 WRITE
数据库 通过
声明 NONE
→
推断 WRITE
SKILL.md 未声明本地数据库; skills/smyx_common/scripts/dao.py:SQLite 存储用户 token/open_token; skills/smyx_common/scripts/util.py:285 将云端 token 写入本地库
环境变量 通过
声明 NONE
→
推断 READ
skills/smyx_common/scripts/config.py:读取 OPENCLAW_SENDER_OPEN_ID, OPENCLAW_SENDER_USERNAME, FEISHU_OPEN_ID
命令执行 通过
声明 NONE
→
推断 NONE
无 subprocess/shell 执行

可疑产物与外联

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

SKILL.md:29

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

skill-card.md:9

中危 外部 URL
https://clawhub.ai/18072937735/skills/smyx-environmental-anomaly-analysis

skill-card.md:35

中危 外部 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 pip 否 版本锁定,无已知漏洞
SQLAlchemy 2.0.46 pip 否 版本锁定,无已知漏洞
PyYAML 6.0.3 pip 否 版本锁定(修复了 CVE-2020-14343)
requests >=2.28.0 pip 否 范围锁定,可接受

文件构成

30 个文件 · 2755 行
Python 18 个文件 · 2363 行Markdown 4 个文件 · 357 行YAML 6 个文件 · 29 行Text 2 个文件 · 6 行
需关注文件 · 6
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 · 262 行
https://lifeemergence.com/sample.html
scripts/smyx_environmental_anomaly_analysis.py Python · 102 行
隐藏参数 --api-key 和 --open-id
skill-card.md Markdown · 56 行
https://clawhub.ai/user/18072937735 · https://clawhub.ai/18072937735/skills/smyx-environmental-anomaly-analysis
其他文件 · skill.py · smyx_analysis.py · api_service.py · skill.py · api_service.py · config.py

安全亮点

所有 Python 依赖均已版本锁定(pydash==8.0.6, SQLAlchemy==2.0.46, PyYAML==6.0.3),无 supply_chain 风险
无 base64 编码、eval、bash 管道等高危代码混淆手法
无远程 shell 执行(subprocess)或系统命令注入
无遍历 os.environ 匹配敏感关键字的行为
无访问 ~/.ssh、~/.aws、.env 等绝对路径敏感文件
skill-card.md 已主动披露已知的云端数据发送和静默身份创建风险
代码结构清晰,API 调用逻辑与业务逻辑分离
YAML 配置支持多环境(dev/prod/test),便于安全测试