安全决策报告
story-engine-for-creator
纯故事创作工具,代码相对干净,存在轻微文档不一致(声称纯本地但支持LLM调用)和未声明文件写入。
为什么得出这个结论
1/4 个维度触发 阻止
声明与实际能力
发现 2 项声明之外的能力或越权行为。
复核
隐藏执行与外联
提取到 2 个一般风险产物,需要结合上下文判断。
通过
攻击链与高危发现
没有形成明确的恶意路径。
复核
依赖与供应链卫生
没有完整依赖信息,供应链判断需要保留弹性。
风险分是怎么被拉高的
文档声明-行为不一致 +12
SKILL.md声明'纯本地运行:无需联网',但代码支持set_llm_provider外部LLM集成
未声明的文件写入 +8
generate_novel方法写入audit_report.html,SKILL.md未提及但skill-card.md有披露
无第三方依赖锁定 +2
无requirements.txt,仅使用标准库
最关键的证据
低危 文档欺骗
文档声称与代码能力不一致
SKILL.md声明'纯本地运行:无需联网',但代码提供了set_llm_provider()接口,允许用户注入外部LLM Provider处理小说文本。skill-card.md已承认此行为,但与SKILL.md主文档矛盾。
scripts/story_engine.py:239 统一文档:SKILL.md应明确声明'支持可选外部LLM集成',并将LLM调用设为显式配置项而非静默注入。
低危 权限提升
未声明的文件写入操作
generate_novel()方法会将HTML审计报告写入当前工作目录的audit_report.html,SKILL.md核心文档未提及此行为,仅skill-card.md有说明。
scripts/story_engine.py:447 在SKILL.md使用说明中明确标注:'引擎会在当前目录生成audit_report.html'
提示 供应链
无依赖清单文件
未发现requirements.txt或setup.py,项目仅使用Python标准库(uuid, json, re, dataclasses, typing, collections),降低了供应链风险。
保持现状。如需发布pip包,应创建requirements.txt并锁定版本。
声明能力 vs 实际能力
文件系统 阻止
声明 NONE
→ 推断 WRITE
scripts/story_engine.py:447 - with open('audit_report.html', 'w') 网络访问 阻止
声明 NONE
→ 推断 READ
scripts/story_engine.py:239-287 - set_llm_provider()允许外部LLM处理文本 命令执行 通过
声明 NONE
→ 推断 NONE
无subprocess或os.system调用 环境变量 通过
声明 NONE
→ 推断 NONE
无os.environ访问 可疑产物与外联
中危 外部 URL
https://clawhub.ai/user/nohn3043-arch skill-card.md:9
中危 外部 URL
https://clawhub.ai/nohn3043-arch/skills/story-engine-for-creator skill-card.md:43
依赖与供应链
没有结构化依赖告警。
文件构成
6 个文件 · 1124 行
Python 1 个文件 · 840 行Markdown 5 个文件 · 284 行
需关注文件 · 2
scripts/story_engine.py 文档声称与代码能力不一致 · 未声明的文件写入操作
skill-card.md https://clawhub.ai/user/nohn3043-arch · https://clawhub.ai/nohn3043-arch/skills/story-engine-for-creator
其他文件 · SKILL.md · CharacterToNarrativeLink.md · WorldviewVersioning.md · LongNarrativeWindow.md
安全亮点
代码结构清晰,纯Python实现,无二进制依赖
无敏感文件访问(无~/.ssh、.env、密钥路径访问)
无凭证收割行为(无遍历环境变量匹配API密钥)
无网络代码(无requests/urllib/curl调用)
无代码混淆(无base64解码、无eval链)
无持久化机制(无cron/计划任务/后门植入)
无反向shell或C2通信代码
仅使用标准库,供应链风险极低