news 2026/9/25 7:52:32

CodeQL Actions 包 0.6.0 版本解读:模型生成查询退出 security-and-quality 套件与告警元数据修复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CodeQL Actions 包 0.6.0 版本解读:模型生成查询退出 security-and-quality 套件与告警元数据修复
  • 静态分析
  • SAST
  • 应用安全
  • 漏洞扫描
  • 代码质量

【免费下载链接】codeql

CodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security

项目地址:https://gitcode.com/gh_mirrors/co/codeql
点击查看免费下载

本篇文章以仓库中 actions/ql/src/change-notes/released/0.6.0.md 版本变更记录为骨架,系统梳理 GitHub Actions 数据流模型生成查询(model-generator)被移出security-and-quality套件的前因后果,并结合 actions/ql/src/Models 下六条查询与 ExcessiveSecretsExposure.ql 的源码,解释这些变更对实际告警行为的影响。读完本文,你将理解:为什么模型生成查询不适合面向用户产生漏洞告警、被移除后已有告警如何处理,以及security-severity元数据在查询结果中的角色。

一、版本背景:GitHub Actions 专用 CodeQL 包

CodeQL 仓库中的actions目录承载了一套专门分析 GitHub Actions 工作流(.github/workflows/*.yml)的查询集,其查询代码位于 actions/ql/src,按功能划分为:

  • Security:面向漏洞的安全查询,按 CWE 分类组织,例如 CWE-312(敏感信息泄露)、CWE-094(代码注入)、CWE-829(不可信资源加载)等;
  • Models:数据流模型生成查询(model-generator),用于分析复合操作(composite actions)与可复用工作流(reusable workflows)的输入输出数据流;
  • Debug 与 Diagnostics:调试与诊断辅助查询。

版本 0.6.0 的变更核心集中在两点:一是从security-and-quality套件中移除六个模型生成查询;二是为actions/excessive-secrets-exposure查询补齐security-severity元数据。前者属于 Breaking Changes,后者属于 Bug Fixes。

二、Breaking Changes:六个模型生成查询退出 security-and-quality 套件

变更记录明确列出以下六个查询从security-and-quality套件中移除:

查询 ID对应源码文件
actions/composite-action-sinksCompositeActionsSinks.ql
actions/composite-action-sourcesCompositeActionsSources.ql
actions/composite-action-summariesCompositeActionsSummaries.ql
actions/reusable-workflow-sinksReusableWorkflowsSinks.ql
actions/reusable-workflow-sourcesReusableWorkflowsSources.ql
actions/reusable-workflow-summariesReusableWorkflowsSummaries.ql

2.1 为什么移除:模型生成查询不面向用户告警

变更记录给出的理由非常明确:这些查询不是用来产生面向用户的漏洞告警的,而是服务于数据流模型生成。因此将它们从security-and-quality套件中移出,可以避免在代码扫描结果中引入一批"模型生成"性质的噪音告警。

从六条查询的元数据(@tags)中可以印证这一点,例如 CompositeActionsSinks.ql 的声明:

/** * @name Composite Action Sinks * @description Actions passing input variables to expression injection sinks. * @kind path-problem * @problem.severity warning * @security-severity 9.3 * @precision high * @id actions/composite-action-sinks * @tags actions * model-generator * external/cwe/cwe-020 */

model-generator标签表明这些查询的真正用途:它们分析工作流中不可信数据如何流入流出,其结果用于构建其他查询所需的数据流模型(即"模型生成"),而不是直接判定某个位置存在漏洞。将这类内部工具性质的查询与真正的安全查询混在同一套件中,会造成告警含义模糊。

2.2 六条查询的职责分工

六条查询按"复合操作"与"可复用工作流"两类实体、以及"来源(Source)/ 汇点(Sink)/ 摘要(Summary)"三种角色两两组合而成:

复合操作(Composite Action)相关

  • CompositeActionsSinks.ql:以CompositeAction的输入(c.getAnInput())为来源,以CodeInjectionSink为汇点,检测"输入变量流入表达式注入汇点"的数据流;
  • CompositeActionsSources.ql:以RemoteFlowSource(并排除DataFlow::ParameterNode)为来源,以复合操作的输出表达式(c.getAnOutputExpr())为汇点,检测"用户可控数据流入输出变量";
  • CompositeActionsSummaries.ql:以复合操作输入为来源、输出表达式为汇点,刻画"输入直接透传至输出"的摘要路径。

可复用工作流(Reusable Workflow)相关

  • ReusableWorkflowsSinks.ql:以ReusableWorkflow的参数(w.getAnInput())为来源,以CodeInjectionSink为汇点;
  • ReusableWorkflowsSources.ql:以RemoteFlowSource为来源、可复用工作流的输出表达式为汇点;
  • ReusableWorkflowsSummaries.ql:刻画可复用工作流"参数透传至输出"的摘要路径。

从实现上看,这六条查询都采用同一套 CodeQL 数据流框架模式:定义DataFlow::ConfigSig(isSource/isSink),实例化全局污点追踪配置TaintTracking::Global<MyConfig>,并约束来源与汇点位于同一文件(source.getNode().getLocation().getFile() = sink.getNode().getLocation().getFile()),最后以select sink.getNode(), source, sink, ...输出路径图(kind: path-problem)。这种结构清晰说明它们是"为建模而扫描",与security-and-quality套件中面向漏洞判定的查询定位完全不同。

2.3 已有告警会自动关闭

变更记录特别说明:对于这些查询已经产生的告警,升级到 0.6.0 后会自动关闭("Any existing alerts for these queries will be closed automatically")。这是因为查询从套件中移除后,后续扫描不再产生对应结果,CodeQL 的告警管理系统会将历史告警标记为已关闭,无需人工干预。如果读者此前在扫描结果中看到过actions/composite-action-sources之类的条目,可以放心地将其视为查询集结构调整的结果,而非漏洞状态变化。

三、顺带修复:查询 ID 拼写错误

变更记录中有一处容易被忽略但值得注意的细节:actions/reusable-workflow-sinks是从actions/reusable-wokflow-sinks改名而来("renamed fromactions/reusable-wokflow-sinks")。原 ID 中workflow拼写为wokflow,属于历史遗留的拼写错误。改名意味着:

  • 该查询在扫描结果、API 中的标识符发生变化;
  • 旧 ID 下的历史告警因 ID 不再匹配而关闭,新 ID 下会重新产生告警(如果需要)。

这一改动同时也在代码中落地:仓库内模型查询文件的@id均使用正确拼写actions/reusable-workflow-sinks(见 ReusableWorkflowsSinks.ql),与变更记录一致。

四、Bug Fixes:为 excessive-secrets-exposure 补齐 security-severity

0.6.0 的另一项变更为查询actions/excessive-secrets-exposure分配了security-severity元数据。对应源码 ExcessiveSecretsExposure.ql 的完整元数据如下:

/** * @name Excessive Secrets Exposure * @description All organization and repository secrets are passed to the workflow runner. * @kind problem * @precision high * @security-severity 5.0 * @problem.severity warning * @id actions/excessive-secrets-exposure * @tags actions * security * external/cwe/cwe-312 */

4.1 该查询检测什么

从源码主体看,它定位工作流表达式中直接引用secrets上下文的情况:

from Expression expr where getAToJsonReferenceExpression(expr.getExpression(), _).matches("secrets%") or expr.getExpression().matches("secrets[%") and not expr.getExpression().matches("secrets[\"%") and not expr.getExpression().matches("secrets['%") select expr, "All organization and repository secrets are passed to the workflow runner in $@", expr, expr.getExpression()

其告警消息为 "All organization and repository secrets are passed to the workflow runner",即当某个步骤把全部组织级与仓库级密钥一次性传给工作流运行时(典型如${{ secrets }}整体展开、而非精确引用单个密钥)时触发,属于 CWE-312(敏感信息泄露)范畴。

4.2 security-severity 的作用

security-severity是 CodeQL 查询元数据中用于映射安全严重性分值的字段(此处为5.0,属于中等偏高的 CVSS 风格分值),它与@problem.severity warning配合,供 GitHub Code Scanning 等前端将查询结果归类到对应的安全严重性级别。

在 0.6.0 之前,该查询缺少这一字段,导致其在扫描结果界面中无法获得标准化的严重性分级展示;本次变更补齐了它,属于典型的"查询元数据修复"类 Bug Fix——不改变查询的检测逻辑,但改善结果呈现的规范性。从仓库中的 CHANGELOG.md 可以看到,后续版本(如 0.6.33、0.6.34 等)继续大量沿用"Query Metadata Changes"这类变更类型,说明元数据规范化是 actions 包持续演进的重要方向之一。

五、如何在套件层面验证与复现

security-and-quality套件的定义位于 actions/ql/src/codeql-suites/actions-security-and-quality.qls:

- description: Security-and-quality queries for GitHub Actions - queries: . - apply: security-and-quality-selectors.yml from: codeql/suite-helpers

该套件通过apply复用codeql/suite-helpers中的security-and-quality-selectors.yml选择器来决定哪些查询纳入扫描。0.6.0 的变更正是通过调整选择器规则,将model-generator标签的六条查询排除在外。

读者可在本地验证:

  1. 打开 actions/ql/src/codeql-suites,对比actions-security-and-quality.qls与actions-all.qls、actions-security-extended.qls等套件的查询集合差异;
  2. 在 actions/ql/src/Models 下确认六条查询仍保留在仓库中——移除的是"套件收录关系",而非删除源码,模型生成能力并未消失;
  3. 结合 qlpack.yml 与 codeql-pack.lock.yml 了解该包的版本组织方式。

六、总结:本次变更的三层含义

回顾 0.6.0,可以提炼出三层信息:

  1. 职责边界:模型生成查询(model-generator)与面向用户的漏洞查询在定位上截然不同,前者不应出现在security-and-quality套件的用户告警流中;本次移除是 CodeQL actions 查询体系自我净化的体现。
  2. 版本迁移影响:六个查询 ID 中有五个直接移除、一个改名(修正拼写),所有相关历史告警会自动关闭,用户无需手工处理。
  3. 元数据完整性:actions/excessive-secrets-exposure补齐security-severity后,其告警可按标准化严重性分级呈现,后续维护者可以此类元数据修复模式为参照,持续完善其余查询的元数据质量。
  • 静态分析
  • SAST
  • 应用安全
  • 漏洞扫描
  • 代码质量

【免费下载链接】codeql

CodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security

项目地址:https://gitcode.com/gh_mirrors/co/codeql
点击查看免费下载

相关推荐

上一篇:Vue Query 中如何让 queryKey 与 enabled 跟随 ref 响应式变化以触发重新请求
下一篇:External Secrets Operator 核心 CRD 设计规范与实战解析:ExternalSecret 与 SecretStore

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 7:52:18

新手避坑指南:AI博士周有贵教你,选GEO软件拒绝套路只讲干货

很多做网站获客、搜索运营的新手&#xff0c;刚接触 GEO 生成式搜索引擎优化的时候&#xff0c;很容易被各种宣传话术绕晕。市面上相关工具、服务商参差不齐&#xff0c;不少运营新人踩坑&#xff1a;工具功能虚标、关键词挖掘不准、收费暗藏套路&#xff0c;做出来的内容不匹配…

作者头像 李华
网站建设 2026/9/25 7:49:54

安徽部分地区用户力荐的净菜加工配送服务商挑选全攻略

很多安徽连锁餐饮品牌拓展长三角市场&#xff0c;或是跨城布局门店的时候&#xff0c;都在找能做食材溯源的配送公司&#xff0c;也会疑问长三角地区有哪些好的食材配送企业&#xff0c;也会咨询能做食材批量加工配送的公司有哪些靠谱选择。伴随着长三角餐饮连锁化发展不断提速…

作者头像 李华
网站建设 2026/9/25 7:46:10

随机非线性时滞系统事件触发控制:从LMI设计到仿真复现

简介&#xff1a;面向自动控制、随机系统与时滞系统方向的研究生和科研人员&#xff0c;这份资料围绕带外生干扰和事件触发反馈控制的随机非线性时滞系统&#xff0c;给出从建模、控制器设计到稳定性验证的完整解决方案。内容先建立含非线性项和噪声项的随机时滞系统模型&#…

作者头像 李华