尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CodeQL C 查询包 0.7.0 版本解析:新增函数级访问控制检测与 Zip Slip 查询更名
静态分析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# 查询包csharp-qlpack的0.7.0版本变更记录csharp/ql/src/change-notes/released/0.7.0.md系统梳理该版本引入的新安全查询与查询更名事件。通过结合仓库中对应的查询实现MissingAccessControl.ql、ZipSlip.ql及其底层库文件读者将掌握cs/web/missing-function-level-access-control查询的检测逻辑与适用场景、cs/zipslip查询更名前后的语义变化以及如何在 CodeQL 中运行、验证这些查询。版本 0.7.0 概览0.7.0是 CodeQL C# 查询库演进过程中的一个早期里程碑版本对应仓库目录 csharp/ql/src/change-notes/released/ 下的发布记录。该版本的核心变更集中在两点类别变更内容对应查询 ID新增查询新增缺少函数级访问控制查询cs/web/missing-function-level-access-control查询更名Zip 解压过程中任意文件写入Zip Slip更名为归档解压过程中任意文件访问cs/zipslip这两个变更分别对应 CWE-285/CWE-284/CWE-862授权缺失与 CWE-022路径遍历是 Web 安全审计中最常见的问题类型。新增查询缺失函数级访问控制cs/web/missing-function-level-access-control查询入口与元数据该查询的入口位于 csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql其查询声明头完整定义了查询的元数据/** * name Missing function level access control * description Sensitive actions should have authorization checks to prevent them from being used by malicious actors. * kind problem * problem.severity warning * security-severity 7.5 * precision medium * id cs/web/missing-function-level-access-control * tags security * external/cwe/cwe-285 * external/cwe/cwe-284 * external/cwe/cwe-862 */ import csharp import semmle.code.csharp.security.auth.MissingFunctionLevelAccessControlQuery from Method m where missingAuth(m) select m, This action is missing an authorization check.从元数据可以看出该查询类型为problem单点问题报告、严重度为warning、安全严重度 7.5、精度为medium同时标注了三个 CWE 标签285 授权不当、284 访问控制不当、862 缺少授权。查询主体逻辑委托给 MissingFunctionLevelAccessControlQuery.qll最终对每个Method m判断其是否missingAuth(m)若缺失则在结果中输出 This action is missing an authorization check.。底层检测逻辑剖析查询的判定逻辑完全封装在 MissingFunctionLevelAccessControlQuery.qll 中其核心可拆解为四个谓词1.needsAuth(ActionMethod m)—— 识别需要授权的敏感动作predicate needsAuth(ActionMethod m) { m.isEdit() or m.isAdmin() }该谓词基于ActionMethod类型位于semmle.code.csharp.frameworks.microsoft.AspNetCore与system.web.UI框架库中凡是名称或特征命中编辑Edit或管理Admin语义的动作方法都被视为敏感操作需要存在授权检查。2.AuthExpr—— 识别授权/认证检查表达式class AuthExpr extends Expr { AuthExpr() { this.(MethodCall).getTarget() .hasFullyQualifiedName(System.Security.Principal, IPrincipal, IsInRole) or this.(PropertyAccess).getTarget() .hasFullyQualifiedName(System.Security.Principal, IIdentity, [IsAuthenticated, Name]) or this.(MethodCall).getTarget().getName().toLowerCase().matches(%auth%) or this.(PropertyAccess).getTarget().getName().toLowerCase().matches(%auth%) } }AuthExpr通过四种模式识别授权检查调用IPrincipal.IsInRole判断角色访问IIdentity.IsAuthenticated或IIdentity.Name判断认证状态以及通过方法名或属性名包含auth子串不区分大小写进行启发式匹配。这种设计既覆盖了标准的 .NET 安全基元也能捕获自定义的授权 API。3. 三种授权方式的判定hasAuthViaCode/hasAuthViaXml/hasAuthViaAttributehasAuthViaCode借助m.getAnAuthorizingCallable()找到方法链上的所有调用者calls*为传递闭包判断其中是否存在包含AuthExpr的调用者即代码内显式执行了授权逻辑hasAuthViaXml解析 Web.config 中System.Web配置节下的authorizationXML 元素若存在deny子元素且通过location path...标签或物理路径推导出的路由getARoute()与方法路由m.getARoute()匹配则视为已通过声明式配置完成授权hasAuthViaAttribute检查方法自身或方法所属类型含基类通过getAnUnboundBaseType*向上追溯是否带有名称匹配%auth%的特征属性如[Authorize]。4.missingAuth—— 汇总判定predicate missingAuth(ActionMethod m) { needsAuth(m) and not hasAuthViaCode(m) and not hasAuthViaXml(m) and not hasAuthViaAttribute(m) and exists(m.getBody().getAChildStmt()) // exclude empty methods }只有当方法需要授权但三种授权途径代码、XML 配置、属性标注均未命中时才判定为缺失授权同时通过exists(m.getBody().getAChildStmt())排除空方法体避免对抽象或空实现产生误报。适用场景与典型示例该查询适用于以下 C# Web 应用场景ASP.NET MVC / Web API 中名称或语义属于编辑、管理类的 Action 缺少[Authorize]属性或角色校验自定义授权框架中敏感接口未调用任何IsInRole、IsAuthenticated或名称含auth的认证方法声明式授权Web.configauthorization未覆盖到某敏感路由。一个典型的安全修复是为敏感 Action 添加[Authorize]特性属性名含auth可被hasAuthViaAttribute识别或在方法体内调用User.IsInRole(Admin)等授权 API。修复后重新运行查询对应告警即会消失。查询更名Zip Slip 查询语义的正式扩展更名内容版本 0.7.0 将查询 Arbitrary file write during zip extraction (Zip Slip)cs/zipslip更名为 Arbitrary file access during archive extraction (Zip Slip)。这一更名并非简单的文案调整而是反映了查询检测能力从仅关注 ZIP 解压写入向覆盖更广泛归档解压文件访问的语义扩展。更名后的查询实现更名后的查询入口位于 csharp/ql/src/Security Features/CWE-022/ZipSlip.ql/** * name Arbitrary file access during archive extraction (Zip Slip) * description Extracting files from a malicious ZIP file, or similar type of archive, without * validating that the destination file path is within the destination directory * can allow an attacker to unexpectedly gain access to resources. * kind path-problem * id cs/zipslip * problem.severity error * security-severity 7.5 * precision high * tags security * external/cwe/cwe-022 */ import csharp import semmle.code.csharp.security.dataflow.ZipSlipQuery import ZipSlip::PathGraph from ZipSlip::PathNode source, ZipSlip::PathNode sink where ZipSlip::flowPath(source, sink) select source.getNode(), source, sink, Unsanitized archive entry, which may contain .., is used in a $., sink.getNode(), file system operation该查询的查询 IDcs/zipslip保持不变但类型为path-problem路径问题可展示完整的 source→sink 污点传播链路严重度为error精度high。查询通过ZipSlip::flowPath(source, sink)在 taint 流图上寻找从归档条目到文件系统操作的污点路径。底层污点追踪配置Zip Slip 的检测逻辑封装在 ZipSlipQuery.qll 中它是一个标准的TaintTracking::Global配置包含三类核心组件污点源SourceArchiveFullNameSource识别对System.IO.Compression.ZipArchiveEntry.FullName属性的访问——该属性返回归档条目的完整路径可能包含..路径穿越片段。污点汇聚点Sink涵盖多种文件系统操作ExtractToFileArgSinkZipFileExtensions.ExtractToFile扩展方法的destinationFileName参数FileOpenArgSinkFile.Open/File.OpenWrite/File.Create的path参数FileStreamArgSink/FileInfoArgSinkFileStream、FileInfo构造函数的路径参数。清洗器SanitizerGetFileNameSanitizerPath.GetFileName仅提取文件名剥离路径、SubstringSanitizerString.Substring提取单一路径组件以及StringCheckSanitizer对String.StartsWith守卫的路径校验用于确保目标路径位于允许的输出目录内且不会与Path.Combine的..未解析特性相混淆。这条 source→sink 链路与 ApiSources.qll、ApiSinks.qll 中定义的 API 源/汇模型协同工作共同支撑查询的污点传播分析。如何运行与验证 0.7.0 的查询运行环境要使用 0.7.0 版本中的查询需要安装 CodeQL CLI 或使用 VS Code 的 CodeQL 扩展使用codeql database create为 C# 项目创建 CodeQL 数据库该过程由 csharp 提取器 完成源码到 TRAP 的抽取将查询包定位到本仓库的 csharp/ql 目录。运行单条查询codeql query run csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql \ --databaseyour-csharp-db \ --outputmissing-access-control.bqrs或一次性运行包含该查询的整套安全套件codeql database analyze your-csharp-db \ csharp/ql/src --formatsarif-latest --outputresults.sarif对于cs/zipslip这类path-problem查询SARIF 输出中会附带完整的污点传播路径source → 中间节点 → sink便于开发者逐跳审查数据流是否真实可达。测试验证仓库中 C# 查询的测试位于 csharp/ql/test 目录使用.qlref文件引用目标查询.expected文件保存期望输出。修改查询逻辑后可通过codeql test run回归验证若期望输出需要更新可使用codeql test run --update自动重写.expected文件。版本演进中的后续变更参考作为发布记录0.7.0的变更在后续版本中持续演进。例如在 0.8.1 版本变更记录 中cs/web/missing-function-level-access-control查询继续获得改进完整的变更历史可参考 csharp/ql/src/CHANGELOG.md。如需了解查询在后续版本中的精度提升、误报修复等细节可逐版本查阅 csharp/ql/src/change-notes/released/ 目录。小结CodeQL C# 查询包 0.7.0 通过两个关键变更增强了 C# Web 应用的安全审计能力新增cs/web/missing-function-level-access-control基于needsAuth 三种授权途径代码/XML/属性的综合判定识别缺少授权检查的敏感编辑与管理动作覆盖 CWE-285/284/862更名cs/zipslip将查询描述从ZIP 解压写入扩展为归档解压文件访问配合ZipSlipQuery.qll中覆盖ZipArchiveEntry.FullName源、多种文件系统操作汇点与路径清洗器的污点追踪配置检测范围更广、语义更准确。对于安全工程师而言这两个查询可直接集成进 CI 的codeql database analyze流程用于 ASP.NET 应用的授权缺失审计与归档解压路径穿越检测。赞分享静态分析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.0.11 版本解析新查询、破坏性变更与精度提升CodeQL C/C 查询包 0.0.11 版本解析新查询、破坏性变更与精度提升 本指南以 CodeQL 仓库中 cpp/ql/src/change no静态分析SAST应用安全漏洞扫描代码质量CodeQL 1.20 的 C/C 分析改进详解新查询、查询更新与 QL 库增强CodeQL 1.20 的 C/C 分析改进详解新查询、查询更新与 QL 库增强 本指南基于 CodeQL 仓库中 change notes/1.20/a静态分析SAST应用安全漏洞扫描代码质量CodeQL C 查询包 0.4.2 更新解读新增逗号误导性缩进检测与既有查询误报修复CodeQL C 查询包 0.4.2 更新解读新增逗号误导性缩进检测与既有查询误报修复 导读 本文基于 CodeQL 仓库中 cpp/ql/src/cha静态分析SAST应用安全漏洞扫描代码质量上一篇为什么图片总是拖出屏幕largeImage4cj三种PAN_LIMIT模式深度解析与选型指南下一篇没有真实设备用OpenModScan内置数据模拟器一键完成Modbus轮询测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

