这是一个独立的 OpenCode 工作流目录,用于授权场景下的 CNVD 漏洞挖掘。
opencode-cnvd 是面向 CNVD 漏洞报送场景的授权安全测试工作流,不是某个固定业务系统、固定厂商或固定目标项目的名称。
本仓库提供的是 OpenCode 插件、agent 提示词和流程规范,用来在已经获得授权的前提下,对指定系统或产品进行资产收集、攻击面分析、漏洞验证、审计记录和报告整理。实际测试对象由每次运行时登记的授权范围和 campaign_id 决定,例如某个 OA、门户、业务系统或产品版本。
cnvd-plugin.ts:OpenCode 本地插件,提供授权范围登记、范围检查、报告证据模板和基础工具拦截。opencode.example.jsonc:OpenCode 多 agent 示例配置。prompts/:总规、授权审查、资产收集、攻击面分析、CVE研究、MCP操作、长期巡检、渗透测试、漏洞验证、操作审计、报告输出等 agent 提示词。docs/workflow.md:统一工作流和边界规范。docs/memory.md:长期运行、上下文恢复、持久记忆和风险队列规范。docs/model-allocation.md:DeepSeek 与 GPT 的角色分配、安全边界和脱敏要求。docs/sanitization.md:交给 GPT agent 前的脱敏输入规范。
- 将
opencode.example.jsonc中的 MCP 路径改成你本机漏洞检测 MCP server 的绝对路径。 - 把配置内容合并到项目的
opencode.json或opencode.jsonc。 - 在 OpenCode 中先让
cnvd-chief登记授权范围:
请使用 cnvd_scope_register 登记授权目标:https://example.com,授权编号:your-ticket-id
- 之后按总规调度不同 agent 完成资产收集、测试、验证、审计和报告。
配置默认将 bash 设为 allow,避免安全只读动作频繁打断任务。真正的边界控制放在插件里:
- 安全动作继续执行。
- 高危、越界或可能改动状态的动作不执行,自动进入风险队列。
- agent 不需要立刻询问用户,应继续寻找低风险替代路径。
- 阶段性结束后用
cnvd_risk_queue_list汇总 pending 项,用户再统一决定。
建议启动长期任务时给总规这样的指令:
按 CNVD 多 agent 工作流长期运行。先为当前系统调用 cnvd_campaign_start 设置独立 campaign_id,命名为类似 泛微OA_6_19 或 蓝凌OA_6_19 的项目名。插件会在当前目录创建该项目文件夹。每个阶段先读取当前 campaign 的 cnvd_campaign_status 和 cnvd_scratchboard_read,发现资产、假设、证据、结论都写入 cnvd_memory_record。只检索当前系统记忆,不读取其他无关系统历史。临时文件放到当前项目文件夹 tmp/,报告放到 reports/。遇到高危动作不要问我,记录风险队列后继续低风险替代路径。阶段结束再汇总 pending 风险。
opencode.example.jsonc 中每个 agent 都可以单独替换 model,例如:
- 总规、渗透测试、漏洞验证、报告输出使用强模型。
- 授权审查、资产整理、审计记录使用轻量模型。
默认禁止:
- 文件写入、编辑、补丁类工具。
- 后渗透、持久化、横向移动、凭据访问、webshell、规避类工具。
- 常见破坏性 shell 命令。
- 未登记授权范围的目标扫描或验证。
高危动作不会立即询问用户,也不会执行;插件会写入当前系统项目文件夹下的 risk-queue.jsonl,后续通过 cnvd_risk_queue_list 统一查看。
插件会在当前目录自动创建 <campaign_id>/,例如 XX系统_6_19/:
campaign.db保存授权范围、阶段状态、结构化记忆、风险队列和审计事件。scratchboard.md保存给模型快速恢复上下文的短摘要。events.jsonl保存追加式全过程事件。risk-queue.jsonl保存待审批高危动作。evidence/保存证据附件。reports/保存报告输出。tmp/保存临时文件和过程材料。
如果运行时不支持 SQLite,会自动退回 state.json,任务仍可继续。
如果所在项目是 Git 仓库,建议把每个项目文件夹(例如 XX系统_6_19/)加入 .gitignore,避免把审计过程和目标信息提交到仓库。
默认一个系统/产品使用一个独立 campaign 和一个独立项目文件夹。泛微OA 和 蓝凌OA 是两个独立记忆;同一个系统的多个域名、URL、IP 和案例可以放在同一个 campaign。只有需要在同一系统内缩小到某个 URL/IP 时,才在 cnvd_memory_snapshot、cnvd_campaign_status、cnvd_memory_search 中传入 target。
这些限制无法替代人工授权审查。执行真实测试前,仍需要确认目标、授权、时间窗口和测试强度。