CodeQL C 查询 0.8.10:数据流查询全面迁移至威胁模型配置体系
静态分析SAST应用安全漏洞扫描代码质量【免费下载链接】codeqlCodeQL: 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点击查看免费下载导读CodeQL C# 语言包 0.8.10 发布了一项重要的架构性变更绝大多数追踪远程remote流源的数据流查询不再硬编码远程来源这一概念而是统一改用可扩展的威胁模型threat model配置来驱动。本篇文章将逐条解读 0.8.10 变更说明中被迁移的 19 个查询并结合 ThreatModels.qll 源码与模型配置文件讲清楚威胁模型配置的语法、默认行为、优先级规则以及如何在保持既有告警不变化的前提下通过配置调整每条查询的数据流来源。读完本文你将能够为任何一条 C# 安全查询精确地定制哪些输入被视为攻击者可控并理解这套机制在后续版本中的演进方向。变更背景从硬编码 RemoteFlowSource 到可配置威胁模型在 0.8.10 之前CodeQL C# 安全查询对不可信输入的来源判定通常是直接引用RemoteFlowSource、LocalFlowSource这类固定的数据流源类。这意味着一个查询把什么当作攻击者输入是写死在 QL 代码里的用户无法在不开箱即用、不修改查询代码的前提下按自己系统的实际情况增减来源。0.8.10 的变更说明指出Most data flow queries that track flow fromremoteflow sources now use the currentthreat modelconfiguration instead.即大部分追踪远程流源的数据流查询改为使用当前的威胁模型配置。由于默认威胁模型配置恰好是远程流源见下文supported-threat-models.model.yml与threat-model-grouping.model.yml因此默认情况下产生的告警没有任何变化只有当用户显式修改威胁模型配置时这些查询的行为才会随之改变。这套机制在源码中的落点非常清晰shared/threat-models/codeql/threatmodels/ThreatModels.qll中定义了可扩展谓词threatModelConfiguration(string kind, boolean enable, int priority)而各安全查询则通过ActiveThreatModelSource早期版本名为ThreatModelFlowSource见 csharp/ql/lib/CHANGELOG.md这一类来获取当前威胁模型配置下生效的数据流源。0.8.10 变更影响面19 个查询的完整清单根据 0.8.10.md本次迁移涉及以下 19 个 C# 查询查询 ID对应漏洞类型cs/code-injection代码注入如CompileAssemblyFromSource系列cs/command-line-injection命令行注入cs/user-controlled-bypass用户可控的绕过如认证/授权逻辑cs/count-untrusted-data-external-api统计流向外部 API 的不可信数据cs/untrusted-data-to-external-api不可信数据流入外部 APIcs/ldap-injectionLDAP 注入cs/log-forging日志伪造cs/xml/missing-validationXML 缺少校验cs/redos正则表达式拒绝服务ReDoScs/regex-injection正则注入cs/resource-injection资源注入cs/sql-injectionSQL 注入cs/path-injection路径注入cs/unsafe-deserialization-untrusted-input不可信输入的反序列化cs/web/unvalidated-url-redirection未校验的 URL 重定向cs/xml/insecure-dtd-handling不安全的 DTD 处理cs/xml/xpath-injectionXPath 注入cs/web/xss跨站脚本XSScs/uncontrolled-format-string不受控的格式化字符串这 19 个查询覆盖了 C# 语言包中最核心的注入类、数据暴露类与 Web 类漏洞是 CodeQL C# 安全分析的主力查询集。源码佐证查询如何切换到威胁模型驱动以cs/code-injection为例其配置位于 csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll。该文件中旧的来源定义被显式标记为弃用/** DEPRECATED: Use ThreatModelSource instead. */ deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } /** DEPRECATED: Use ThreatModelSource instead. */ deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } /** A source supported by the current threat model. */ class ThreatModelSource extends Source instanceof ActiveThreatModelSource { }从源码结构可以清晰看到迁移方式RemoteSource/LocalSource两个旧类被废弃取而代之的是ThreatModelSource——它直接以ActiveThreatModelSource为底层类型而ActiveThreatModelSource正是由威胁模型配置动态计算出来的来源集合。同样的模式也出现在 CommandInjectionQuery.qllcs/command-line-injection和 ConditionalBypassQuery.qllcs/user-controlled-bypass等文件中。在安全查询侧如 XMLInjection.ql 所示isSource谓词直接以ActiveThreatModelSource实例作为数据流源predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource }这意味着一旦威胁模型配置发生变化所有以ActiveThreatModelSource为来源的查询会自动跟随新配置无需改动任何 QL 代码。威胁模型配置机制解析威胁模型的核心实现位于 ThreatModels.qll其中定义了可扩展谓词extensible predicate threatModelConfiguration(string kind, boolean enable, int priority);三个参数的含义分别是kind要配置的威胁模型名称。可以是某个具体威胁模型的名称如environment、一个分组如local也可以是特殊值all。enable为true时启用指定威胁模型连同其子模型为false时禁用。priority配置的应用顺序数值越小越先被应用。最终生效的配置是逐行按priority升序处理的结果。ThreatModels.qll的文档注释给出了一个非常典型的三步配置示例{ kind: all, enable: true, priority: 0 } { kind: remote, enable: false, priority: 1 } { kind: environment, enable: true, priority: 2 }执行顺序为先启用全部威胁模型 → 再禁用remote分组 → 最后单独重新启用environment这一个威胁模型。可以看到优先级机制允许用户以先全开、再局部关闭、再定点打开的方式精细控制。从实现看ThreatModels.qll中threatModelEnabled谓词某个威胁模型最终是否启用取决于所有配置行中优先级最高数值最小且其kind能覆盖该威胁模型的那一行的enable值对配置表和分组表中都未提及的威胁模型其启用状态只受all相关的配置行控制currentThreatModel谓词。威胁模型的分组结构威胁模型的分组关系定义在 threat-model-grouping.model.yml 中当前仓库中可以看到如下分组结构# Default threat model [remote, default] # Remote threat models [request, remote] [response, remote] # Local threat models [database, local] [commandargs, local] [environment, local] [stdin, local] [file, local] [windows-registry, local] # Android threat models [android-external-storage-dir, android] [contentprovider, android] # Ungrouped threat models (implicit children of all) [database-access-result, all] [file-write, all] [reverse-dns, all] [view-component-input, all]需要注意两个关键点remote分组是default威胁模型的子模型而request与response又归属于remote。因此默认配置下请求体/响应体这类网络输入天然属于远程来源。所有威胁模型都隐式是all的子模型分组文件中只是显式列出以保持完整性。默认配置与告警不变的承诺默认的威胁模型配置由 supported-threat-models.model.yml 提供extensions: - addsTo: pack: codeql/threat-models extensible: threatModelConfiguration data: - [default, true, -2147483648] # The default threat model is included by default即默认配置以优先级-2147483648int 最小值启用了default威胁模型而default恰好包含整个remote分组request、response。这正是变更说明中默认配置就是远程流源所以告警不变的机制保证——0.8.10 的迁移对默认用户是透明的。实战如何通过威胁模型配置改变查询行为由于 0.8.10 之后这些查询全部由威胁模型配置驱动你可以通过 CodeQL 扩展文件.model.yml在项目级或扫描配置级注入自定义配置从而按需调整 19 个查询的数据流来源。以下给出几个典型场景配置行沿用kind / enable / priority三要素场景一禁用所有远程来源仅信任本地输入——适用于只有本地数据、明确不需要网络输入告警的内网工具extensions: - addsTo: pack: codeql/threat-models extensible: threatModelConfiguration data: - [default, false, 1]场景二在默认基础上追加环境变量为来源属于local分组的environmentextensions: - addsTo: pack: codeql/threat-models extensible: threatModelConfiguration data: - [environment, true, 10]场景三精细裁剪——保留响应体来源、剔除请求体来源request/response均属remote分组extensions: - addsTo: pack: codeql/threat-models extensible: threatModelConfiguration data: - [request, false, 10]依据ThreatModels.qll的优先级语义以上配置行都会覆盖默认配置中的对应条目默认优先级为 int 最小值先被应用priority更大的行后应用并胜出从而实现默认告警不变、按需增量裁剪的目标。需要说明的是威胁模型机制在仓库中仍被标注为实验性 APIThreatModels.qll头部注明 INTERNAL use only. This is an experimental API subject to change without notice使用时应关注后续版本变更。演进脉络0.8.10 之后的变化威胁模型机制并非止步于远程来源。从后续版本的变更记录可以看到它的持续演进0.8.13.md 中追踪本地流源的数据流查询cs/code-injection、cs/resource-injection、cs/sql-injection、cs/uncontrolled-format-string也切换到了威胁模型配置同时移除了若干Stored变体查询如cs/stored-command-line-injection、cs/web/stored-xss并说明其告警可通过启用file与database威胁模型来恢复——这正是 0.8.10 打下的可配置地基的直接受益。csharp/ql/lib/CHANGELOG.md 记录了ThreatModelFlowSource更名为ActiveThreatModelSource以更准确地表达仅包含当前激活的威胁模型来源这一语义ThreatModelFlowSource被标记为弃用。这一演进路径说明0.8.10 是 C# 安全查询从硬编码来源走向统一可配置来源体系的关键里程碑它先把远程来源迁移到新机制后续版本再把本地来源、存储型来源逐步纳入同一套配置体系最终让用户在不改查询代码的前提下用一个配置文件完整掌控全部安全查询的攻击面定义。小结0.8.10 变更虽只占据一行变更说明背后却是 C# 安全分析架构的一次实质性升级19 个核心数据流查询的流源定义从写死的RemoteFlowSource迁移到了由threatModelConfiguration谓词驱动的威胁模型体系。理解kind / enable / priority三要素与default → remote → request/response的分组继承关系即可在不改变默认告警的前提下按需为cs/sql-injection、cs/web/xss、cs/code-injection等查询定制攻击者输入范围。相关实现与配置可在 ThreatModels.qll、supported-threat-models.model.yml 与 threat-model-grouping.model.yml 中继续深入阅读。赞分享静态分析SAST应用安全漏洞扫描代码质量【免费下载链接】codeqlCodeQL: 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点击查看免费下载相关推荐CodeQL C/C 查询库 0.5.5 变更解读*Configuration 数据流配置弃用与 *Flow 模块迁移指南CodeQL C/C 查询库 0.5.5 变更解读 Configuration 数据流配置弃用与 Flow 模块迁移指南 导读 本文围绕 CodeQL 仓静态分析SAST应用安全漏洞扫描代码质量Plasmic 旧版数据查询迁移指南将 $queries 迁移至现代 $q 查询Plasmic 旧版数据查询迁移指南将 $queries 迁移至现代 $q 查询 本文是 Plasmic Designer AI 技能 plasmic de低代码前端后端CodeQL C 0.3.0 破坏性变更解析contextual queries 及查询库迁移至 codeql/csharp-all 包CodeQL C 0.3.0 破坏性变更解析contextual queries 及查询库迁移至 codeql/csharp all 包 本篇技术指南围绕 C静态分析SAST应用安全漏洞扫描代码质量上一篇企业级密钥管理终极指南Infisical开源平台深度解析与实战部署下一篇微软公开美国全国建筑轮廓数据集重塑地理信息应用的里程碑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Famo.us 布局指南:基于 Transform 与 Modifier 构建渲染树布局体系

