Scan Report
5 /100
openclaw-rp-plugin
SillyTavern-compatible roleplay plugin for OpenClaw with long memory, multimodal output, and Generative-Agents-style companion
这是一个合法的 OpenClaw SillyTavern 角色扮演插件。预扫描标记的 5 个 base64 IOC 均为文件解析功能(处理角色卡附件、媒体文件、data URL),不存在代码混淆或恶意执行。插件无 shell 执行、凭证收割、敏感路径遍历等高危行为。
Safe to install
该技能可安全使用。Base64 编解码仅用于 SillyTavern PNG 角色卡解析和附件导入,属于正常文件处理功能。
Findings 4 items
| Severity | Finding | Location |
|---|---|---|
| Info | Base64 编解码用于文件解析(误报排除) | src/utils/png.js:34 |
| Info | ffmpeg 调用为合法媒体转码 | src/openclaw/register.js:127 |
| Low | SOUL.md 写入功能 | src/openclaw/agentPersona.js:1 |
| Info | 配置读取 ~/.openclaw | src/openclaw/register.js:1150 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | WRITE | WRITE | ✓ Aligned | 写入 ~/.openclaw/ 配置、媒体目录 |
| Network | READ | READ | ✓ Aligned | fetch() 外部 URL 用于导入,API 调用 OpenAI/Gemini |
| Shell | NONE | NONE | — | execFile('ffmpeg') 用于 PCM→MP3 转码,合法 CLI 工具 |
| Database | WRITE | WRITE | ✓ Aligned | SQLite 本地存储 rp_sessions、turns、assets |
5 Critical 9 findings
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(attachment.content, "base64" src/core/commandRouter.js:100 Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(match[2], "base64" src/core/commandRouter.js:141 Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(dataUrl.base64, "base64" src/openclaw/register.js:148 Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(resolved, "base64" src/utils/attachments.js:16 Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(encoded, "base64" src/utils/png.js:34 Medium External URL 外部 URL
https://arxiv.org/abs/2304.03442 README.md:7 Medium External URL 外部 URL
https://example.local/audio.mp3 examples/smoke-run.js:26 Medium External URL 外部 URL
https://example.local/image.png examples/smoke-run.js:31 Medium External URL 外部 URL
https://api.telegram.org src/providers/attachmentResolvers.js:52 File Tree
70 files · 360.8 KB · 11857 lines JavaScript 61f · 10617L
Markdown 7f · 1143L
JSON 2f · 97L
├─
▾
docs
│ ├─
ARCHITECTURE.md
Markdown
│ └─
ARCHITECTURE.zh-CN.md
Markdown
├─
▾
examples
│ ├─
openclaw-rp-bootstrap.js
JavaScript
│ └─
smoke-run.js
JavaScript
├─
▾
src
│ ├─
▾
channels
│ │ └─
adapters.js
JavaScript
│ ├─
▾
core
│ │ ├─
commandRouter.js
JavaScript
│ │ ├─
defaultPreset.js
JavaScript
│ │ ├─
lorebookMatcher.js
JavaScript
│ │ ├─
modelConfigResolver.js
JavaScript
│ │ ├─
promptBuilder.js
JavaScript
│ │ ├─
rateLimiter.js
JavaScript
│ │ ├─
retry.js
JavaScript
│ │ ├─
sessionManager.js
JavaScript
│ │ └─
sessionMutex.js
JavaScript
│ ├─
▾
importers
│ │ ├─
cardImporter.js
JavaScript
│ │ ├─
lorebookImporter.js
JavaScript
│ │ └─
presetImporter.js
JavaScript
│ ├─
▾
openclaw
│ │ ├─
agentImageTool.js
JavaScript
│ │ ├─
agentPersona.js
JavaScript
│ │ ├─
autoImage.js
JavaScript
│ │ ├─
i18n.js
JavaScript
│ │ ├─
nodeSqliteCompat.js
JavaScript
│ │ └─
register.js
JavaScript
│ ├─
▾
providers
│ │ ├─
attachmentResolvers.js
JavaScript
│ │ ├─
gemini.js
JavaScript
│ │ └─
openaiCompatible.js
JavaScript
│ ├─
▾
store
│ │ ├─
inMemoryStore.js
JavaScript
│ │ ├─
schema.js
JavaScript
│ │ └─
sqliteStore.js
JavaScript
│ ├─
▾
utils
│ │ ├─
attachments.js
JavaScript
│ │ ├─
commandParser.js
JavaScript
│ │ ├─
id.js
JavaScript
│ │ ├─
imageIntent.js
JavaScript
│ │ ├─
multilingualEmbedding.js
JavaScript
│ │ ├─
png.js
JavaScript
│ │ ├─
sessionKey.js
JavaScript
│ │ ├─
textCleaner.js
JavaScript
│ │ ├─
tiktokenEstimator.js
⚠
JavaScript
│ │ ├─
timeout.js
JavaScript
│ │ └─
tokenEstimator.js
⚠
JavaScript
│ ├─
errors.js
JavaScript
│ ├─
index.js
JavaScript
│ ├─
openclawIntegration.js
JavaScript
│ ├─
plugin.js
JavaScript
│ └─
types.js
JavaScript
├─
▾
tests
│ ├─
agentImageTool.test.js
JavaScript
│ ├─
agentPersona.test.js
JavaScript
│ ├─
attachmentResolvers.test.js
JavaScript
│ ├─
cardImporter.test.js
JavaScript
│ ├─
channelsAdapter.test.js
JavaScript
│ ├─
commandParser.test.js
JavaScript
│ ├─
hooksAndPolicies.test.js
JavaScript
│ ├─
imageIntent.test.js
JavaScript
│ ├─
integrationHandlers.test.js
JavaScript
│ ├─
lorebookMatcher.test.js
JavaScript
│ ├─
openaiCompatibleProvider.test.js
JavaScript
│ ├─
openclawAutoImage.test.js
JavaScript
│ ├─
pluginStoreSelection.test.js
JavaScript
│ ├─
promptBuilder.test.js
JavaScript
│ ├─
ragMemory.test.js
JavaScript
│ ├─
routerFlow.test.js
JavaScript
│ ├─
textCleaner.test.js
JavaScript
│ └─
tokenEstimatorFactory.test.js
⚠
JavaScript
├─
CHANGELOG.md
Markdown
├─
CHANGELOG.zh.md
Markdown
├─
openclaw.plugin.json
JSON
├─
package.json
JSON
├─
README.md
Markdown
├─
README.zh.md
Markdown
└─
SKILL.md
Markdown
Dependencies 3 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
better-sqlite3 | ^9.0.0 | npm | No | 可选依赖,用于 SQLite 持久化 |
js-tiktoken | ^1.0.0 | npm | No | 可选依赖,用于 token 计数 |
openclaw | * | npm | No | peer dependency,插件宿主 |
Security Positives
✓ 代码结构清晰,遵循 OpenClaw 插件规范
✓ 有完整的测试套件(31 个测试文件)
✓ 使用标记块隔离 SOUL.md 管理内容,防止污染
✓ 无动态代码执行、eval、命令注入
✓ SQLite 数据库存储在本地,无敏感数据外传
✓ API 密钥通过环境变量或配置文件获取,无硬编码