js-lingui Metro Transformer 深度指南:在 React Native 与 Expo 中直接编译 .po 目录文件

js-lingui Metro Transformer 深度指南:在 React Native 与 Expo 中直接编译 .po 目录文件

开发工具前端 【免费下载链接】js-lingui 🌍 📖 A readable, automated, and optimized (2 kb) internationalization for JavaScript 项目地址: https://gitcode.com/gh_mirrors/js/js-lingui 点击查看 免费下载 本篇指南围绕 Lingui 的 li…

📅 2026/10/10 2:44:18
板级适配 · SystemInit:给芯片上电后的“自检程序“动手

板级适配 · SystemInit:给芯片上电后的“自检程序“动手

阅读指引:这篇讲的是芯片"刚通电、还没进 main"那一刻发生的事。下面术语不少(CMSIS、HAL、FPU、VTOR…),但每个术语我都会先给一句直白的解释,跟着读就行,别被缩写吓到。核心其实就一句&#xf…

📅 2026/10/10 2:44:18
HackRF One手册解析:硬件、编译与GNURadio实战

HackRF One手册解析:硬件、编译与GNURadio实战

简介:HackRF One软件无线电平台用户手册是一份面向SDR入门者与嵌入式开发者的中文操作指南,系统讲解HackRF One的硬件构成、驱动安装与环境配置方法。手册从平台简介与射频前端、FPGA处理架构等硬件分析入手,逐步覆盖Windows下的VS2012运行库…

