Skill Trust Decision

smyx-environmental-anomaly-analysis

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

Install decision first Source: ClawHub Scanned: 29 days ago
Files 30
Artifacts 12
Violations 0
Findings 7

Why this conclusion was reached

0/4 dimensions flagged
Pass
Declared vs actual capability

Declared resources and inferred behavior are broadly aligned.

Review
Hidden execution and egress

12 lower-risk artifacts were extracted and still need context.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Pass
Dependencies and supply chain hygiene

Dependencies are present but no obvious high-risk issue stands out.

What drove the risk score up

第三方云端数据外传 +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 执行、无凭证遍历、无敏感路径访问、依赖已版本锁定

Most important evidence

Medium Supply Chain

完全依赖第三方云服务(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 的信任级别;考虑在部署前评估数据保护协议
Medium Doc Mismatch

静默身份创建未充分告知

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)
Medium Doc Mismatch

静默登录注册未声明

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

skills/smyx_common/scripts/util.py:306
在 SKILL.md 中明确说明"首次使用时可能自动注册云端账户"
Low Priv Escalation

读取多个环境变量

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
确认这些环境变量来源可信,不含敏感信息
Low Sensitive Access

本地数据库存储凭证

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

skills/smyx_common/scripts/dao.py:76
确保 data 目录权限受限,避免其他进程读取
Low Doc Mismatch

隐私声明数据覆盖不足

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

skills/smyx_common/scripts/util.py:360
完善隐私声明,明确列出所有传输至第三方的数据类型
Info Credential Theft

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

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

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

Declared capability vs actual capability

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

Suspicious artifacts and egress

Medium External URL
https://lifeemergence.com/sample.html

SKILL.md:29

Medium External URL
https://clawhub.ai/user/18072937735

skill-card.md:9

Medium External URL
https://clawhub.ai/18072937735/skills/smyx-environmental-anomaly-analysis

skill-card.md:35

Medium External URL
http://192.168.1.234:9601/smyx-open-api

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

Medium External URL
http://192.168.1.234:4100

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

Medium External URL
http://192.168.1.234:7070/jeecg-boot-xzgz

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

Medium External URL
https://livemonitortest.lifeemergence.com/smyx-open-api

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

Medium External URL
http://livemonitortest.lifeemergence.com

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

Medium External URL
https://healthtest.lifeemergence.com/jeecg-boot-xzgz

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

Medium External URL
https://lifeemergence.com/jeecg-boot-xzgz

skills/smyx_common/scripts/config.yaml:4

Medium External URL
https://open.lifeemergence.com/smyx-open-api

skills/smyx_common/scripts/config.yaml:5

Medium External URL
http://livemonitor.lifeemergence.com

skills/smyx_common/scripts/config.yaml:6

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
pydash 8.0.6 pip No 版本锁定,无已知漏洞
SQLAlchemy 2.0.46 pip No 版本锁定,无已知漏洞
PyYAML 6.0.3 pip No 版本锁定(修复了 CVE-2020-14343)
requests >=2.28.0 pip No 范围锁定,可接受

File composition

30 files · 2755 lines
Python 18 files · 2363 linesMarkdown 4 files · 357 linesYAML 6 files · 29 linesText 2 files · 6 lines
Files of concern · 6
skills/smyx_common/scripts/util.py Python · 718 lines
静默身份创建未充分告知 · 静默登录注册未声明 · 隐私声明数据覆盖不足
skills/smyx_common/scripts/config.py Python · 399 lines
读取多个环境变量
skills/smyx_common/scripts/dao.py Python · 499 lines
本地数据库存储凭证
SKILL.md Markdown · 262 lines
https://lifeemergence.com/sample.html
scripts/smyx_environmental_anomaly_analysis.py Python · 102 lines
隐藏参数 --api-key 和 --open-id
skill-card.md Markdown · 56 lines
https://clawhub.ai/user/18072937735 · https://clawhub.ai/18072937735/skills/smyx-environmental-anomaly-analysis
Other files · skill.py · smyx_analysis.py · api_service.py · skill.py · api_service.py · config.py

Security positives

所有 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),便于安全测试