GitHub介绍CodeQL 2.27.3:支持Python 3.15语法与JSON数据扩展,Actions控制流图改用共享库会破坏旧自定义查询,该版本发布说明日期为10月20日
2026年11月3日,GitHub发文介绍CodeQL 2.27.3:支持Python 3.15语法(match字面量的一元加号、Unicode 17标识符)以及frozendict和sentinel内置对象,数据扩展可用JSON书写,新增可选启用且没有内置来源的“ai”威胁模型,并加入C23位精确整数和多项误报减少。完整发布说明列出两类破坏性变更:macOS 27搭配任意Xcode及macOS 26搭配Xcode 27时,编译型语言的autobuild/manual build不受支持;GitHub Actions控制流图改用共享CFG库,相关自定义查询可能需要更新,旧Completion类已移除。需要注意:发布说明把2.27.3标为10月20日,同页已列出11月2日的2.27.4;文章没有给出误报率实测。
2026年11月3日,GitHub发布了关于CodeQL 2.27.3的更新日志文章。CodeQL是GitHub代码扫描背后的静态分析引擎。文章称,新版支持Python 3.15的新语言特性,为数据扩展增加JSON语法,增加C23的位精确整数,并在多种语言上提高准确度。有一个日期需要留意:CodeQL发布说明把2.27.3的发布日期写作2026年10月20日,同一页面还已列出11月2日的2.27.4。所以11月3日的这篇文章讲的是一个大约两周前的版本,而且已有更新的补丁版本。
在命令行工具方面,数据扩展文件现在可以写成JSON,结构与YAML形式相同,并允许Java风格的注释。扩展名为.json的文件按JSON解析,其他文件仍按YAML解析。这对由其他工具生成扩展文件的团队有用,因为JSON更容易由机器生成和检查。该版本还增加了一个可选启用的“ai”威胁模型,用于大语言模型生成的数据。它没有内置的来源模型,所以团队想让它发现东西,必须用数据扩展自己定义来源。
在Python方面,提取器现在接受Python 3.15语法,包括match字面量模式中的一元加号和Unicode 17标识符。CodeQL也支持新的frozendict和sentinel内置对象,并对frozendict的构造做了数据流建模。完整发布说明列出的内容比文章更多,例如对unicodedata中新的字素迭代器和binascii中新的编码函数的污点流建模。支持新语法意味着代码可以被解析和分析,并不意味着每个查询都已针对新写法调优。
其他语言有较小的改动。C和C++增加了对C23 _BitInt(N)类型的支持,以及对部分BlazingMQ消息类的流摘要。C#增加了通过is表达式和switch分支中的位置模式的数据流,并在配置私有注册表时把代理和证书环境变量传给NuGet命令行工具。Ruby把Grape::API请求子访问器(如params、cookies、body.read和env)视为远程流来源。这些新增可能改变结果:新的远程来源可能让原本干净的代码出现新告警。
多个查询为减少误报做了调整。C++的cpp/resource-not-released-in-destructor查询现在能识别经由局部别名释放的资源。C#的cs/simplifiable-boolean-expression查询在类型信息不完整时更安静。Java和Kotlin的SSRF与未验证重定向查询现在能识别URI主机与固定允许列表的不区分大小写比较,包括主机存放在局部变量里的情形。在Python中,py/xxe、py/xml-bomb和py/nosql-injection查询现在在选择不受信任来源时遵从所配置的威胁模型,默认仍用远程来源,并且现在也包含用数据扩展建模的来源。最后这一项可能让已经建模本地来源的团队出现更多告警。
完整发布说明还列出CLI构建支持的破坏性变更:macOS 27搭配任意Xcode,以及macOS 26搭配Xcode 27时,编译型语言的autobuild和manual build均不受支持。另一项破坏性变更涉及GitHub Actions分析。Actions的控制流图现在使用共享的CFG库,所以依赖特定CFG节点、边或基本块边界的自定义查询可能需要更新。旧的Completion类被移除,作者应改用DirectSuccessor、BooleanSuccessor和ReturnSuccessor等边标签。GitHub说,每个新的CodeQL版本都会自动部署到github.com的代码扫描,这些功能将包含在GitHub Enterprise Server 3.24版中,使用更旧GHES的用户可以手动升级CodeQL。文章没有给出实测误报率,所以团队应在分支上重新扫描并比较告警,再决定这些变化是否纯粹是改进。
简单概括:CodeQL 2.27.3增加了Python 3.15语法支持、JSON数据扩展、可选启用的ai威胁模型和C23位精确整数,并调整了多个查询以减少误报。需要核对四点。第一,发布说明把这个版本标为10月20日,同页已经有11月2日的2.27.4,所以它是大约两周前的版本。第二,完整发布说明另列出macOS 27任意Xcode和macOS 26搭配Xcode 27时编译型语言autobuild/manual build不受支持;Actions控制流图改用共享库,相关自定义查询可能需要更新。第三,新的远程来源和按威胁模型选择来源,可能让原本干净的代码出现新告警。第四,文章没有给出实测的误报率,升级后应在分支上重新扫描并比较告警。支持新语法只表示代码可以被解析和分析,不表示每个查询都为新写法做过调优,这一点不要误读。
补充一点:各语言还有一些较小的变化。C和C++增加了对C23的_BitInt(N)类型和部分BlazingMQ消息类的流摘要;C#增加了通过位置模式的数据流,并在配置私有注册表时把代理和证书环境变量传给NuGet;Ruby把Grape::API的请求子访问器视为远程流来源;Java和Kotlin的SSRF与重定向查询能识别不区分大小写的允许列表比较。
再补一点:2.27.3的发布说明比文章列出了更多Python建模,例如对unicodedata新的字素迭代器和binascii新编码函数的污点流建模,这些在文章里没有出现。
Sources
FAQ
CodeQL 2.27.3里哪项变更可能让现有查询失效?
GitHub Actions分析的控制流图改用共享CFG库。依赖特定节点、边或基本块边界的自定义查询可能要更新,旧Completion类已移除,应改用DirectSuccessor等边标签。
Python 3.15支持是否等于所有查询都已适配新写法?
不等于。文章说的是提取器能解析新语法,并为frozendict、sentinel等内置对象建模,意味着代码可被分析。它没有说每个查询都针对新写法调优,也没有给出误报率或检出率数据,升级后应在分支上比较告警。
这个版本到底是什么时候发布的?
GitHub文章写于2026年11月3日,说“最近发布”。但CodeQL发布说明把2.27.3标为2026年10月20日,同一页还列出11月2日的2.27.4。所以这是一个约两周前的版本,已有更新的补丁版本。