Famo.us 布局指南:基于 Transform 与 Modifier 构建渲染树布局体系

前端 【免费下载链接】famous This repo is being deprecated. Please check out http://github.com/famous/engine 项目地址: https://gitcode.com/gh_mirrors/fa/famous 点击查看 免费下载 本篇技术指南围绕 Famo.us 的核心布局机制展开:Transform 负…

2026/10/10 5:07:26 阅读更多 →
Helix CLI 完全指南:用 v3 命令行管理本地 Helix 实例与 Helix Cloud 资源

Helix CLI 完全指南:用 v3 命令行管理本地 Helix 实例与 Helix Cloud 资源

数据库图数据库向量数据库AI 应用RAG 【免费下载链接】helix-db HelixDB is an OLTP graph database with native vector and full-text search built in Rust on Object Storage. 项目地址: https://gitcode.com/gh_mirrors/he/helix-db 点击查看 免费下载 本篇指…

2026/10/10 5:07:26 阅读更多 →
YealinkLinux | miniSIPServer使用说明 | 福大嵌入式实时系统课学习 | 音频通话

YealinkLinux | miniSIPServer使用说明 | 福大嵌入式实时系统课学习 | 音频通话

零、实验环境配置 参考:Windows&Linux | PJSIP使用说明 | 福大嵌入式实时系统课学习 | 音频通话 本人前面的博客提及miniSIPServer的使用,但是本机通话肯定不需要用到服务器,但是实际运用中,通话需要部署在服务器上&#xf…

