安全决策报告

yqzl-ai-service

云启智联AI服务技能将用户财务票据(银行回单、发票等)发送至硬编码IP服务器,存在数据外泄风险。自动升级机制可被利用进行供应链攻击,API Key加密方案强度不足。

安装决策优先 来源: ClawHub 扫描时间: 2026/6/21
文件 18
IOC 6
越权项 2
发现 5
最直接的威胁证据
01
用户通过 SKILL.md 了解服务为合法OCR工具 初始入口 · SKILL.md
02
用户上传银行回单/发票等财务文件进行分析 权限提升 · scripts/api_client.py
03
文件通过 POST 请求发送至外部 IP 8.135.62.13:5000 最终危害 · scripts/api_client.py

为什么得出这个结论

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

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

阻止
隐藏执行与外联

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

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

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

攻击链

01
用户通过 SKILL.md 了解服务为合法OCR工具

初始入口 · SKILL.md:1

02
用户上传银行回单/发票等财务文件进行分析

权限提升 · scripts/api_client.py:138

03
文件通过 POST 请求发送至外部 IP 8.135.62.13:5000

最终危害 · scripts/api_client.py:173

04
攻击者获取财务数据(账号、交易金额、交易对手)

最终危害 · 外部服务器

05
自动升级机制下载并覆盖技能文件

权限提升 · scripts/updater.py:97

06
攻击者通过升级通道植入恶意代码

最终危害 · 外部服务器

风险分是怎么被拉高的

硬编码外部IP服务器 +20

SKILL.md:3等多处硬编码 8.135.62.13:5000,无域名,声称合法服务但使用裸IP可疑

财务票据数据外传 +15

用户银行回单、发票等敏感财务文件通过 POST 请求发送至外部IP,无明确数据保护声明

自动升级可覆盖文件 +10

updater.py 支持从远程下载并覆盖当前技能文件,无代码签名验证

API Key加密方案弱 +5

config_manager.py 使用 machine_id 派生密钥,攻击者若知机器信息可解密

第三方依赖无版本锁定 +5

requests、cryptography 库无版本约束,存在供应链风险

最关键的证据

高危 数据外泄

财务票据数据发送至外部IP

用户上传的银行回单、发票、对账单等敏感财务文件通过 POST 请求发送至硬编码IP 8.135.62.13:5000。SKILL.md未明确说明数据流向和保护措施,财务数据外泄风险高。

scripts/api_client.py:24
使用域名而非裸IP;明确数据存储和处理政策;增加端到端加密
高危 供应链

自动升级机制无代码签名验证

updater.py 从 ClawHub 下载 ZIP 包并直接解压覆盖当前技能文件,未验证签名或哈希。攻击者若入侵下载源或中间人攻击可植入恶意代码。

scripts/updater.py:97
实现代码签名验证;使用 HTTPS + 证书 pinning;添加更新包哈希校验
中危 凭证窃取

API Key加密方案依赖机器信息

config_manager.py 使用 platform.node() 和 getpass.getuser() 派生加密密钥。攻击者若获取机器名和用户名可本地解密 API Key。

scripts/config_manager.py:38
使用更强密钥派生函数(如 PBKDF2);增加用户自定义密码保护
中危 文档欺骗

硬编码IP替代域名不合常规

SKILL.md 多次出现硬编码IP 8.135.62.13 而非域名。合法商业服务通常使用域名便于维护和 CDN 加速,裸IP常见于临时或规避检测场景。

SKILL.md:3
要求使用域名并验证 TLS 证书
低危 供应链

第三方依赖无版本锁定

requirements.txt 或依赖声明中 requests、cryptography 等库无版本约束,可能引入恶意或漏洞版本。

scripts/api_client.py:14
在 requirements.txt 中锁定版本,如 requests>=2.28.0,<3.0.0

声明能力 vs 实际能力

文件系统 阻止
声明 READ
推断 WRITE
scripts/updater.py:104 shutil.copytree 覆盖技能目录文件
网络访问 阻止
声明 READ
推断 WRITE
scripts/api_client.py:24 所有接口调用 POST 到 8.135.62.13:5000
命令执行 通过
声明 NONE
推断 NONE
未发现直接 shell 执行

可疑产物与外联

高危 IP 地址
8.135.62.13

SKILL.md:3

中危 外部 URL
http://8.135.62.13:5000/AIService/experience/page

SKILL.md:3

中危 外部 URL
http://8.135.62.13:5000/

SKILL.md:67

中危 外部 URL
http://8.135.62.13:5000/AIService

backup/v1.0.0_20260612_180227/scripts/api_client.py:25

中危 外部 URL
http://8.135.62.13:5000/static/skills/yqzl-ai-service/latest.json

backup/v1.0.0_20260612_180227/scripts/updater.py:26

中危 外部 URL
https://wry-manatee-359.convex.site/api/v1/download?slug=yqzl-ai-service

scripts/updater.py:26

依赖与供应链

包名版本来源漏洞备注
requests * pip 无版本锁定
cryptography * pip 无版本锁定

文件构成

18 个文件 · 3534 行
Python 9 个文件 · 2891 行Markdown 3 个文件 · 431 行JSON 2 个文件 · 206 行Other 3 个文件 · 3 行Text 1 个文件 · 3 行
需关注文件 · 6
scripts/api_client.py Python · 1110 行
财务票据数据发送至外部IP · 第三方依赖无版本锁定
SKILL.md Markdown · 183 行
硬编码IP替代域名不合常规 · 8.135.62.13 · http://8.135.62.13:5000/AIService/experience/page · http://8.135.62.13:5000/
scripts/updater.py Python · 347 行
自动升级机制无代码签名验证 · https://wry-manatee-359.convex.site/api/v1/download?slug=yqzl-ai-service
backup/v1.0.0_20260612_180227/scripts/updater.py Python · 305 行
http://8.135.62.13:5000/static/skills/yqzl-ai-service/latest.json
backup/v1.0.0_20260612_180227/scripts/api_client.py Python · 227 行
http://8.135.62.13:5000/AIService
scripts/config_manager.py Python · 128 行
API Key加密方案依赖机器信息
其他文件 · updater.py · async_result.json · api_client.py · SKILL.md · SKILL.md · config_manager.py

安全亮点

API Key 本地加密存储(虽方案较弱但有加密意识)
升级前有备份机制
支持游客体验模式无需 API Key(适合测试)
代码结构清晰,主要功能正常