安全决策报告

smyx-adult-facial-fatigue-stress-index-analysis

合法面部疲劳/压力分析技能,核心功能清晰,无恶意代码,但存在未声明的系统交互行为(环境变量读取、自动身份创建)。

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

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

通过
攻击链与高危发现

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

复核
依赖与供应链卫生

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

风险分是怎么被拉高的

未声明的环境变量读取 +8

代码读取 OPENCLAW_SENDER_OPEN_ID / OPENCLAW_SENDER_USERNAME / FEISHU_OPEN_ID,但 SKILL.md 未声明

未声明的自动身份创建与数据库持久化 +6

OpenIdUtil 自动生成 User_xxxxxx 并写入 SQLite 数据库,SKILL.md 未提及

内部 API 密钥存储机制 +4

支持读写 data/smyx-api-key.txt 存储内部标识,行为未在文档说明

依赖包版本锁定(+2抵消分) +-2

requirements.txt 有明确版本约束(pydash==8.0.6, SQLAlchemy==2.0.46),降低供应链风险

最关键的证据

低危 文档欺骗

未声明的环境变量读取行为

SKILL.md 完全未提及代码会读取 OPENCLAW_SENDER_OPEN_ID、OPENCLAW_SENDER_USERNAME、FEISHU_OPEN_ID 等环境变量,用于自动初始化用户身份。

skills/smyx_common/scripts/config.py:91
在 SKILL.md 资源索引或注意事项章节补充说明:技能会自动读取特定环境变量用于身份关联。
低危 文档欺骗

未声明的自动身份创建与数据库持久化

OpenIdUtil 在未找到身份时会自动生成 User_xxxxxx 格式用户名(6位随机哈希),创建 SQLite 记录并存入 smyx-common-claw.db,这是影子功能。

skills/smyx_common/scripts/util.py:275
在 SKILL.md 中声明:技能会自动创建本地缺省用户标识并持久化存储,以支持报告历史关联。
低危 敏感访问

未声明的内部凭证文件读写

代码支持读写 data/smyx-api-key.txt 存储内部 API 标识,并在数据库中保存 token/open_token,SKILL.md 未提及此持久化存储机制。

skills/smyx_common/scripts/util.py:230
在 SKILL.md 中补充说明技能会在工作区 data 目录存储凭证信息。
提示 敏感访问

Agent 工作区感知功能

AgentContextUtil 自动检测当前 Agent 工作区根目录,用于决定数据库存放路径,代码有详细的路径重定向逻辑确保隔离。

skills/smyx_common/scripts/util.py:158
属于框架层设计,不影响用户安全,可忽略。

声明能力 vs 实际能力

文件系统 阻止
声明 NONE
→
推断 WRITE
scripts/smyx_adult_facial_fatigue_stress_index_analysis.py:62 写入结果文件
网络访问 阻止
声明 NONE
→
推断 WRITE
skills/smyx_common/scripts/util.py:217 requests.request() 调用外部 API
数据库 阻止
声明 NONE
→
推断 WRITE
skills/smyx_common/scripts/dao.py:91 SQLite 数据库写入用户标识
环境变量 阻止
声明 NONE
→
推断 READ
skills/smyx_common/scripts/config.py:91-96 读取 OPENCLAW/FEISHU 环境变量
命令执行 通过
声明 NONE
→
推断 NONE
skills/smyx_common/scripts/skill.py:44 subprocess 调用已被注释,不执行

可疑产物与外联

中危 外部 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-adult-facial-fatigue-stress-index-analysis

skill-card.md:40

中危 外部 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 否 版本锁定
PyYAML 6.0.3 pip 否 版本锁定

文件构成

30 个文件 · 2706 行
Python 18 个文件 · 2363 行Markdown 4 个文件 · 308 行YAML 6 个文件 · 29 行Text 2 个文件 · 6 行
需关注文件 · 4
skills/smyx_common/scripts/util.py Python · 718 行
未声明的自动身份创建与数据库持久化 · 未声明的内部凭证文件读写 · Agent 工作区感知功能
skills/smyx_common/scripts/config.py Python · 399 行
未声明的环境变量读取行为
SKILL.md Markdown · 178 行
https://lifeemergence.com/sample.html
skill-card.md Markdown · 58 行
https://clawhub.ai/user/smyx-sunjinhui · https://clawhub.ai/smyx-sunjinhui/skills/smyx-adult-facial-fatigue-stress-index-analysis
其他文件 · dao.py · skill.py · smyx_analysis.py · smyx_adult_facial_fatigue_stress_index_analysis.py · api_service.py · skill.py +2

安全亮点

代码无恶意行为:无 base64 编码、无 eval、无反向 shell、无凭证收割
API 端点均为明确域名 lifeemergence.com,无裸 IP 或未知第三方
依赖包版本严格锁定(pydash==8.0.6, SQLAlchemy==2.0.46, PyYAML==6.0.3)
数据库路径强制重定向到工作区共享 data 目录,防止跨技能污染
subprocess 调用已被注释,不会执行外部命令
代码包含 try-except 异常处理,不会因文件/网络错误泄露堆栈
生物特征数据仅发送至云端 API,不在本地存储或二次传播