CyberKareem/kameQL

GitHub: CyberKareem/kameQL

kameQL 是一套基于 CodeQL 数据流与污点追踪的安全查询包,用于检测跨租户 IDOR、授权缺失和不安全反序列化等应用层漏洞。

Stars: 0 | Forks: 0

# kameQL **用于检测授权缺失、跨租户 IDOR 和不安全反序列化的 CodeQL 查询包** —— 这些是我在实际审计中发现并披露的同类漏洞,以标准的数据流/污点追踪查询的形式呈现,而非简单的 AST 模式匹配。 由 **Abdullah Kareem** ([@CyberKareem](https://github.com/CyberKareem)) 维护。这是我的 Semgrep 规则集 [`kameRules`](https://github.com/CyberKareem/kameRules) 的 CodeQL 对应版本。 ## 布局 CodeQL 数据库是单语言的,因此本仓库为每种语言提供了一个查询包: ``` kameQL/ ├── codeql-workspace.yml # ties the packs together for tooling ├── javascript/ # pack: cyberkareem/kameql-javascript │ ├── qlpack.yml │ ├── src/ │ │ ├── CrossTenantIdor.ql (+ .qhelp) │ │ └── MissingAuthorization.ql (+ .qhelp) │ └── test/ # codeql test run fixtures + .expected └── java/ # pack: cyberkareem/kameql-java ├── qlpack.yml ├── src/ │ ├── JacksonUnsafeDeserialization.ql (+ .qhelp) │ └── UnsafeNativeDeserialization.ql (+ .qhelp) └── test/ ``` ## 查询 → CWE → CVE 映射 | 查询 | 语言 | 技术 | CWE | 本可捕获的已披露 CVE | |-------|----------|-----------|-----|-------------------------------------| | [`CrossTenantIdor`](javascript/src/CrossTenantIdor.ql) | JS/TS | 污点追踪:请求 ID → 无租户防护的按 ID 数据库查找 | CWE-639, CWE-284 | **CVE-2026-59979** | | [`MissingAuthorization`](javascript/src/MissingAuthorization.ql) | JS/TS | 路由模型 + 启发式方法:已进行身份验证但未进行授权的状态变更路由 | CWE-862, CWE-285 | **CVE-2026-59979** | | [`JacksonUnsafeDeserialization`](java/src/JacksonUnsafeDeserialization.ql) | Java | 污点追踪:远程源 → 在具有默认类型的 mapper 上执行 Jackson `readValue` | CWE-502 | **CVE-2026-59889** | | [`UnsafeNativeDeserialization`](java/src/UnsafeNativeDeserialization.ql) | Java | 污点追踪:远程源 → `ObjectInputStream` | CWE-502 | — | ## 查询工作原理(不仅仅是 AST 匹配) - **`CrossTenantIdor`** — 一个 `TaintTracking::Global` 配置,其**源**是任何 `RemoteFlowSource`(请求参数/query/body),其 **sink** 是按 ID 查找(`findById`、`findByPk`、`findOne({_id})`、Prisma `findUnique`/`findFirst`)的标识符参数。该 sink 谓词排除了同时约束了 `organizationId` / `orgId` / `tenantId` / `teamId` / … 键的查找,因此租户范围内的查询不会被标记。 - **`MissingAuthorization`** — 对 Express 路由注册进行建模,通过本地数据流按名称解析每个 middleware 引用,并报告带有身份验证 middleware 但没有授权 middleware 的状态变更路由。这是一个特意设计为审查级别的启发式方法(已在其 `.qhelp` 中说明)。 - **`JacksonUnsafeDeserialization`** — 从 `RemoteFlowSource` 到 Jackson `readValue`/`readValues` 参数的污点追踪,前提是接收方 mapper 已对其调用了 `enableDefaultTyping()` / `activateDefaultTyping()`。 - **`UnsafeNativeDeserialization`** — 从 `RemoteFlowSource` 到 `java.io.ObjectInputStream` 构造的流参数的污点追踪。 ## 用法 ### 1. 安装 CodeQL CLI 下载 [CodeQL CLI](https://github.com/github/codeql-cli-binaries/releases) 并将其放在您的 `PATH` 中,然后解析包依赖项: ``` codeql pack install javascript codeql pack install java ``` ### 2. 为要扫描的项目构建数据库 ``` # JavaScript / TypeScript(无需构建) codeql database create /tmp/app-js-db --language=javascript --source-root=/path/to/project # Java(autobuild,或使用 --build-mode=none 进行仅源码提取) codeql database create /tmp/app-java-db --language=java --build-mode=none --source-root=/path/to/project ``` ### 3. 针对该数据库运行查询包 ``` # 运行 pack 中的每个 query codeql database analyze /tmp/app-js-db javascript/ --format=sarif-latest --output=js.sarif codeql database analyze /tmp/app-java-db java/ --format=sarif-latest --output=java.sarif # …或单个 query codeql query run javascript/src/CrossTenantIdor.ql -d /tmp/app-js-db ``` 将 SARIF 导入 GitHub code scanning,或使用任何 SARIF 查看器阅读它。 ## 测试 每个查询都有一个 `test/` 目录,其中包含一个易受攻击的**和**一个安全的代码片段,以及一个提交的 `.expected` 结果集,因此 `codeql test run` 会验证查询是否标记了易受攻击的代码行并保留了安全的代码行。CI ([`.github/workflows/ci.yml`](.github/workflows/ci.yml)) 会编译每个查询并运行完整的测试套件。 ``` codeql test run javascript/test --additional-packs "$HOME/.codeql/packages" codeql test run java/test --additional-packs "$HOME/.codeql/packages" ``` ## 许可证 [MIT](LICENSE) © 2026 Abdullah Kareem ([@CyberKareem](https://github.com/CyberKareem))。
标签:CMS安全, CodeQL, JavaScript, JS文件枚举, 图数据库, 安全评估工具, 数据可视化, 错误基检测, 防御机制, 静态代码分析