widhiputri/api-security-probe

GitHub: widhiputri/api-security-probe

一个轻量级的自动化 API 安全探测工具,通过简单的 YAML 配置即可快速检查 REST API 的认证弱点、越权漏洞和基础设施安全配置。

Stars: 0 | Forks: 0

# api-security-probe 轻量级 API 安全探测器,几秒钟即可运行。无需 ZAP,无需浏览器,无需繁琐的设置。将其指向任何 REST API,它将检查常见的身份验证和基础设施弱点。 ## 检查内容 | 检查项 | 功能描述 | |---|---| | **Auth Rate Limit** | 快速发起 20 次错误登录尝试,期望返回 429 响应 | | **API Rate Limit** | 对每个配置的 endpoint 快速发起 10 次请求,期望返回 429 响应 | | **JWT: Tampered signature** | 破坏 token 签名,期望返回 401 | | **JWT: Expired token** | 发送已知过期的 token,期望返回 401 | | **JWT: Token after logout** | 登出后重新使用旧 token,期望返回 401 | | **JWT: Algorithm none attack** | 剥离签名并设置 `alg: none`,期望返回 401 | | **JWT: RS256 to HS256 confusion** | 使用服务器的公钥作为 HMAC 密钥来签名 token,期望返回 401 | | **BOLA (cross-role)** | 对仅限管理员的 endpoint 使用普通用户 token,期望返回 401/403 | | **IDOR (cross-user)** | 将 user2 的 token 用于 user 的资源 ID,期望返回 401/403/404 | | **Security Headers** | 检查 HSTS、X-Content-Type-Options、X-Frame-Options、CSP、Referrer-Policy | | **TLS Certificate** | 如果证书在 30 天内过期,则发出警告 | | **Open Ports** | 扫描意外开放的端口(数据库、SSH、调试端口) | ## 安装 ``` npm install -g api-security-probe ``` 或者作为项目的开发依赖安装: ``` npm install --save-dev api-security-probe ``` ## 快速开始 **步骤 1:** 创建配置文件(从 `sample/probe.config.yml` 复制): ``` target: https://api.example.com auth: type: oauth2-password url: https://auth.example.com/realms/myrealm/protocol/openid-connect/token client_id: myclient client_secret: ${AUTH_CLIENT_SECRET} roles: admin: username: ${ADMIN_USERNAME} password: ${ADMIN_PASSWORD} user: username: ${USER_USERNAME} password: ${USER_PASSWORD} session: probe_endpoint: /accounts bola: admin_endpoints: - GET /admin/users ``` **步骤 2:** 将凭据设置为环境变量: ``` export AUTH_CLIENT_SECRET=... export ADMIN_USERNAME=... export ADMIN_PASSWORD=... export USER_USERNAME=... export USER_PASSWORD=... ``` **步骤 3:** 运行: ``` api-security-probe --config probe.config.yml ``` ## CLI 选项 ``` api-security-probe --config [options] Options: --config, -c Path to probe config file (YAML or JSON) --tests Comma-separated tests to run (default: all) rate-limit, api-rate-limit, session, bola, idor, headers, tls, ports --output Write results to a JSON file --help, -h Show this help ``` ## 配置参考 ### `target` 被测 API 的 Base URL。 ### `auth` | 字段 | 必填 | 描述 | |---|---|---| | `type` | 是 | 认证类型。目前支持 `oauth2-password` | | `url` | 是 | Token endpoint URL | | `client_id` | 是 | OAuth2 client ID | | `client_secret` | 否 | OAuth2 client secret(公共客户端请省略) | | `logout_url` | 否 | 登出 endpoint。token-after-logout 检查必需 | | `jwks_url` | 否 | JWKS endpoint。RS256-to-HS256 检查必需 | ### `roles` | 角色 | 使用场景 | |---|---| | `admin` | Session 检查、BOLA、API 速率限制、Security Headers | | `user` | BOLA 检查(应被阻止访问 admin endpoint) | | `user2` | IDOR 检查(不应访问 `user` 的资源) | 每个角色接受 `username` 和 `password` 参数。未用于所选测试的角色将不进行身份验证。 ### `tests` 要运行的测试列表。如果省略,则运行所有测试。也可以通过 CLI 上的 `--tests` 选项进行覆盖。 ### `session` | 字段 | 描述 | |---|---| | `probe_endpoint` | 一个已通过身份验证的 endpoint,用作所有 JWT 攻击检查的目标 | ### `bola` | 字段 | 描述 | |---|---| | `admin_endpoints` | 仅限管理员的 endpoint 列表。格式:`METHOD /path` 或仅 `/path`(默认为 GET) | ### `idor` | 字段 | 描述 | |---|---| | `endpoints` | 带有路径参数的 endpoint 列表。格式:`METHOD /path/{paramName}` | | `example_ids` | 参数名称到 `user` 的资源 ID 的映射 | ### `rate_limit` | 字段 | 描述 | |---|---| | `api_endpoints` | 用于探测速率限制的 endpoint。格式:`METHOD /path` 或仅 `/path` | ### `headers` | 字段 | 描述 | |---|---| | `probe_endpoint` | 用于探测安全头的 endpoint。如果未设置,则回退到 `session.probe_endpoint` | ### `ports` | 字段 | 描述 | |---|---| | `check` | 要扫描的端口列表。默认为 `[22, 23, 3306, 5432, 6379, 27017, 8080, 8443, 9200]` | ## 环境变量 配置值支持 `${VARIABLE_NAME}` 语法,并在运行时从环境变量中解析。这可以使凭据不必存放在配置文件中。 ``` client_secret: ${AUTH_CLIENT_SECRET} ``` 如果引用的变量未设置,工具将在运行任何检查之前报错退出。 ## CI 集成 ``` # GitHub Actions 示例 - name: Run API security probe env: AUTH_CLIENT_SECRET: ${{ secrets.AUTH_CLIENT_SECRET }} ADMIN_USERNAME: ${{ secrets.ADMIN_USERNAME }} ADMIN_PASSWORD: ${{ secrets.ADMIN_PASSWORD }} USER_USERNAME: ${{ secrets.USER_USERNAME }} USER_PASSWORD: ${{ secrets.USER_PASSWORD }} run: npx api-security-probe --config probe.config.yml --output results.json ``` 如果任何检查失败,该过程将以代码 `1` 退出,使其适合作为 CI 门禁。 ## 输出 终端输出是带颜色且分组的: - **FAILED** 部分在前:每一项失败的检查,包含逐项的详细说明及其失败原因 - **PASSED** 部分:通过检查的项目,带有子项计数 - **SKIPPED** 部分:跳过的检查(例如 HTTP 目标上的 TLS 检查) - **Summary 表格**:每次检查的 PASS / FAIL / SKIP 计数及总计 - 每次运行均会显示开始时间、结束时间、总耗时以及最终判定 时间戳使用 UTC,显示格式为 `09 May 2026 07:27:52 +00:00`。 传入 `--output results.json` 参数可同时输出机器可读的 JSON 文件: ``` { "target": "https://api.example.com", "started_at": "2026-05-09T07:27:52.000Z", "finished_at": "2026-05-09T07:27:53.000Z", "duration_ms": 1045, "verdict": "FAILED", "summary": { "passed": 10, "failed": 5, "skipped": 1, "total": 8 }, "checks": [...] } ``` ## 许可证 MIT
标签:API安全, BOLA检测, CISA项目, DevSecOps, IDOR检测, JSON输出, JWT安全, MITM代理, Node.js安全工具, REST API安全, TLS证书检查, Web安全扫描器, 上游代理, 安全响应头检查, 安全测试, 开源安全工具, 插件系统, 攻击性安全, 数据统计, 文档结构分析, 暗色界面, 端口扫描, 自动化安全扫描, 自定义脚本, 访问控制测试, 身份验证漏洞测试, 轻量级安全工具, 逆向工程平台, 速率限制测试