Ceph RGW SigV4 签名验证缺陷(CVE-2026-54330):预签名 PUT URL 的 x-amz-* 头注入与权限提升深度剖析

发布时间:2026/9/25 2:48:46
Ceph RGW SigV4 签名验证缺陷(CVE-2026-54330):预签名 PUT URL 的 x-amz-* 头注入与权限提升深度剖析 存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载本篇文章基于 Ceph 官方安全公告 doc/security/CVE-2026-54330.rst 编写系统讲解 Ceph RGW 的 AWS SigV4 签名验证缺陷持有预签名 PUT URL 的攻击者可以附加任意x-amz-*请求头从而获得超出签名者授权的权限。阅读本文后你将完整理解该漏洞的技术根因结合 RGW 源码验证逻辑、CVSS 影响面、受影响与修复版本、修复补丁的源码级实现以及涉及 multisite 部署时必须遵循的关键升级步骤与rgw_sigv4_insecure配置用法。漏洞概览CVE-2026-54330 是 Ceph RGWRADOS GatewaySigV4 处理器中一处**密码学签名验证不完善Improper Verification of Cryptographic Signature**缺陷任何持有**预签名 PUT URLpresigned PUT URL**的人都可以在请求中附加任意的x-amz-*请求头RGW 会实际应用这些附加头部从而使攻击者获得超出签名者URL 签发者本意的更多能力。官方公告明确指出该漏洞的补丁已包含在Tentacle 20.2.4与Squid 19.2.6及后续版本中。技术背景SigV4 对 x-amz-* 头的签名要求AWS Signature Version 4SigV4的规范对请求头签名有严格要求请求中出现的每一个x-amz-*头都必须被纳入签名AWS S3 会直接拒绝携带未签名x-amz-*头的请求。而修复前的 Ceph RGW 行为与 AWS 不一致RGW 只验证出现在X-Amz-SignedHeaders列表中的头部对列表中未出现的其余头部RGW 直接忽略不做签名校验。这直接导致未签名的x-amz-*头可以绕过签名检查。攻击者手中只要有一条预签名 PUT URL就能注入签名者从未授权过的头部将 URL 的权限放大对机密性与完整性造成高影响。这一背景在源码注释中亦有印证。在 src/rgw/rgw_auth_s3.cc 的修复代码中开发者引用了 AWS IAM 用户指南 Create a signed AWS API request 的规定host头必须始终签名请求中出现的任何x-amz-*头都必须签名content-type等标准头可以选择性签名AWS 文档自身对该点存在两处矛盾表述AWS 实际接受未签名的 content-type。漏洞根因RGW 仅校验 SignedHeaders 中列出的头部修复前的缺陷逻辑可以这样概括SigV4 校验器从X-Amz-SignedHeaders或查询参数X-Amz-SignedHeaders中取出已声明签名的头部集合然后只对这些头部做规范化canonicalization与签名比对请求中实际携带的其它头部尤其是x-amz-*系列不在该校验范围内因而可以任意篡改、追加而不破坏签名校验。从源码结构看签名头的解析入口分布在 src/rgw/rgw_auth_s3.cc 的三处parse_v4_query_string()约 L286-L326从查询字符串参数x-amz-signedheaders提取预签名 URL 场景parse_v4_auth_header()约 L396-L439从Authorization头的SignedHeaders字段提取后续统一交由get_v4_canonical_headers()L730 起按分号拆分的列表逐头处理。关键点在于旧逻辑只遍历 SignedHeaders 声明过的头请求环境中多余的头部从未被核查这正是 CVE-2026-54330 的根因所在。攻击场景与影响CVSS 分解官方公告给出的 CVSS 维度分解如下维度评级说明机密性Confidentiality高攻击者可通过注入x-amz-copy-source头并结合 public-read ACL读取签名者身份可访问的每一个对象完整性Integrity高攻击者可写入、并可篡改预签名 URL 目标对象的 ACL可用性Availability无不涉及访问复杂度Access Complexity高攻击者需要附加选定的、但属任意的 x-amz-* 头才能授予超出签名者本意的额外能力认证Authentication部分攻击者需要获得一条预签名 URL权限获取Gained Access是攻击者可将权限提升至签名账号被授权的范围超出最初校验器所允许的边界典型的攻击链为攻击者获得一条合法的预签名 PUT URL例如通过日志泄漏、中间人观察或社交工程等方式在向 RGW 发起请求时攻击者在 HTTP 请求头中附加x-amz-copy-source服务端拷贝源等任意x-amz-*头由于 RGW 只校验X-Amz-SignedHeaders中列出的头这些注入头不会被拒绝RGW 将注入头作为真实请求语义应用如触发跨对象拷贝、修改 ACL从而把一条仅可 PUT 指定对象的 URL 放大为可读任意对象、可改写目标对象 ACL的高权限凭据。受影响与修复版本受影响版本所有先前的 Ceph RGW SigV4 实现均存在签名验证不完善问题All prior versions。修复版本Tentacle 20.2.4及后续版本Squid 19.2.6及后续版本修复细节强制校验 host 与全部 x-amz-* 头根据官方公告的 Fix Details补丁后的 RGW 会检查任何未被纳入签名的新增x-amz-*头是否出现在 SigV4 请求中若存在此类未签名头则直接拒绝该请求。源码层面的修复位于 src/rgw/rgw_auth_s3.cc 的get_v4_canonical_headers()中核心逻辑在rgw_sigv4_insecure配置项为false默认值时生效强制host必须签名若规范化结果中不包含host直接返回失败并记录日志Signature rejected: CanonicalHeaders must contain host.L788-L792。枚举请求中所有HTTP_X_AMZ_开头的环境变量通过info.env-get_map()与lower_bound(HTTP_X_AMZ_)遍历请求携带的全部x-amz-*头L815-L837。单一例外x-amz-content-sha256被放行continue因为它已作为 HashedPayload 的一部分被签名L826-L831。源码注释也提示该例外未来可进一步限定为CredentialScope:service s3的场景。逐一比对任何出现在请求中、却不在 CanonicalHeaders 集合里的x-amz-*头x-amz-content-sha256除外都会触发拒绝日志为Signature rejected: header supplied, but not in CanonicalHeaders.L832-L836。值得注意的是修复刻意未强制content-type必须签名。源码注释L793-L813解释了两点原因AWS 文档自相矛盾而真实 S3 接受 content-type 未签名的请求minio-go 的流式签名器ignoredStreamingHeaders会在每次 PutObject 时丢弃 content-type若强制要求会导致 Mimir、Loki、Thanos 等依赖 thanos-io/objstore 生态的客户端大量损坏。由于 CVE-2026-54330 的权限提升源自未签名的x-amz-*头该部分仍被严格拒绝因此保留 content-type 例外不会重新打开漏洞。关键升级步骤multisite 部署与 rgw_sigv4_insecure补丁上线后产生了一个重要的兼容性副作用官方公告 Critical Upgrade StepsRGW 将拒绝host和x-amz-*头未包含在已签名子集中的 SigV4 请求。然而multisite多站点同步所使用的REST 客户端此前正是会生成这类签名不完整的请求见 src/rgw/rgw_rest_client.ccx_meta_map中的x-amz-*元数据头会被转换为HTTP_X_AMZ_*环境变量并参与签名但host等头的处理路径存在兼容性差异。因此升级时必须遵循以下顺序升级开始前若你正在运行 multisite必须先将配置项rgw_sigv4_insecure设置为true升级所有集群在所有集群都完成升级后恢复安全默认将该选项重新设置为false。该配置项在 src/common/options/rgw.yaml.in 中有完整定义类型bool级别advanced默认值false适用服务rgw标志runtime运行时即可生效无需重启支持旧式配置名with_legacy: true因此也可以沿用旧式rgw_sigv4_insecure true写法描述允许在 SigV4 上附加未签名的x-amz-头从而可能造成权限提升long_desc 明确提示multisite 场景下需在所有集群升级完成前保持开启之后务必关闭。配置示例升级窗口期使用multisite 全集群[client.rgw.hostname] rgw_sigv4_insecure true所有集群升级完成后务必改回[client.rgw.hostname] rgw_sigv4_insecure false由于该选项带runtime标志可通过ceph config set client.rgw.hostname rgw_sigv4_insecure false方式在线调整并即时生效。官方建议公告给出的最终建议非常明确所有使用预签名 URL 功能的 Ceph 用户应尽早升级到已修复版本在未应用补丁的情况下官方不建议在任何场景下继续使用该功能。这意味着在补丁就绪前最稳妥的缓解手段是停用预签名 URL 功能补丁应用后再结合rgw_sigv4_insecure的窗口期配置完成 multisite 平滑升级。回归测试与安全基线保障仓库中专门新增了针对本漏洞修复的测试文件 src/test/rgw/test_rgw_auth_sigv4.cc其中测试用例明确标注了两类性质[REGRESSION]回归测试缺少未签名 content-type 合法修复时会失败应用修复后通过——用于防止修复过度误伤合法客户端后再次出现兼容性回归例如UnsignedContentTypeIsAccepted、SignedContentTypeIsCanonicalized、MinioGoStreamingTrailerPutObjectIsAccepted覆盖 minio-go 流式带 trailer 的 PutObject 请求形态[INVARIANT]不变式守卫无论修复前后都通过仅用于防止未来重构悄悄重新打开 CVE-2026-54330例如FullySignedRequestIsAccepted完整签名请求被接受以及InsecureOptionRestoresOldBehaviour验证rgw_sigv4_insecuretrue恢复修复前行为multisite 升级依赖此行为L245-L252。测试通过get_v4_canonical_headers()直接驱动核心校验函数L74-L100覆盖了普通请求与预签名请求SignedHeaders 仅含host、X-Amz-*参数全部位于查询串两种形态其中就包括攻击场景向预签名请求注入HTTP_X_AMZ_ACL: public-read等未签名头时校验失败EXPECT_FALSE(canonicalize(...))。安全加固清单针对本漏洞及同类风险可采取如下加固措施立即升级将 RGW 升级到 Tentacle 20.2.4 或 Squid 19.2.6并确认rgw_sigv4_insecure处于false默认值安全状态。multisite 升级窗口期管理严格按照升级前开启 → 全部集群升级完成 → 关闭的顺序操作避免跨版本窗口内同步请求被误拒或长期暴露在非安全配置下。预签名 URL 治理缩短预签名 URL 有效期、限制签发账号的权限范围、通过日志审计预签名 URL 的签发与使用降低 URL 泄漏后的影响半径。监控拒绝日志关注 RGW 日志中Signature rejected类别的记录dout(5)级别此类日志可能代表攻击尝试或客户端签名不规范的请求。参考与延伸阅读官方安全公告原文doc/security/CVE-2026-54330.rst修复核心实现src/rgw/rgw_auth_s3.ccget_v4_canonical_headers()配置项定义src/common/options/rgw.yaml.inrgw_sigv4_insecure回归测试src/test/rgw/test_rgw_auth_sigv4.ccmultisite REST 客户端签名路径src/rgw/rgw_rest_client.cc安全公告索引doc/security/index.rst致谢该漏洞由 CLYSO 的 David Mohren 与 Mark Nelson 报告。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Ceph RGW STS 会话令牌 CBC 位翻转提权漏洞CVE-2026-39944深度剖析与升级指引Ceph RGW STS 会话令牌 CBC 位翻转提权漏洞CVE 2026 39944深度剖析与升级指引 CVE 2026 39944 是 Ceph 对象网存储分布式文件系统对象存储后端高可用Ceph RGW CVE-2021-3524 漏洞深度解析CORS ExposeHeader 引发的 HTTP 响应头注入与修复验证Ceph RGW CVE 2021 3524 漏洞深度解析CORS ExposeHeader 引发的 HTTP 响应头注入与修复验证 导读 CVE 2021存储分布式文件系统对象存储后端高可用N_m3u8DL-RE 源码编译3 条命令拿到任意平台的可执行文件N_m3u8DL RE 源码编译3 条命令拿到任意平台的可执行文件 N_m3u8DL RE 源码编译就是为这个场景准备的官方 Release 版本落后于代码CLI音视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考