CodeQL 2.27.3 发布:支持 Python 3.15 与 JSON 数据扩展
GitHub 于 2026 年 11 月 3 日发布静态分析引擎 CodeQL 2.27.3。该版本扩展了 Python 3.15 语言特性支持,允许数据扩展文件使用 JSON 语法,并新增面向 LLM 生成数据的可选 AI 威胁模型。新版本会自动部署到 github.com 上的 GitHub code scanning 用户,相关功能也将进入 GitHub Enterprise Server 3.24。
数据扩展改用 JSON 与 AI 威胁模型
CodeQL CLI 的数据扩展文件现在支持 JSON 语法,结构与 YAML 数据扩展一致,并可使用 Java 风格注释(// 与 /* */)。解析规则按扩展名区分:.json 文件按 JSON 解析,其余文件继续按 YAML 解析。
该版本新增一个可选的 ai 威胁模型,用于 LLM 生成的数据。原文说明它不包含任何内置源模型,用户需要通过数据扩展自行定义源。这意味着该威胁模型提供的是分类框架,具体不可信数据入口仍需用户建模。
Python 3.15 语法与内置对象
Python 提取器新增对 Python 3.15 语法的支持,包括 match 字面量模式中的一元加号,以及 Unicode 17 标识符。
同时,CodeQL 支持 Python 3.15 引入的 frozendict 和 sentinel 内置对象,并对 frozendict 的构造提供数据流建模。这一改动使针对新版本 Python 代码的扫描能够识别这些新语法与对象。
C/C++、C# 与 Ruby 的语言支持
C/C++ 方面,CodeQL 新增对 C23 位精确整数 _BitInt(N) 的支持,并为 BlazingMQ 的 BloombergLP::bmqa::Message、MessageProperties 类及其迭代器加入流摘要。
C# 新增对 is 表达式和 switch 分支中位置模式的数据流支持。配置私有注册表时,CodeQL 会向 NuGet CLI 传递所需的代理与证书环境变量。Ruby 方面,Grape::API 的请求子访问器被视作远程流源,包括 body.read、body.string、params、GET、POST、cookies、env、query_string 和 path_info。
查询准确度调整
多个查询在本版本中调整了误报表现。C/C++ 的 cpp/resource-not-released-in-destructor 现在能识别通过本地别名释放的资源;C# 的 cs/simplifiable-boolean-expression 在类型信息不完整时误报减少。
Java/Kotlin 的 java/ssrf 与 java/unvalidated-url-redirection 查询现在能识别 URI.getHost() 与固定白名单条目的大小写不敏感比较,也能识别主机被存入局部变量后再比较的写法。Python 的 py/xxe、py/xml-bomb 和 py/nosql-injection 查询在选择不可信数据源时会遵循用户配置的威胁模型,默认仍使用远程流源,并纳入通过数据扩展建模的源。
破坏性变更与部署范围
GitHub Actions 的控制流图(CFG)改用共享 CFG 库。若自定义查询依赖特定的 CFG 节点、边或基本块边界,可能需要更新;旧版 Completion 类已被移除,应改用 DirectSuccessor、BooleanSuccessor、ReturnSuccessor 等 CFG 边标签。
部署方面,每个新版本 CodeQL 会自动部署到 github.com 上的 GitHub code scanning 用户。2.27.3 的新功能也将包含在 GitHub Enterprise Server 3.24 中;使用更早版本 GHES 的用户可手动升级 CodeQL 版本。
知序观察
观察:CodeQL 2.27.3 的重点是跟随语言与生态变化,而非引入全新分析能力。Python 3.15 与 C23 支持让新语法代码可被正常扫描,JSON 数据扩展降低了配置门槛,AI 威胁模型则为 LLM 生成数据预留了建模入口,但需用户自行定义源。对依赖自定义 GitHub Actions 查询的团队,CFG 库切换是需要提前检查的兼容性风险。