2026/10/10 5:07:26 阅读更多 →

最新新闻

杨幂×Prada:顶奢代言背后的选人逻辑与商业价值拆解

杨幂×Prada:顶奢代言背后的选人逻辑与商业价值拆解

关于杨幂成为Prada代言人这件事,圈内讨论热度一直没停过。不管是时装周前排看秀的镜头,还是广告大片释放出的状态,都让“顶奢代言”这个概念在当下的内娱市场里有了更具体的参照物。借着这个热点,我想认真聊聊这背后的逻辑&#x…

2026/10/10 5:46:40 阅读更多 →
Unison 语言中 Term 声明禁止携带哈希限定名:语法规则、解析器实现与转写测试验证

Unison 语言中 Term 声明禁止携带哈希限定名:语法规则、解析器实现与转写测试验证

编程语言编译器语言运行时开发工具 【免费下载链接】unison A friendly programming language from the future 项目地址: https://gitcode.com/gh_mirrors/un/unison 点击查看 免费下载 本文以 Unison 开源仓库中的转写(transcript)测试文档…

2026/10/10 5:46:40 阅读更多 →
PCA9422+STM32F405RG电源管理实战:寄存器配置与调试全解析

PCA9422+STM32F405RG电源管理实战:寄存器配置与调试全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:46:40 阅读更多 →
有效信息是博文生成的核心要素

