【代码审计】CodeQL初识

admin 2026-04-25 04:47:46 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍CodeQL代码审计工具的基本使用方法,包括创建数据库、升级格式、全量扫描与精简规则加速扫描等操作步骤。文档以WebGoat项目为例展示漏洞检测结果,统计出35个漏洞实例并分析SQL注入等5类高危漏洞。最后演示了VSCode插件的可视化漏洞定位功能,为代码安全审计提供实用指导。 综合评分: 85 文章分类: 代码审计,WEB安全,安全工具,漏洞分析,安全开发


cover_image

【代码审计】CodeQL初识

原创

十月的进阶之路 十月的进阶之路

十月的进阶之路

2026年4月18日 17:09 重庆

在小说阅读器读本章

去阅读

与其精神内耗,不如出门瞎跑。

目录

  1. 背景
  2. CodeQL 检测示例
  3. 结果总览
  4. 结果抽样分析
  5. 使用 VSCode 的 CodeQL 插件

一、背景

微软开发的SAST工具,将代码转化成一种关系型数据库,可用QL查询语句来查找符合特定模式的代码片段,通过这种方式查找漏洞。QL语言作为一种面向对象的逻辑编程语言,语法类似于SQL,但引入了类 (Class) 和谓词 (Predicate) 等概念。

CodeQL组成部分:解析引擎+SDK

  • 解析引擎地址:
https://github.com/github/codeql-cli-binaries/releases
  • 规则库地址:
https://github.com/github/codeql

解析引擎:不开源,解析编写的规则,但是可以直接在官网下载二进制文件直接使用。

SDK(规则库):完全开源,里面包含大部分现成的漏洞规则,可编写自定义规则

二、CodeQL 检测示例

注意:本小结的示例代码依旧以WebGoat作为案例

1. 创建数据库

codeql database create webgoat --language=java --command="mvn clean package -DskipTests" --source-root=D:\code-audit\codeQL\WebGoat-2025.3

2. 升级数据库格式

升级CodeQL数据库的格式,让旧数据库适配最新版的CodeQL工具/扫描规则。

codeql database upgrade webgoat

3. 全量规则扫描(基础版)

调用CodeQL官方规则库,对数据库进行代码扫描,输出漏洞/缺陷报告。默认的检测命令太慢了,加入如下的参数稍微快一点。

codeql database analyze D:\code-audit\codeQL\data\webgoat D:\code-audit\codeQL\codeql-main\java\ql\src\Security --format=csv --output=webgoat_result.csv --threads 0 --ram 16 --no-debug --no-save-cache

当然如果您执行上述的命令,会出现如下的情况,内存不足。

4. 精简规则加速扫描

针对这种情况精简下规则,将不需要的规则去除掉。在codeql-main\java\ql\src\Security目录下编写fast-web-security.qls文件,加入如下规则。

- description: fast-web-security

# 只保留你关心的 Web 安全类 CWE 目录
- queries: Security/CWE/CWE-022
- queries: Security/CWE/CWE-023
- queries: Security/CWE/CWE-074
- queries: Security/CWE/CWE-079
- queries: Security/CWE/CWE-089
- queries: Security/CWE/CWE-094
- queries: Security/CWE/CWE-113
- queries: Security/CWE/CWE-134
- queries: Security/CWE/CWE-200
- queries: Security/CWE/CWE-209
- queries: Security/CWE/CWE-352
- queries: Security/CWE/CWE-601
- queries: Security/CWE/CWE-611
- queries: Security/CWE/CWE-918

# 再做一次“收口”:只保留 security 且高精度的查询
- include:
    tags contain: security
    precision:
      - high
      - very-high

执行验证命令resolve queries,将suite展开成最终会执行的查询列表。

重新执行命令扫描。

codeql database analyze D:\code-audit\codeQL\data\webgoat D:\code-audit\codeQL\codeql-main\java\ql\src\Security\fast-web-security.qls --format=csv --output=webgoat_fast_result.csv --threads 0 --ram 16 --no-debug

这次很快就扫描完成。

三、结果总览

先来看看扫描的漏洞整体状态,如下。

(一)漏洞总体统计

  • 总计漏洞数量:35个实例
  • 漏洞类型:5种不同类型
  • 高危漏洞占比:94.3%(33/35个)
  • 主要影响范围:SQL安全、文件操作安全、Web安全配置

(二)漏洞类型分布

| 漏洞类型 | 危险级别 | 数量 | 主要风险 | | — | — | — | — | | SQL注入漏洞 | 高危 | 16个 | 数据泄露、篡改、服务器接管 | | 路径遍历漏洞 | 高危 | 15个 | 敏感文件泄露、服务器文件访问 | | CSRF防护漏洞 | 中危 | 2个 | 跨站请求伪造、未授权操作 | | Zip Slip漏洞 | 高危 | 1个 | 文件覆盖、恶意文件上传 | | XXE漏洞 | 高危 | 1个 | 内部信息泄露、端口扫描 |

四、结果抽样分析

本小结随机抽取一个sql注入进行结果分析,首先介绍下codeql结果中各列的含义,当然为了表格的美观,我建议将csv转换为xlsx视觉上更舒服。

| Excel列号 | 完整列名 | 核心作用 | | — | — | — | | A | 漏洞类型(Vulnerability Type) | 快速识别漏洞属于哪一类安全问题 | | B | 漏洞描述(Vulnerability Description) | 一句话说明漏洞的原理和基本危害 | | C | 严重级别(Severity Level) | 评估漏洞的紧急程度 | | D | 输入源追踪(Source Trace) | 找到用户输入从哪里进入漏洞代码(最关键的溯源列) | | E | 漏洞所在文件(Vulnerable File) | 漏洞代码实际存在的Java文件路径 | | F | 起始行号(Start Line) | 漏洞代码片段的第一行行号 | | G | 起始列号(Start Column) | 漏洞代码片段的第一个字符位置 | | H | 结束行号(End Line) | 漏洞代码片段的最后一行行号 | | I | 结束列号(End Column) | 漏洞代码片段的最后一个字符位置 |

根据列表的内容定位代码中的漏洞点,经过发现这正是jwt存在sql注入的漏洞点。

五、使用 VSCode 的 CodeQL 插件

csv文件去定位代码,终究是比较繁琐,那么我们考虑使用codeql插件,可以免去手动定位这个步骤。

当然你可以参考内置的检测规则撰写自己的检测规则,充分发挥你的能力。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:十月的进阶之路 十月的进阶之路 十月的进阶之路《【代码审计】CodeQL初识》

【代码审计】CodeQL初识 网络安全文章

【代码审计】CodeQL初识

文章总结: 本文介绍CodeQL代码审计工具的基本使用方法,包括创建数据库、升级格式、全量扫描与精简规则加速扫描等操作步骤。文档以WebGoat项目为例展示漏洞
小记 网络安全文章

小记

文章总结: 本文作者通过反思学习过程,阐述了从‘孤立推演’到‘知识复用’的认知转变。指出过度依赖自底向上推演易导致重复发明轮子,强调应结合高质量外部信息(如文档
评论:0   参与:  0