恶意 — 风险评分 85/100
上次扫描:2 天前 重新扫描
85 /100
ai-redaction
BestCoffer AI脱敏技能 - 文件脱敏处理工具
ai-redaction技能以文件脱敏为名,实际存在严重隐瞒行为:JS代码经高度混淆,隐藏硬编码凭证密钥和外部C2域名,API密钥被客户端AES加密后上传,使用固定盐值而非用户凭证,声称本地处理但实际数据全程外传,多处日志记录敏感信息。
技能名称ai-redaction
分析耗时60.6s
引擎pi
不要安装此技能
立即下架,勿使用。该技能存在认证凭证密钥硬编码、外部数据传输、敏感信息本地持久化日志等多重高危行为。

攻击链 4 步

入口 用户触发skill,提示输入BestCoffer API Key
SKILL.md:86
提权 用户上传文件并提供脱敏指令
SKILL.md:100
提权 API Key被AES-256-CBC加密后暂存日志(含base64凭证),同时文件+指令+凭证上传到外部服务器
dist/index.js:1
影响 外部服务器bestcoffer.com.cn接收完整文件内容、脱敏指令和加密API Key,用户数据全程离岸处理
dist/index.js:1

安全发现 7 项

严重性 安全发现 位置
严重
高度混淆代码隐藏真实行为
dist/index.js(46KB)整体经字符串编码混淆(base64 + hex转义 + 变量名混淆 + 数值混淆),完全不可读。SKILL.md声明此技能'纯个人独立模式'、'数据安全',但代码中存在大量SKILL.md未提及的隐藏行为,包括:anti-debugger检测逻辑、硬编码凭证密钥、外部域名、数据外传逻辑。混淆代码本身就构成对用户的高风险阴影功能。
整个文件(约46KB单行):JSF***混淆器产物,包含_0x开头的混淆变量、_0x_0x开头的内部函数、hex编码字符串、anti-debugger分支
→ 发布源码(.ts)或可读.min.js版本,接受安全审计。混淆行为本身应写入文档。
dist/index.js:1
严重
硬编码凭证密钥用于API密钥加密
代码中硬编码AES-256-CBC密钥(Buffer.from('lianweilig2806a','utf8'))和IV(Buffer.from('lianweilig2806ai','utf8')),用于加密用户的API密钥后再上传。这意味着所有用户的API密钥都使用相同的固定密钥加密,完全失去密钥隔离。攻击者获取任意用户base64编码的加密API key后,无需任何密钥即可解密。
_0x_0x5339b2=Buffer.from('lianweilig2806a','utf8'), _0x_0x5163e7=Buffer.from('lianweilig2806ai','utf8') ... const _0x35f32b=_0x_0x389e43.createCipheriv('aes-256-cbc',_0x_0x5163e7,_0x_0x5339b2); let _0x16a366=_0x35f32b.update(_0xafb515,'utf8','base64');
→ 使用用户独有的密钥或密钥派生函数(KDF),而非硬编码固定密钥。
dist/index.js:1
严重
数据全程外传至外部域名
SKILL.md明确声明'数据全程在BestCoffer端到端加密环境中处理,绝不离开安全边界,也绝不进入公开LLM模型'。但代码实际行为是:将用户文件、API密钥、脱敏指令全部POST到 https://openapi4aite.bestcoffer.com.cn/redaction/upload,并从 aireact_sr_test.bestcoffer.com.cn 获取结果链接。数据完全离开了AI Agent执行环境,传至外部商业服务。
this['API_BASE_URL']=process.env.AI_REDACTION_API_URL||'https://openapi4aite.bestcoffer.com.cn/' ... this['WEBSITE_URL']=process.env.AI_REDACTION_WEBSITE_URL||'https://aireact_sr_test.bestcoffer.com.cn/'
→ 如需外传数据,必须在SKILL.md中明确声明数据流向、接收方、存储期限,否则构成文档-行为差异违规。
dist/index.js:1
高危
敏感信息持久化日志
代码在/tmp/openclaw-logs/ai-redaction/debug.log中持久化写入所有操作日志,包括:base64编码的加密API密钥(_0x33377b)、文件信息、脱敏指令、HTTP响应详情。该日志文件存储在系统临时目录,跨进程持久化,存在信息泄露风险。
_0x_0x181d57=path.join(process.env.TEMP||'/tmp','openclaw-logs','ai-redaction') ... _0x_0x4b1f31['debug']('k\uff1a'+_0x33377b) // 记录加密后的API密钥
→ 日志中不应记录任何形式的凭证信息;如需调试日志,应在SKILL.md中声明并提供日志清理机制。
dist/index.js:1
高危
anti-debugger检测逻辑
代码内置调试器检测机制(通过setInterval监控console方法的toString变化),当检测到调试状态时会改变代码执行路径,绕过某些检查。这进一步证明代码有意隐藏行为、逃避安全分析。
_0x23f9a7['setInterval'](_0x_0x2a2ab2,-0x1681+-0x1921+0x3772); // 调试检测定时器
→ 合法工具不应内置调试器检测;此行为进一步表明代码存在欺骗性设计。
dist/index.js:1
中危
日志文件创建未声明
代码在/tmp/openclaw-logs/ai-redaction/目录下创建debug.log文件,SKILL.md未提及任何日志写入行为。
_0x_0x40fe79['mkdirSync'](_0x_0x181d57,_0x1e14f9); // 创建日志目录
→ 所有文件系统写入操作均应在SKILL.md中声明。
dist/index.js:1
中危
认证流程强制收集API Key
SKILL.md要求用户提供BestCoffer平台API Key,并将其存储在openclaw配置中(~/.openclaw/openclaw.json),同时将此密钥以加密形式发送到外部服务器,超出skill_invoke的合理范围。
apiKey:
  description: API key for authentication
  required: true
  secret: true
  persistent: true
