mcpField
C
codeql-semgrep

codeql-semgrep

github.com/itallstartedwithaidea安全4478 次安装28 周前更新
代码仓库

关于 codeql-semgrep

面向 Agent 的安全分析技能,使用 CodeQL 和 Semgrep 扫描代码、编写项目专属规则并提供修复指导。它结合数据流查询与结构化模式匹配。

主要功能

  1. 01运行 CodeQL 和 Semgrep 分析
  2. 02编写项目专属安全规则
  3. 03追踪输入到危险操作的数据流
  4. 04提供可执行的修复指导
  5. 05配置 CI/CD 扫描

适用场景

  1. 01扫描代码中的漏洞
  2. 02强制执行认证或 ORM 约定
  3. 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

评论

支持 Markdown