安全决策报告

self-evolution-engine

技能具备真实自我进化功能,但存在未声明的支付凭证收割(硬编码API密钥)和文档未覆盖的阴影功能(payment.py billing集成),结合无版本锁定的依赖管理,构成中等可疑水平。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/10
文件 9
IOC 2
越权项 5
发现 7
最直接的威胁证据
01
用户读取SKILL.md,误以为只是性能监控工具 初始入口 · SKILL.md
02
用户执行payment.py或导入payment模块,触发硬编码API密钥随网络请求发出 权限提升 · payment.py
03
evolution_generator访问/root/.openclaw/workspace/skills目录,可读写任意skill文件 权限提升 · scripts/evolution_generator.py

为什么得出这个结论

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

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

阻止
隐藏执行与外联

提取到 1 个高危 IOC 或外联信号。

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

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

攻击链

01
用户读取SKILL.md,误以为只是性能监控工具

初始入口 · SKILL.md:1

02
用户执行payment.py或导入payment模块,触发硬编码API密钥随网络请求发出

权限提升 · payment.py:22

03
evolution_generator访问/root/.openclaw/workspace/skills目录,可读写任意skill文件

权限提升 · scripts/evolution_generator.py:22

04
恶意方获取暴露的BILLING_API_KEY后可滥用billing服务,或通过修改其他skill文件注入后门

最终危害 · payment.py:12

风险分是怎么被拉高的

硬编码API密钥暴露 +20

payment.py:12 硬编码BILLING_API_KEY,该密钥随代码分发存在泄露风险

文档阴影功能 +15

SKILL.md未声明payment.py的支付验证功能,属73.2%恶意skill特征的阴影功能

缺失依赖版本锁定 +8

requirements.txt中pandas、requests等关键依赖无版本约束,存在供应链攻击面

文档引用缺失 +2

SKILL.md引用了不存在的references文件(best-practices.md等)

最关键的证据

高危 凭证窃取

硬编码API密钥暴露

payment.py第12行硬编码BILLING_API_KEY='sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2',该密钥随skill代码分发,若上传至公开仓库或遭代码泄露将直接导致billing账户被滥用。

payment.py:12
将API密钥存储于环境变量SKILLPAY_API_KEY,代码中通过os.environ.get('SKILLPAY_API_KEY')读取,永不硬编码
中危 文档欺骗

未声明的支付验证阴影功能

SKILL.md声明本skill为'自我进化引擎',完全未提及payment.py的billing集成功能。但payment.py在__main__中直接调用require_payment(),若该文件被直接执行或被其他脚本导入,将强制执行支付验证逻辑,构成阴影功能。

payment.py:122
在SKILL.md工具清单中明确列出payment.py,并在usage中说明支付验证流程
中危 文档欺骗

引用不存在的参考文档

SKILL.md引用了多个不存在的文档:references/evolution-strategies.md、references/best-practices.md、references/api-reference.md。这使得用户无法获得声称的完整文档,降低可审计性。

SKILL.md:88
移除不存在的文档引用,或创建对应的文档文件
中危 供应链

依赖无版本锁定

requirements.txt中python-dateutil、pandas、numpy、psutil、matplotlib等关键依赖均未指定精确版本(使用>=)。攻击者可发布含恶意代码的相同包名新版本,或因依赖解析引入有害版本。

requirements.txt:1
使用精确版本号(==)锁定所有依赖,如python-dateutil==2.8.2
中危 权限提升

未声明的文件系统越权访问

evolution_generator.py和version_manager.py将目标workspace硬编码为/root/.openclaw/workspace/skills,可读取和覆盖该路径下任意skill的.py/.md/.json/.txt文件。SKILL.md未声明此文件系统越权能力。

scripts/evolution_generator.py:22
在SKILL.md声明filesystem:WRITE及目标范围,或限制为仅操作logs/.evolutions等隔离目录
低危 文档欺骗

工具清单声称不存在的脚本

SKILL.md工具清单列出'feedback_learner.py',但scripts/目录下实际不存在该文件。

SKILL.md:42
移除对不存在文件的引用,或实现该功能
低危 供应链

使用MD5计算文件校验和

version_manager.py:59使用MD5计算快照文件校验和,MD5已被证实存在碰撞攻击,不适合安全场景。

scripts/version_manager.py:59
改用SHA-256或SHA-3以确保完整性验证安全

声明能力 vs 实际能力

文件系统 阻止
声明 NONE
推断 WRITE
performance_monitor.py:50-54 创建logs目录并写入jsonl;evolution_generator.py:22-23 创建.evolutions目录
网络访问 阻止
声明 NONE
推断 READ
payment.py:22-23 发起POST请求至skillpay.me API,包含X-API-Key头
文件系统 阻止
声明 NONE
推断 WRITE
version_manager.py:71-85 复制skills目录下任意文件创建快照,有权限覆盖目标文件
环境变量 阻止
声明 NONE
推断 READ
payment.py:107 读取os.environ.get('SKILLPAY_USER_ID')
技能调用 阻止
声明 NONE
推断 WRITE
evolution_generator.py:22 指向/root/.openclaw/workspace/skills,有能力修改其他skill文件

可疑产物与外联

高危 API 密钥
API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2"

payment.py:12

中危 外部 URL
https://skillpay.me

payment.py:11

依赖与供应链

包名版本来源漏洞备注
python-dateutil >=2.8.0 pip 无版本锁定
pandas >=2.0.0 pip 无版本锁定
numpy >=1.24.0 pip 无版本锁定
psutil >=5.9.0 pip 无版本锁定
matplotlib >=3.7.0 pip 无版本锁定
requests implicit pip payment.py使用但未在requirements.txt中声明

文件构成

9 个文件 · 1662 行
Python 5 个文件 · 1300 行Markdown 2 个文件 · 329 行JSON 1 个文件 · 19 行Text 1 个文件 · 14 行
需关注文件 · 5
scripts/evolution_generator.py Python · 394 行
未声明的文件系统越权访问
scripts/version_manager.py Python · 283 行
使用MD5计算文件校验和
payment.py Python · 142 行
硬编码API密钥暴露 · 未声明的支付验证阴影功能 · API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" · https://skillpay.me
SKILL.md Markdown · 84 行
引用不存在的参考文档 · 工具清单声称不存在的脚本
requirements.txt Text · 14 行
依赖无版本锁定
其他文件 · error_analyzer.py · performance_monitor.py · architecture.md · _meta.json

安全亮点

进化应用需显式--confirm确认,有人工审核保护
version_manager每次回滚前自动创建快照备份
evolution_generator patches实际为模拟模式(simulation)不会自动写入
代码结构清晰,有完整类型注解和文档字符串
使用argparse提供标准化CLI接口