CyberKareem/kameBreak

GitHub: CyberKareem/kameBreak

一款用于检测多租户应用中水平越权(IDOR)与垂直越权等访问控制失效问题的授权测试工具。

Stars: 0 | Forks: 0

# kameBreak kameBreak 是一个多租户的**授权测试工具集**。你只需定义一组身份(auth header + 租户 + 权限级别)以及一组路由,kameBreak 就会构建一个测试矩阵:它会以每个身份重放每条路由,并寻找两类访问控制失效问题: - **水平 / 跨租户 (IDOR / BOLA)** — 来自*不同租户*的非所有者身份,对其不拥有的资源收到了类似成功的响应。判定标准是相似的状态码 + 高响应体相似度(`difflib.SequenceMatcher`)和/或响应中回显了属于其他租户的资源 ID。 - **垂直 / 权限提升** — `privilege_level` *低于*路由声明的 `min_privilege` 的身份,依然收到了类似成功的响应。 测试结果是供人工验证的**疑似**授权漏洞 —— 而非自动确认的漏洞。 ## 安装 ``` # 从 repo root python -m pip install -e . # runtime (requests, PyYAML) + `kamebreak` command python -m pip install -e ".[dev]" # also install test deps (pytest, Flask) # 或不安装 package: python -m pip install -r requirements-dev.txt ``` 要求 Python 3.9+ 版本。 ## 用法 ``` kamebreak run --config config.yaml --authorized --scope scope.txt \ [--ack ""] [--json findings.json] [--html report.html] \ [--similarity 0.9] [--success-statuses 200,201,204] [--timeout 15] ``` `--help` 输出和启动横幅都会重复显示授权使用通知。 | 标志 | 用途 | |------|---------| | `--config` | YAML 配置文件的路径(必填)。 | | `--authorized` | **必填**。声明你已获得测试目标的授权。 | | `--scope` | 范围允许列表文件(每行一个主机)。`base_url` 的主机必须包含在此列表中。 | | `--ack ""` | 明确的确认信息,当主机不在范围文件中时使用。必须与确切的必填短语一致(显示在 `--help` 中)。 | | `--json PATH` | 输出结构化的 JSON 结果。 | | `--html PATH` | 输出独立的 HTML 报告(内联 CSS,无外部资源)。 | | `--similarity` | 用于水平检测的响应体相似度阈值(默认为 `0.9`)。 | | `--success-statuses` | 逗号分隔的成功状态码(默认为 `200,201,204`)。 | | `--timeout` | 每个请求的超时时间,以秒为单位(默认为 `15`)。 | 退出代码:`0` 正常,`2` 配置/引擎错误,`3` 安全拦截。 ### 示例 ``` kamebreak run \ --config examples/config.example.yaml \ --authorized \ --scope examples/scope.example.txt \ --json out/findings.json \ --html out/report.html ``` ## 安全机制 除非你传递了 `--authorized` 参数 **并且** 满足以下条件之一,否则运行将被**拒绝**: 1. 配置中的 `base_url` 主机已列在 `--scope` 允许列表文件中,**或者** 2. 你传递了带有确切必填确认短语的 `--ack ""`(显示在 `--help` 中)—— 这是针对未通过范围文件管理的主机的应急通道。 拒绝时会打印一条明确的提示信息并以非零状态码退出。这是一种防护机制,而不是许可:请仅将 kameBreak 指向你已获授权进行测试的系统。 ## 配置参考 ``` base_url: "https://widgets.example.test" # placeholder — change to your authorized target identities: - label: alpha_admin # unique label auth: # a mapping of header name -> value Authorization: "Bearer " org_id: org_alpha # tenant_id or org_id (either key accepted) privilege_level: admin # integer, or one of: low | standard | admin routes: - method: GET path: "/api/orgs/{org_id}/widgets/{widget_id}" # template with {vars} params: # shared scalar OR per-identity mapping org_id: org_alpha widget_id: wdg_alpha_1001 owner_identity: alpha_admin # identity that legitimately owns the resource min_privilege: admin # optional; the privilege the route should require ``` - **`params`** 的值可以是**共享标量**(用于所有身份),或者是**按身份映射**(`{ : }`,带有可选的 `*` / `default` 后备键)。**所有者**的参数会用于渲染探测目标 URL;随后引擎会以其他所有身份重放该 URL。 - **`privilege_level`** 和 **`min_privilege`** 接受整数或以下值之一:`low` (1)、`standard` (2)、`admin` (3)。 - **`owner_identity`** 必须与某个身份的 `label` 匹配。 ### 编程式调用 ``` from kamebreak.config import load_config from kamebreak.engine import MatrixEngine from kamebreak.safety import check_authorization config = load_config("config.yaml") check_authorization(config.base_url, authorized=True, scope_path="scope.txt") findings = MatrixEngine(config, similarity_ratio=0.9).run() ``` ## CVE-2026-59979 式的同级路由模式(通用) kameBreak 的水平检测器是围绕一种常见的跨租户授权失效模式构建的(此处以**通用**方式进行描述,不涉及任何真实产品): 在 [`examples/config.example.yaml`](examples/config.example.yaml) 中,这种模式通过 `/api/orgs/{org_id}/...` 下的两个同级路由进行建模: - 一个**受保护**的 `.../reports/{report_id}` 路由(作为对照组 —— 预期会拒绝来自不同租户的调用者,因此**不会**被标记),以及 - 一个**仅需身份验证**的 `.../widgets/{widget_id}` 同级路由(存在漏洞的形态 —— 不同租户的身份获得了类似成功的响应体,因此 kameBreak **会标记**它)。 垂直示例(带有 `min_privilege: admin` 的 `.../settings`)涵盖了权限提升类别:即路由验证了调用者的身份并限制了租户范围,却忘记强制执行所需的权限级别。 ## 测试 ``` pytest ``` 测试套件会在 `127.0.0.1` 上启动一个本地 Flask 模拟服务器(使用临时端口,处于离线状态),该服务器故意暴露了一个水平漏洞、一个垂直漏洞以及一个受正确保护的同级路由。它会断言引擎能标记出存在漏洞的路由,同时**不会**标记受保护的路由,并且安全机制会在缺少 `--authorized` 的情况下拒绝执行。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。版权所有 (c) 2026 Abdullah Kareem (CyberKareem), [github.com/CyberKareem](https://github.com/CyberKareem)。
标签:IDOR, Python, Web安全, 安全规则引擎, 恶意代码分类, 授权测试, 无后门, 蓝队分析, 越权检测, 逆向工具