SuperAPI AI 工具集

security-check

安全与审计

查看项目

更新于 10-15 14:04

技能介绍

security-check 是一个面向安全告警分诊的知识与策略技能,用于对 Dependabot、Snyk 等来源的安全告警进行分类、优先级排序并给出处置建议。它本身不打开 PR、不修改仓库;如需执行动作,应使用 /security-runner。

用途

该技能用于在运行 /security-runner 之前理解可能采取的动作;也适用于人工审查一批 Dependabot/Snyk 告警、将新仓库接入安全分诊流程,或与 entropy-check 一起作为每周 cron 任务,形成完整的健康信号。

主要能力

分类模型

优先级由两个维度决定:

  • 维度一:严重性(来自 CVE/公告)——critical、high、medium、low。
  • 维度二:可利用性(来自上下文)——network-reachable、dev-only、test-only。
    • network-reachable:存在漏洞的包属于暴露在互联网上的运行时依赖。
    • dev-only:该包是 devDependency 或构建工具,不会发布到生产环境。
    • test-only:仅在测试中使用,从不在生产环境运行。

决策矩阵

严重性 network-reachable dev-only test-only
critical P0 — 立即修补 P1 P2
high P1 — 本周处理 P2 P2
medium P2 — 下批处理 backlog dismiss
low backlog dismiss dismiss

各优先级的动作

优先级 动作 标签
P0 立即打开修复 PR;若无补丁则阻止部署 security P0
P1 本周打开修复 PR security P1
P2 通过 file-finding.sh 写入每周发现摘要,附升级路径;在月度周期中批量处理 —
Backlog 写入每周发现摘要,无紧迫性 —
Dismiss 通过 API 关闭并记录原因 —

自动补丁标准

仅当以下条件全部满足时,补丁才可安全自动合并(无需人工审查即打开 PR):

  • 仅为补丁版本升级——例如 1.2.3 → 1.2.4。次版本或主版本升级需要人工审查。
  • CVE 在该补丁中已修复——通过 GitHub 公告或 NVD 条目核实。
  • 无破坏性变更——检查目标版本区间的包 CHANGELOG。
  • CI 通过——更新不得破坏现有测试。

任一条件不满足,则合并前需要人工审查。

合并策略感知

关键:绝不在受限仓库上自动合并安全补丁。

在打开或合并任何 PR 之前,检查 crew.yml 中的 merge_strategy:

MERGE_STRATEGY=$(cat crew.yml 2>/dev/null | grep merge_strategy | head -1 | awk '{print $2}')
merge_strategy 动作
auto-merge CI 通过后,安全补丁可自动合并
restricted 打上 ready-to-merge 标签;由人工审查并手动合并
(缺失/未知) 视为 restricted——安全失败

受限仓库示例:Lexgo。如有疑问,一律视为 restricted。

可利用性检测

要判断网络可达性,检查 package.json(或等价文件):

# Node.js — 检查包位于 dependencies 还是 devDependencies
cat package.json | python3 -c "
import sys, json
pkg = json.load(sys.stdin)
print('runtime:', list(pkg.get('dependencies', {}).keys()))
print('dev:', list(pkg.get('devDependencies', {}).keys()))
"

# Ruby — 检查 Gemfile 分组
grep -A5 'group :development\|group :test' Gemfile

# Python — 检查包位于 requirements.txt 还是 requirements-dev.txt
diff <(cat requirements.txt 2>/dev/null) <(cat requirements-dev.txt 2>/dev/null)

如果告警中的包同时出现在运行时和开发依赖中,则归类为 network-reachable。

OpenSSF Scorecard 集成

归属:ossf/scorecard,由 OpenSSF 贡献者开发(Apache 2.0)。在构建自定义安全评级之前先运行它——scorecard 开箱即用覆盖 18 项安全检查。

运行 scorecard 以补充告警分诊,提供仓库级安全态势:

# 安装(一次性)
go install sigs.k8s.io/scorecard/v4@latest

# 对目标仓库运行
scorecard --repo github.com/{org}/{repo} --format json 2>/dev/null | \
  jq '.checks[] | {name: .name, score: .score, reason: .reason}' | \
  grep -E '"score": [0-7]'  # 显示低分检查项

每项检查评分 0-10。需优先关注的检查项:

  • Token-Permissions(< 7):工作流使用了过大的令牌权限范围。
  • Branch-Protection(< 7):缺少分支规则。
  • Dependency-Update-Tool(< 7):未配置 Dependabot 或 Renovate。
  • Vulnerabilities(< 10):依赖中存在已知 CVE。

将 scorecard 输出纳入 entropy-check 评级——安全评分信号进入 D/F 等级桶。

Cron 集成

在 crew.yml 中添加每周自动分诊:

cron:
  - schedule: "0 5 * * 1"   # 每周一 05:00
    task: "Weekly security triage: process open Dependabot/Snyk alerts on all active repos, open fix PRs for safe patches, create issues for breaking changes"

输出契约

对一批告警分类后,生成分诊摘要:

Security Triage: {org}/{repo}
Date: YYYY-MM-DD
Alerts scanned: N

P0 (patch now):    X alerts
P1 (this week):    Y alerts
P2 (batch next):   Z alerts
Backlog:           A alerts
Dismissed:         B alerts

Action required:
- [CRITICAL][net-reachable] lodash@4.17.20 → CVE-2021-23337 — patch to 4.17.21 (safe, patch-only)
- [HIGH][dev-only] webpack@4.46.0 → CVE-2023-28154 — P2, no runtime exposure

使用方式

通过 npx 安装:

npx skills add fellowship-dev/dogfooded-skills/skills/ops/security-check

适用场景

  • 在运行 /security-runner 之前,了解对仓库可预期的动作。
  • 人工审查一批 Dependabot/Snyk 告警。
  • 将新仓库接入安全分诊流程。
  • 与 entropy-check 一起作为每周 cron 任务,形成完整健康信号。

相关技能

  • /security-runner——执行分诊:打开 PR、创建 issue、通过 API 关闭告警。
  • /entropy-check——文档/架构健康;scorecard 评分可纳入 entropy 评级。
  • Dependabot 覆盖情况(是否配置了 Dependabot)是需直接检查的仓库设置;maintenance 技能已于 2026-09-14 退役。
  • /deps-runner——处理非安全类依赖更新;遵循相同的 PR 模式。

限制

该技能为知识/策略技能,不打开 PR、不修改仓库;执行动作需配合 /security-runner。自动合并仅适用于满足全部自动补丁标准的补丁版本升级,且受限仓库(如 Lexgo)绝不自动合并。