mcpField
G
ghost-report

ghost-report

github.com/ghostsecurity安全4273.9k 次安装4 周前更新
代码仓库

关于 ghost-report

ghost-report 是一项安全技能,将依赖项、密钥和代码扫描结果汇总为按优先级排列的 Markdown 报告,供仓库安全审查使用,并纳入相关高、中严重性问题的详情。

主要功能

  1. 01汇总依赖项、密钥和代码扫描结果
  2. 02按各扫描类型的状态筛选问题
  3. 03按严重性和扫描类型排序
  4. 04纳入高、中严重性问题详情
  5. 05使用扫描报告统计覆盖情况

适用场景

  1. 01汇总多种扫描结果以供审查
  2. 02确定已确认安全问题的优先级
  3. 03生成自包含的仓库安全报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ghostsecurity/skills --skill ghost-report

安装后在 Claude Code 中输入/ghost-report确认已加载。

附带文件report-template.md

详细介绍

综合安全报告

将所有扫描技能(scan-deps、scan-secrets、scan-code)的发现汇总到一份优先级报告中。所有工作都由你自行完成——不要启动子 Agent 或委派任务。

$ARGUMENTS


步骤 0:准备

运行以下 Bash 命令以计算路径:

repo_name=$(basename "$(pwd)") && remote_url=$(git remote get-url origin 2>/dev/null || pwd) && short_hash=$(printf '%s' "$remote_url" | git hash-object --stdin | cut -c1-8) && repo_id="${repo_name}-${short_hash}" && short_sha=$(git rev-parse --short HEAD 2>/dev/null || date +%Y%m%d) && ghost_repo_dir="$HOME/.ghost/repos/${repo_id}" && scans_dir="${ghost_repo_dir}/scans/${short_sha}" && cache_dir="${ghost_repo_dir}/cache" && skill_dir=$(find . -path '*/skills/report/SKILL.md' 2>/dev/null | head -1 | xargs dirname) && echo "scans_dir=$scans_dir cache_dir=$cache_dir skill_dir=$skill_dir"

保存 scans_dir(提交级扫描目录)、cache_dir 和 skill_dir。


缓存检查

如果 <scans_dir>/report.md 已存在,请显示:

Combined security report is at: <scans_dir>/report.md

然后停止。不要重新生成该文件。


步骤 1:读取仓库上下文

如果 <cache_dir>/repo.md 存在,则读取该文件。提取:

  • 业务重要性
  • 敏感数据类型
  • 组件映射

如果文件不存在,则继续执行——这不算错误。


步骤 2:发现扫描结果

列出 <scans_dir> 的内容,查看存在哪些扫描类型目录。可识别的类型:

  • deps/ — SCA / 依赖项漏洞扫描
  • secrets/ — 密钥和凭据扫描
  • code/ — 代码安全扫描(SAST)

如果这些目录都不存在,则报告错误:

No scan results found in <scans_dir>. Run one or more scan skills first:
  /ghost-scan-deps
  /ghost-scan-secrets
  /ghost-scan-code

然后停止。


步骤 3:收集发现

对于每种存在的扫描类型,使用 glob 匹配 <scans_dir>/<type>/findings/*.md,并完整读取每个发现文件。保留每条发现的完整 Markdown 正文——报告会直接内嵌这些内容,这样读者就无需打开单独的发现文件。

此外,从每条发现中提取以下元数据字段,以供筛选和排序:

  • ID — 来自 ## Metadata → ID
  • 类型 — 扫描类型(deps、secrets 或 code)
  • 严重程度 — 来自 ## Metadata → Severity(high、medium、low)
  • 状态 — 来自 ## Metadata → Status(例如 confirmed-exploitable、unverified、verified、rejected、clean)

步骤 4:筛选和排序

筛选: 仅保留高置信度发现:

  • 对于 deps 发现:状态为 confirmed-exploitable
  • 对于 secrets 发现:状态既不是 clean,也不是 rejected
  • 对于 code 发现:状态为 verified 或 unverified(不是 rejected)

排除状态为 clean、rejected 或 false-positive 的所有发现。

对剩余发现进行排序:

  1. 按严重程度排序:high 优先,其次 medium,再次 low
  2. 严重程度相同时:deps 优先于 secrets,secrets 优先于 code

步骤 5:读取各扫描报告

对于 deps 和 secrets 扫描类型,如果 <scans_dir>/<type>/report.md 存在,则读取该文件。提取:

  • 统计数据(已扫描候选项、已确认发现、已过滤误报)
  • 执行摘要要点

注意:code 不会生成 report.md。要统计代码扫描覆盖情况,请直接计算 <scans_dir>/code/findings/ 中的发现文件数量。“候选项扫描数”是发现文件总数(所有状态)。“已确认发现数”是状态为 verified、confirmed 或 unverified 的数量。“已过滤误报数”是状态为 rejected 的数量。不要统计提名/分析流程中干净文件的分析结果——这些并未成为发现。

如果 deps 或 secrets 的单项扫描报告不存在,请注明该报告不可用。

步骤 6:生成报告

  1. 读取 <skill_dir>/report-template.md
  2. 使用收集到的数据填充模板:
    • 在扫描信息中填写仓库名称、提交 SHA、日期,以及运行了哪些扫描
    • 根据仓库背景和汇总后的发现撰写执行摘要
    • 对于这份以安全为重点、客观且基于事实的报告,所有文字内容均应采用中性、自然的语气,兼顾专业性和易读性。不要使用表情符号、破折号等
    • 对于严重和高危发现(严重性 = 高):将每个发现文件中的实质性内容直接纳入报告,包括代码片段、评估表、修复命令及所有相关细节,确保报告内容完整自足
    • 对于中危发现:为每个发现撰写完整的小节,说明描述、位置、代码上下文和修复方法(不要压缩成表格)
    • 省略低危发现(仅保留在各次扫描的发现文件中)
    • 根据各次扫描报告中的统计数据填写扫描覆盖情况表;对于代码扫描,使用步骤 5 中的发现文件数量
    • 为已运行的每种扫描类型添加简短的方法说明(1-2 句话,摘自各次扫描报告)
    • 不要添加各次扫描报告或单个发现文件的链接,所有内容均应直接纳入报告
  3. 将报告写入 <scans_dir>/report.md

步骤 7:显示输出

Combined security report is at: <scans_dir>/report.md

评论

支持 Markdown