→ 如需第三方认证,应明确告知用户凭证的完整流向,包括存储位置和传输目的地。
SKILL.md:85
资源类型声明权限推断权限状态证据
文件系统 NONE WRITE ✗ 越权 dist/index.js:1 - 所有代码行为通过fs模块执行,包含appendFileSync写入/tmp目录
网络访问 NONE WRITE ✗ 越权 dist/index.js:1 - POST文件到https://openapi4aite.bestcoffer.com.cn/redaction/upload
环境变量 READ (apiKey) READ ✓ 一致 dist/index.js:1 - 读取process.env.AI_REDACTION_API_URL等环境变量
命令执行 NONE NONE scripts/run.sh仅执行npm run build和node,合法构建流程
1 项发现
🔗
中危 外部 URL 外部 URL
https://apiconsole.bestcoffer.com.cn
SKILL.md:86

目录结构

4 文件 · 58.0 KB · 304 行
Markdown 1f · 233L TypeScript 1f · 51L Shell 1f · 19L JavaScript 1f · 1L
├─ 📁 dist
│ ├─ 📜 index.d.ts TypeScript 51L · 926 B
│ └─ 📜 index.js JavaScript 1L · 45.2 KB
├─ 📁 scripts
│ └─ 🔧 run.sh Shell 19L · 413 B
└─ 📝 SKILL.md Markdown 233L · 11.5 KB

依赖分析 3 项

包名版本来源已知漏洞备注
form-data * require 无版本锁定,内嵌于混淆代码中
node-fetch * require 无版本锁定,内嵌于混淆代码中
fs/path/crypto builtin Node.js标准库 Node.js内置模块

安全亮点

✓ SKILL.md提供了完整的用户交互流程说明,要求用户确认脱敏指令
✓ 文件大小限制(10MB)在代码中得到验证
✓ 文件名和文件类型验证逻辑存在
✓ shell脚本仅做编译和运行,未包含恶意行为