安全决策报告

asoul-support

硬编码外部通信目标(Discord用户ID)且通过subprocess调用外部工具发送数据,但通知内容仅限开播状态,无凭证外泄证据,意图不明。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/23
文件 13
IOC 28
越权项 1
发现 5
最直接的威胁证据
01
用户安装 asoul-support skill(伪装成粉丝应援工具) 初始入口 · SKILL.md
02
subprocess 调用 openclaw CLI 向硬编码的 Discord 用户发送通知 权限提升 · scripts/heartbeat.py
03
开播/下播状态通知发送到外部 Discord(当前仅状态信息,无敏感数据) 最终危害 · scripts/heartbeat.py

为什么得出这个结论

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

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

阻止
隐藏执行与外联

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

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

没有完整依赖信息,供应链判断需要保留弹性。

攻击链

01
用户安装 asoul-support skill(伪装成粉丝应援工具)

初始入口 · SKILL.md:1

02
subprocess 调用 openclaw CLI 向硬编码的 Discord 用户发送通知

权限提升 · scripts/heartbeat.py:21

03
开播/下播状态通知发送到外部 Discord(当前仅状态信息,无敏感数据)

最终危害 · scripts/heartbeat.py:21

风险分是怎么被拉高的

硬编码 Discord 用户 ID 进行外部通信 +20

heartbeat.py:18 硬编码 _DISCORD_TARGET = 'user:1479415368249507881',通过 subprocess 调用 openclaw CLI 发送通知

subprocess 调用外部工具 +15

heartbeat.py:21-27 使用 subprocess.run 调用 openclaw message send,绕过标准 allowed-tools 映射

写入用户主目录日志 +10

写入 ~/.openclaw/logs/asoul_activity.jsonl,虽属声明范围但需关注数据收集范围

最关键的证据

高危 权限提升

通过 subprocess 调用外部工具(未声明权限)

heartbeat.py 使用 subprocess.run 调用 openclaw CLI 发送 Discord 通知,SKILL.md 未声明 shell 执行或外部工具调用能力。subprocess 属于 shell:WRITE 级别,但未在文档中声明。

scripts/heartbeat.py:21
移除 subprocess 调用,改用平台提供的安全通信方式,或在 SKILL.md 中明确声明 shell:WRITE 权限及外部工具调用能力。
高危 数据外泄

硬编码外部通信目标(Discord 用户 ID)

_DISCORD_TARGET 硬编码为 'user:1479415368249507881',将开播状态通知发送到指定 Discord 用户。虽然当前通知内容仅为开播状态(无凭证),但存在通过通知渠道外传数据的潜在风险。

scripts/heartbeat.py:18
移除硬编码目标,改为通过 skill 配置接收通知渠道,或完全移除 Discord 通知功能。
中危 文档欺骗

Discord 通知功能未在文档中声明

SKILL.md 中未提及 Discord 通知功能,用户无法得知工具会在开播时下播时向外部 Discord 用户发送消息。

SKILL.md:1
在 SKILL.md 中明确说明是否发送外部通知、通知内容及目标。
中危 敏感访问

写入用户主目录日志文件

活动日志写入 ~/.openclaw/logs/asoul_activity.jsonl,包含开播检测记录、挂机时长等数据。虽然用于汇总报告,但收集了用户活跃时段等行为数据。

scripts/heartbeat.py:39
明确告知用户日志收集范围,或提供关闭日志选项。
低危 供应链

零外部依赖声明与实际一致

SKILL.md 声明「零外部依赖,纯标准库」,代码审查确认所有脚本仅使用 Python 标准库,无第三方依赖引入。

SKILL.md:1
保持现状,无风险。

声明能力 vs 实际能力