有效信息是博文生成的核心要素

您提供的信息中没有有效的项目标题(当前显示为“无标题”),且相关热搜词和网络搜索内容均为空白。缺少核心输入,我无法生成围绕具体主题、场景和关键词展开的高质量原创博文。《无标题》不是一个可执行的项目主题,强行…

2026/10/10 5:46:40 阅读更多 →
colorlog 6.10.1 使用指南:为 Python 标准库 logging 接入 ANSI 彩色终端输出

colorlog 6.10.1 使用指南:为 Python 标准库 logging 接入 ANSI 彩色终端输出

【免费下载链接】context-hub 项目地址: https://gitcode.com/gh_mirrors/co/context-hub 点击查看 免费下载 导读 colorlog 是一个轻量的 Python 第三方库,它的作用是为 Python 标准库 logging 的处理器(handler)增加 ANSI 颜色…

2026/10/10 5:46:40 阅读更多 →
缩短招聘周期:从人才画像到Offer的11个高效策略

缩短招聘周期:从人才画像到Offer的11个高效策略

招聘周期拉长,用人部门催、候选人等不起、HR夹在中间两头受气——这是过去几年我在各类企业里反复看到的真实场面。尤其遇到急招岗位,从职位发布到人选入职动辄拖上三四十天,错过业务窗口不说,还经常出现“谈好的Offer被对手截胡”…

2026/10/10 5:45:40 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →