关于 codeql-semgrep
面向 Agent 的安全分析技能,使用 CodeQL 和 Semgrep 扫描代码、编写项目专属规则并提供修复指导。它结合数据流查询与结构化模式匹配。
主要功能
- 01运行 CodeQL 和 Semgrep 分析
- 02编写项目专属安全规则
- 03追踪输入到危险操作的数据流
- 04提供可执行的修复指导
- 05配置 CI/CD 扫描
适用场景
- 01扫描代码中的漏洞
- 02强制执行认证或 ORM 约定
- 03将安全扫描加入 CI/CD 流水线
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill codeql-semgrep安装后在 Claude Code 中输入/codeql-semgrep确认已加载。
详细介绍
CodeQL 和 Semgrep
googleadsagent.ai™ 的 Agent Skills™ 项目之一
描述
CodeQL 和 Semgrep 将生产级静态分析集成到 Agent 工作流中,用于深度漏洞检测、自定义规则编写和自动化代码审查强制执行。Agent 会编写针对项目特定模式的 CodeQL 查询和 Semgrep 规则,在代码库中运行这些规则,并根据结果提供可执行的修复指导。
基于模式匹配的安全扫描器只能发现表层问题。CodeQL 和 Semgrep 的分析更深入:CodeQL 会构建程序结构的关系数据库,并执行查询,追踪从源(用户输入)到汇(危险操作)的数据流。Semgrep 则通过类型感知分析匹配语法模式。二者结合能够发现正则表达式扫描器完全无法检测的漏洞。
这项技能不止于运行默认规则集。Agent 会针对项目特定模式编写自定义规则:确保所有数据库查询都使用项目的 ORM 封装、验证身份验证中间件是否应用于每个路由,或确认错误响应不会泄露堆栈跟踪。自定义规则能够将组织的安全知识固化下来,不因个别审查者的更替而消失。
适用场景
- 对 AI 生成或人工编写的代码运行静态分析
- 为项目特定模式编写自定义安全规则
- 将安全扫描集成到 CI/CD 流水线中
- 追踪从用户输入到危险操作的数据流
- 强制执行架构安全约束(所有路由都需身份验证、使用 ORM)
- 用户请求“静态分析”、“CodeQL”或“Semgrep”时
工作原理
graph TD
A[Codebase] --> B{Analysis Engine}
B -->|Data Flow| C[CodeQL: Build Database]
B -->|Pattern Match| D[Semgrep: Parse AST]
C --> E[Run CodeQL Queries]
D --> F[Run Semgrep Rules]
E --> G[Taint Tracking: Source → Sink]
F --> H[Pattern Matches + Metavariables]
G --> I[Merge Findings]
H --> I
I --> J[Deduplicate + Prioritize]
J --> K[Remediation Report]
K --> L[CI/CD Gate: Pass/Fail]
CodeQL 擅长数据流分析(追踪污染输入在程序中的流动);Semgrep 擅长模式匹配(查找结构性反模式)。同时运行两者可提供全面的覆盖。
实现
Semgrep 规则
# .semgrep/agent-rules.yml
rules:
- id: sql-injection-f-string
patterns:
- pattern: |
$CURSOR.execute(f"...", ...)
message: >
SQL query uses f-string interpolation, which is vulnerable to SQL injection.
Use parameterized queries instead.
severity: ERROR
languages: [python]
metadata:
cwe: ["CWE-89"]
confidence: HIGH
- id: missing-auth-middleware
patterns:
- pattern: |
@app.route($PATH, ...)
def $FUNC(...):
...
- pattern-not-inside: |
@require_auth
@app.route($PATH, ...)
def $FUNC(...):
...
message: >
Route handler $FUNC lacks @require_auth decorator.
All routes must be authenticated unless explicitly exempted.
severity: WARNING
languages: [python]
metadata:
cwe: ["CWE-306"]
- id: no-eval-user-input
patterns:
- pattern: eval($X)
- pattern-where-python: |
not $X.startswith('"')
message: "eval() called with potentially dynamic input"
severity: ERROR
languages: [python]
metadata:
cwe: ["CWE-95"]
CodeQL 查询
/**
* @name SQL injection from request parameter
* @description Finds SQL queries constructed from HTTP request parameters
* @kind path-problem
* @severity error
* @id agent-skills/sql-injection
* @tags security
* cwe-089
*/
import python
import semmle.python.dataflow.new.TaintTracking
import semmle.python.ApiGraphs
class SqlInjectionConfig extends TaintTracking::Configuration {
SqlInjectionConfig() { this = "SqlInjectionConfig" }
override predicate isSource(DataFlow::Node source) {
exists(API::CallNode call |
call = API::moduleImport("flask").getMember("request").getMember("args").getMember("get").getACall() and
source = call
)
}
override predicate isSink(DataFlow::Node sink) {
exists(API::CallNode call |
call = API::moduleImport("sqlite3").getMember("Cursor").getMember("execute").getACall() and
sink = call.getArg(0)
)
}
}
from SqlInjectionConfig config, DataFlow::PathNode source, DataFlow::PathNode sink
where config.hasFlowPath(source, sink)
select sink.getNode(), source, sink, "SQL query depends on $@.", source.getNode(), "user input"
CI/CD 集成
# GitHub Actions
- name: Semgrep Scan
uses: semgrep/semgrep-action@v1
with:
config: >-
p/owasp-top-ten
p/r2c-security-audit
.semgrep/agent-rules.yml
- name: CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
languages: python, javascript
queries: +.codeql/custom-queries
最佳实践
- 同时运行 CodeQL(数据流)和 Semgrep(模式匹配),实现互补覆盖
- 针对项目特定的安全不变量(身份验证、ORM、输入验证)编写自定义规则
- 逐步添加规则——从高置信度、低误报率的模式开始
- 在每条规则中加入 CWE ID,以实现标准化漏洞分类
- 在每个 PR 上运行扫描,并阻止合并包含 ERROR 严重性问题的更改
- 随着代码库架构演进,每季度审查并更新自定义规则
平台兼容性
| 平台 | 支持情况 | 备注 |
|---|---|---|
| Cursor | 完全支持 | 规则编写 + CI 配置 |
| VS Code | 完全支持 | Semgrep 扩展 |
| Windsurf | 完全支持 | 静态分析集成 |
| Claude Code | 完全支持 | 查询/规则生成 |
| Cline | 完全支持 | 安全规则编写 |
| aider | 部分支持 | YAML/QL 文件编辑 |
相关技能
- Agent 安全扫描 - 更广泛的漏洞检测,涵盖依赖项 CVE 和 Agent 专属威胁模型
- 密钥保护 - 凭据泄露扫描,通过针对密钥的模式匹配补充静态分析
- CI/CD 流水线 - 配置 CodeQL 和 Semgrep 扫描作为自动化质量门禁的流水线
关键词
codeql semgrep static-analysis sast taint-tracking custom-rules vulnerability-detection ci-cd-security
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License