如何获取GitHub组织下所有有权限查看的漏洞告警列表
GitHub组织全量严重漏洞批量查询方案
方案1:单GraphQL查询直接获取(适配Insomnia)
不需要自行开发遍历逻辑,直接通过嵌套查询一次性拉取全组织所有仓库的漏洞告警,支持按严重等级过滤,示例查询语句如下:
query getOrgCriticalVulnerabilities($orgLogin: String!, $repoEndCursor: String) { organization(login: $orgLogin) { repositories(first: 100, after: $repoEndCursor) { nodes { name vulnerabilityAlerts(first: 100, states: OPEN, severities: [CRITICAL, HIGH]) { nodes { createdAt dismissedAt securityVulnerability { severity package { name } advisory { description ghsaId } } } } } pageInfo { hasNextPage endCursor } } } }
Insomnia配置步骤
- 新建POST请求,请求地址为
https://api.github.com/graphql - 新增请求头
Authorization,值为bearer 你的GitHub个人访问令牌,令牌需提前开启repo、security_events权限 - 请求体选择JSON格式,填入内容:
{ "query": "上面的查询语句", "variables": { "orgLogin": "替换为你的组织名" } }
- 如果组织仓库数量超过100,将上一次返回结果中
pageInfo.endCursor的值填入variables的repoEndCursor字段,再次请求即可获取下一页数据。
方案2:CLI快速查询
如果偏好命令行操作,可直接使用GitHub官方CLI工具gh实现,无需手动配置请求:
- 先安装并登录gh工具
- 执行以下命令即可导出全组织高危以上漏洞:
gh api graphql -f query=' query getOrgCriticalVulnerabilities($orgLogin: String!) { organization(login: $orgLogin) { repositories(first: 100) { nodes { name vulnerabilityAlerts(first: 100, states: OPEN, severities: [CRITICAL, HIGH]) { nodes { securityVulnerability { severity package { name } advisory { description } } } } } } } }' -f orgLogin=你的组织名
额外说明
- 查询结果只会返回你账号有权限查看的仓库的漏洞数据,符合GitHub权限控制规则
- 可根据需求调整
severities参数的取值,支持CRITICAL、HIGH、MEDIUM、LOW四个等级 - 如果需要包含已忽略的漏洞,删除
states: OPEN参数即可
内容的提问来源于stack exchange,提问作者pzrq
相关产品推荐
相关产品推荐