📅 2026/10/10 2:44:18
MORE NEWS

更多资讯

📰

mcp-for-beginners 实战教程:用 AI Toolkit 构建 GitHub 仓库克隆 MCP 服务器

教程文档人工智能 【免费下载链接】mcp-for-beginners This open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for deve…

📰

Agones Client SDK 完全指南:游戏服务器接入、状态管理与自定义 SDK 开发

游戏开发云原生 【免费下载链接】agones Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ag/agones 点击查看 免费下载 导读 本篇指南围绕 Agones(Kubernetes 上的专用游戏…

📰

Rust 指针地址泄露检测实战:rust-review 插件的 info-disclosure 集群与 PTREXPOSE 审计

AI 技能AI 插件应用安全网络安全AI 评测 【免费下载链接】skills Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows 项目地址: https://gitcode.com/gh_mirrors/skills8/skills 点击查看 免费下载 本篇技术…

📰

用Opus55做视频的完整流程

用 Claude Opus 5.5 做一条视频的完整流程是什么 看别人用 Claude Opus 5.5 做视频,最关心的往往不是 prompt 本身,而是「从想法到成片到底走了几步」。Gen Feeds(https://genfeeds.com/)的 Opus 5.5 创作实验室 https://genfeeds…

📰

oh-my-openagent 记忆反思子代理人格(reflection-persona)解析:从对话复盘到记忆固化的完整工作流

人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排 【免费下载链接】oh-my-openagent OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering. 项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-…

📰

老游戏低配优化指南:CPU单核与显存管理实战

1. 为什么十几年后还有人折腾这款老游戏每次看到有人问“这游戏都这么多年了,还有必要优化吗”,我都想回一句:你去试试在现在的机器上直接跑原版,看看那个帧数曲线有多酸爽。这款游戏当年是出了名的吃CPU,双核时代它能…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