文件系统 通过
声明 WRITE
推断 WRITE
SKILL.md:各脚本读写 .cookies.json、写入日志
网络访问 通过
声明 READ
推断 WRITE
SKILL.md:调用B站API发帖弹幕、心跳
命令执行 阻止
声明 NONE
推断 WRITE
heartbeat.py:21 subprocess.run(["openclaw", "message", "send", ...])
环境变量 通过
声明 NONE
推断 READ
通过 os.environ 访问 Cookie(间接通过文件)
剪贴板 通过
声明 NONE
推断 NONE
无剪贴板访问

可疑产物与外联

高危 IP 地址
131.0.0.0

scripts/checkin.py:18

中危 外部 URL
https://openclaw.ai

PROMO.md:5

中危 外部 URL
https://docs.openclaw.ai

PROMO.md:17

中危 外部 URL
https://www.bilibili.com

PROMO.md:27

中危 外部 URL
https://www.bilibili.com」

PROMO_XHS.txt:44

中危 外部 URL
https://api.live.bilibili.com/msg/send

scripts/checkin.py:19

中危 外部 URL
https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids

scripts/checkin.py:81

中危 外部 URL
https://live.bilibili.com

scripts/checkin.py:86

中危 外部 URL
https://api.live.bilibili.com/xlive/app-ucenter/v1/fansMedal/panel?page=

scripts/checkin.py:138

中危 外部 URL
https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear

scripts/checkin.py:175

中危 外部 URL
https://live.bilibili.com/

scripts/checkin.py:211

中危 外部 URL
https://space.bilibili.com/

scripts/dynamics.py:123

依赖与供应链

没有结构化依赖告警。

文件构成

13 个文件 · 2739 行
Python 5 个文件 · 2061 行Markdown 5 个文件 · 435 行Text 2 个文件 · 238 行JSON 1 个文件 · 5 行
需关注文件 · 7
scripts/heartbeat.py Python · 674 行
通过 subprocess 调用外部工具(未声明权限) · 硬编码外部通信目标(Discord 用户 ID) · 写入用户主目录日志文件 · https://api.live.bilibili.com/room/v1/Room/get_info?room_id= · https://api.live.bilibili.com/xlive/web-room/v1/index/roomEntryAction · https://live-trace.bilibili.com/xlive/data-interface/v1/heartbeat/mobileHeartBeat · https://api.live.bilibili.com/User/userOnlineHeart · [email protected]
scripts/videos.py Python · 493 行
https://api.bilibili.com/x/web-interface/nav · https://api.bilibili.com/x/space/wbi/arc/search? · https://api.bilibili.com/x/web-interface/archive/like · https://api.bilibili.com/x/web-interface/coin/add · https://api.bilibili.com/x/v3/fav/resource/deal · https://api.bilibili.com/x/v3/fav/folder/created/list-all?up_mid= · https://www.bilibili.com/video/
scripts/checkin.py Python · 408 行
131.0.0.0 · https://api.live.bilibili.com/msg/send · https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids · https://live.bilibili.com · https://api.live.bilibili.com/xlive/app-ucenter/v1/fansMedal/panel?page= · https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear · https://live.bilibili.com/
scripts/dynamics.py Python · 365 行
https://space.bilibili.com/ · https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid= · https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/thumb · https://t.bilibili.com · https://t.bilibili.com/
PROMO_XHS.txt Text · 144 行
https://www.bilibili.com」
SKILL.md Markdown · 95 行
Discord 通知功能未在文档中声明 · 零外部依赖声明与实际一致
PROMO.md Markdown · 84 行
https://openclaw.ai · https://docs.openclaw.ai · https://www.bilibili.com
其他文件 · daily_summary.py · persona.md · README.md · text2speech.md · PROMO_XHS_V4.txt

安全亮点

零外部依赖,仅使用 Python 标准库,供应链风险极低
文档描述与代码行为基本一致,无明显阴影功能
Cookie 存储使用 0o600 权限保护
无 Base64 编码执行、eval() 等危险模式
所有 B站 API 调用均为官方接口,无可疑网络请求
无凭证收割、敏感路径遍历等恶意行为