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安全, 安全规则引擎, 恶意代码分类, 授权测试, 无后门, 蓝队分析, 越权检测, 逆向工具