doyensec/maSSO

GitHub: doyensec/maSSO

一个武器化的 SSO 身份提供者,支持 OIDC、SAML 2.0 和 SCIM 协议,可通过拦截和篡改重签令牌/断言来深度测试服务提供者的认证安全性。

Stars: 2 | Forks: 0

maSSO
# maSSO - 恶意 Auth SSO 实用程序 [![Doyensec 研究岛屿](https://img.shields.io/static/v1?logo=data:image/png;base64,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&link=https://doyensec.com/research.html&message=Research%20Island&&label=Doyensec&color=purple)](https://doyensec.com/research.html) ![GitHub](https://img.shields.io/github/license/doyensec/maSSO?logo=github&color=darkgreen) 一个武器化的单点登录 (SSO) 身份提供者 (IdP),用于 OIDC 和 SAML 2.0 服务提供者的安全测试,同时支持 SCIM 协议。
maSSO architecture: IdP on :8081 (SAML/OIDC proxy and signer), dashboard on :8082 (before-sign intercept, mock, settings, SCIM client), SQLite, and example masso oidc CLI with --redirect-uri and --cloudflared
为什么选择 maSSO? - 作为目标 SP 信任的**完全符合规范的 OIDC IdP** 和 **SAML 2.0 IdP** 运行 - 包含可选的 **SCIM 客户端** 用于测试,同时支持从目标服务提供者拉取用户 - 允许通过本地仪表盘独立将每个端点设置为**透传**、**模拟**、**拦截** 或 **签名前拦截** 模式 - **OIDC 和 SAML 签名拦截**:对于 OIDC,捕获上游发出的 `id_token`,编辑 JSON,并使用 maSSO 的 RSA 密钥重新签名。对于 SAML,捕获未签名的断言 XML,在结构化表单和原始 XML 面板中编辑它,然后对编辑后的版本进行签名 - 支持 **Cloudflare Quick Tunnels** (`--cloudflared`) 实现零配置的公共网络暴露 基于 [`zitadel/oidc`](https://github.com/zitadel/oidc) (OIDC IdP) 和 [`mcguinness/node-samlp`](https://github.com/mcguinness/saml-idp) (SAML IdP) 构建。 ## 安装说明 ### 使用 Docker(推荐大多数用户使用) 不需要本地的 Go 或 Node.js。使用带有 **oidc** 或 **saml** 配置文件的 Docker Compose,并映射 IdP 和(仅限 localhost 的)仪表盘端口。容器内的 **Cloudflare Quick Tunnel** 是**可选的**(`MASSO_CLOUDFLARED=1`),类似于在本地的 `./masso --cloudflared`。所有命令、环境变量表、卷布局以及 entrypoint 如何传递标志都在 **[USE_AS_DOCKER.md](USE_AS_DOCKER.md)** 中。 ### 手动构建 **前置条件** | 需求 | 说明 | |-------------|--------| | **Go** | 1.25 或更高版本 | | **Node.js** | 18+(仅限 SAML 模式;`saml-engine` 依赖项) | | **cloudflared** | 本地 `go build` / `./masso --cloudflared` 的可选项 - 从 [Cloudflare](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/) 安装。容器内的 `cloudflared`,请参阅 [USE_AS_DOCKER.md](USE_AS_DOCKER.md)。 | 需要时安装 **cloudflared**: - **文档(所有平台):** [安装 cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/)(选择您的操作系统;包含 Linux `.deb` / `.rpm` 和直接的二进制文件)。 - **macOS (Homebrew):** `brew install cloudflared` - **验证:** `cloudflared --version` 然后运行 maSSO,例如 `./masso oidc --cloudflared`(有关 Quick Tunnel 和手动 issuer,请参阅 [ADVANCED_USAGE.md 中的隧道功能](ADVANCED_USAGE.md#tunneling))。 ``` git clone https://github.com/doyensec/maSSO cd masso go build -o masso . cd saml-engine && npm install && cd .. ``` ## 使用方法 ``` ./masso [flags] ``` IdP 和仪表盘在**独立的端口**上运行。只有 IdP 端口 (`--port`) 应该暴露在互联网上。仪表盘 (`--dash-port`) 必须保持本地访问。 ### 快速示例 ``` # OIDC - 指向真实 SP callback ./masso oidc --redirect-uri https://app.example.com/auth/callback # SAML - 针对真实 SP 运行 ./masso saml --acs https://app.example.com/saml/acs --audience https://app.example.com # 带有 Cloudflare tunnel 的 OIDC(自动检测 public URL) ./masso oidc --cloudflared # 带有 Cloudflare tunnel 的 SAML ./masso saml --cloudflared --acs https://sp.com/acs --audience https://sp.com # 带有手动管理 tunnel 的 OIDC ./masso oidc --issuer https://my-tunnel.example.com/ ``` ### 选项标志 #### OIDC 模式 ``` ./masso oidc [flags] ``` | 标志 | 默认值 | 描述 | |---|---|---| | `--port` | `8081` | IdP 监听端口(通过隧道暴露) | | `--dash-port` | `8082` | 仪表盘端口(保持本地) | | `--issuer` | `http://localhost:/` | 公共 issuer URL - 远程 SP 必需 | | `--client-id` | `web` | OIDC Client ID | | `--client-secret` | `secret` | OIDC Client Secret | | `--redirect-uri` | `http://localhost:9999/callback` | SP 回调 URL - 支持精确、glob 匹配或 `re:` 正则表达式(见下文) | | `--any-redirect` | `false` | 允许任何回调 URL (`*`),而无需在 shell 中转义 `*` | | `--db` | `data.db` | SQLite 数据库路径 | | `--cloudflared` | `false` | 通过 Cloudflare 自动隧道并使用其 URL 作为 issuer | **配置您的 SP:** | 字段 | 值 | |---|---| | Discovery URL | `.well-known/openid-configuration` | | Client ID | `web`(或 `--client-id`) | | Client Secret | `secret`(或 `--client-secret`) | | Scopes | `openid profile email` | | Grant Type | `authorization_code` | | Token Auth Method | `client_secret_basic` | ##### 重定向 URI 匹配 | 语法 | 模式 | 示例 | |---|---|---| | 纯字符串 | 精确匹配 | `https://app.example.com/callback` | | 包含 `*` 或 `?` | Glob 匹配 ([doublestar](https://github.com/bmatcuk/doublestar)) | `https://app.example.com/*` | | `re:` 前缀 | Go 正则表达式 | `re:https://app\.example\.com/(callback\|auth/cb)` | **持久化的客户端配置:** `--client-id`、`--client-secret`、`--redirect-uri` 和 `--any-redirect` 在每次运行时都会写回 SQLite,因此隧道运行和后续运行可以保持一致,无需删除 `data.db`。 #### SAML 模式 ``` ./masso saml [flags] ``` | 标志 | 默认值 | 描述 | |---|---|---| | `--port` | `8081` | IdP 监听端口(通过隧道暴露) | | `--dash-port` | `8082` | 仪表盘端口(保持本地) | | `--issuer` | `http://localhost:/` | 公共 issuer URL | | `--acs` | _(空)_ | SP ACS URL - 如果省略,则从 AuthnRequest 动态获取 | | `--audience` | _(空)_ | SP Entity ID / Audience | | `--node-port` | `7070` | Node.js SAML 引擎的内部端口 | | `--db` | `data.db` | SQLite 数据库路径 | | `--cloudflared` | `false` | 通过 Cloudflare 自动隧道并使用其 URL 作为 issuer | **配置您的 SP:** | 字段 | 值 | |---|---| | IdP Metadata URL | `metadata` | | IdP SSO URL | `saml/sso` | | IdP Entity ID | `` | | IdP Certificate | `saml-engine/idp-public-cert.pem` | | NameID Format | `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` | | Binding | `urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST` | #### SCIM 客户端 maSSO 作为 SCIM 客户端向目标 SP 推送用户或从中拉取用户。 ``` ./masso [oidc|saml] --scim-url https://sp.example.com/scim/v2 [flags] ``` | 标志 | 默认值 | 描述 | |---|---|---| | `--scim-url` | _(空)_ | 目标 SP SCIM 基础 URL(在仪表盘中启用 SCIM 标签页) | | `--scim-token` | _(空)_ | API token | | `--scim-token-type` | `Bearer` | 认证方案:`Bearer`、`Basic` 或自定义标头名称 | | `--scim-tls-skip-verify` | `false` | 跳过 SCIM 请求的 TLS 验证 | #### 高级使用文档 **[ADVANCED_USAGE.md](ADVANCED_USAGE.md)** - 关于隧道/issuer、拦截模式和端点表的更多细节。 **[USE_AS_DOCKER.md](USE_AS_DOCKER.md)** - Docker 和 Docker Compose(配置文件、端口、环境变量、容器内的 Quick Tunnel)。 ## :handshake: 贡献指南 maSSO 的繁荣离不开社区的贡献。无论您是开发人员、研究人员还是漏洞猎人,您的反馈和 Pull Request 都有助于为每个人改进该项目。请使用 [GitHub issue 跟踪器](https://github.com/doyensec/maSSO/issues) 进行报告和讨论。 本项目由 [Doyensec](https://doyensec.com/research.html) 支持开发。 ![Doyensec 研究](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/efc6351bee024319.svg)
标签:Doyensec, EVTX分析, IdP, MITM代理, OIDC, OpenID Connect, SAML 2.0, SCIM协议, SSO, 单点登录, 安全测试, 恶意IdP, 攻击性安全, 数据展示, 日志审计, 武器化, 红队, 认证绕过, 请求拦截, 身份安全, 身份提供商, 身份联邦