天下漏洞,尽知其名
HIGH 重点关注

CVE-2026-87004 Tugtainer OIDC 令牌验证绕过漏洞

影响攻击者可伪造身份绕过登录认证,冒充任意用户访问系统

AI 研判

Tugtainer 是一款用于自动化更新 Docker 容器的自托管应用。在 1.31.3 版本之前,其 OIDC 登录流程在解析身份提供方返回的 id_token 时使用了不校验签名的方法,导致令牌验证被完全绕过。该漏洞已在 1.31.3 版本中修复。

影响范围

Tugtainer

Tugtainer 1.31.3 之前的版本受影响,具体受影响版本范围以官方公告为准。

漏洞详情

漏洞属于身份认证绕过类型。后端在处理 OIDC 登录回调时,调用 jose 库的 get_unverified_claims() 而非 decode(),跳过了签名、受众(aud)、签发者(iss)和过期时间(exp)的全部校验。攻击者可构造任意 id_token,将 email/sub/preferred_username 声明伪造成目标用户,从而以该身份建立 Tugtainer 会话。

利用条件与风险

利用前提是目标实例启用了 OIDC 登录且攻击者可访问其登录回调接口。实战中可导致未授权访问、身份冒充及后续对 Docker 容器更新功能的滥用。

修复建议

官方已在 1.31.3 版本修复,建议升级至该版本或更高。临时缓解措施包括限制 OIDC 登录端点的网络访问,或暂时停用 OIDC 登录方式。

原始情报

Tugtainer is a self-hosted app for automating updates of Docker containers. Prior to version 1.31.3, when the OIDC login flow completes, backend/modules/auth/providers/auth_oidc_provider.py decodes the id_token returned by the identity provider’s token endpoint using jose.jwt.get_unverified_claims() instead of jwt.decode(). This skips signature verification, audience (aud) validation, issuer (iss) validation, and expiry (exp) checking entirely. The extracted claims (email/sub/preferred_username) are then used directly as the user_id for the resulting Tugtainer session. This issue has been patched in version 1.31.3.