Ceph Dashboard 暴露面分析与认证边界验证

GobySec  5小时前

当「能看到 OSD 面板」并不等于「未授权访问成立」

漏洞类型未授权访问 / 管理界面暴露
综合评分CVSS 3.1 · 6.5(中危)
影响产品Ceph(ceph-mgr 的 Dashboard 模块)
披露时间2019-09-26
标准编号该问题未分配 CVE、CNVD、CNNVD 等标准编号
影响版本公开资料未给出明确的受影响版本区间,无法核实具体版本边界

摘要

Ceph Dashboard 是 Ceph 集群的 Web 管理界面,随 ceph-mgr 模块发布。官方文档明确说明它默认要求登录、默认启用 SSL/TLS、并默认开启账户锁定,因此「未授权访问」并不是一个开箱即用的默认缺陷,而是部署与暴露面问题。

这类报告最容易出错的环节是判据:Dashboard 是单页应用,其前端资源必须在登录前就可获取,否则登录页无法渲染;而这些资源中天然包含集群面板的标签与前端路由名。因此「首页返回 200 且包含 OSDs/rbd_mirroring」只能证明目标是一个 Ceph Dashboard 实例,不能证明未认证可以读到集群数据。本文把这条界线讲清楚,并给出真正能定性的验证步骤。

01 产品背景

Ceph 是统一的分布式存储系统,提供对象、块与文件三种存储接口。Ceph Dashboard 是其基于 Web 的管理与监控工具,作为 ceph-mgr 模块运行在当前的 active manager 上,用于查看集群健康度、OSD 与存储池状态、容量水位,并执行部分管理操作。

官方文档对其默认形态的描述相当具体,这些默认值直接决定了暴露面的性质:

  • 绑定端口:启用 SSL 时默认绑定 8443,关闭 SSL 时绑定 8080;未显式指定地址时,Web 应用会绑定到 ::,即所有可用的 IPv4 与 IPv6 地址。
  • 启用方式ceph mgr module enable dashboard
  • 认证:页面会要求输入预先定义的用户名与密码;需要先创建用户账户并关联至少一个角色,授权由 Dashboard 自身执行。
  • 传输加密:所有 HTTP 连接默认由 SSL/TLS 保护;SSL 可通过配置关闭,官方对此附有明确警告——关闭后用户名与密码将以明文发送。
  • 账户锁定:默认开启,用于防止暴力破解或字典攻击。

02 漏洞概述与影响评估

既然 Dashboard 默认要求认证,那么「未授权访问」在什么情况下才真正成立?实际会落到未认证可读的典型情形有三类,危害程度依次递进:

情形一:管理端口直接暴露

8443/8080 未做任何访问控制,任何人都能连上。此时仍需登录,因此本身不构成数据泄露,但它把登录入口开放给了全网:一方面便于凭据爆破与字典攻击(官方默认的账户锁定只能减缓,无法阻止分布式尝试),另一方面也便于攻击者收集版本指纹与响应特征。这一情形属于攻击面扩大,而非漏洞成立。

情形二:认证从未初始化

集群启用了 dashboard 模块,但没有创建任何用户账户。此时界面可达,但按官方描述,未登录能看到的通常只有登录页与前端静态资源,后端接口仍会拒绝请求。危害仍然有限。

情形三:后端接口未鉴权(真正的风险)

只有当 Dashboard 的后端 API 在未认证状态下返回集群数据时,「未授权访问」才真正成立,此时可读内容包括集群健康状态、OSD 与存储池拓扑、容量与水位、部分节点信息等。这些数据本身是运维信息,但聚合起来足以勾勒出存储集群的完整资产画像,为后续攻击提供目标选择依据。

核心区分点:前端资源可达(情形一、二)与后端数据可达(情形三)是两件事。单页应用的前端资源必须在登录前可获取,这是正常设计,不是缺陷。任何把「首页 200 且含前端标签」直接写成「未授权访问成立」的结论都是过度推断。

评分

按 CVSS 3.1 评估,综合评分 6.5(中危),向量 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N:攻击向量为网络可达、攻击复杂度低、无需目标用户交互、作用域不变;机密性影响按「未认证可读取集群状态与拓扑」计为高(C:H),完整性与可用性不受直接影响;利用依赖目标侧已存在的认证配置缺陷,故权限分量取低权限前提。

需要说明的是,该分值对应「情形三」成立时的上限。若经核实目标仅存在情形一或情形二(前端资源可达、后端仍鉴权),机密性影响应下调,综合评分也随之下降。

03 影响范围

公开资料未给出明确的受影响版本区间。该风险由部署方式决定,判断自身是否受影响的标准有两条:

  1. 8443/8080 是否对不可信网络可达;
  2. 未认证访问 Dashboard 的后端接口是否返回集群数据。

两条都成立才构成实质风险;只有第一条成立属于攻击面问题,需要收敛但不构成数据泄露。

04 成因分析

  • 默认绑定所有可用地址。 未指定地址时绑定到 ::,在容器化、云主机与多网卡场景下,很容易被一并暴露到公网接口上。
  • 关闭 SSL 的常见做法带来副作用。 为了避开自签名证书的浏览器告警,部署方常执行关闭 SSL 的配置,端口随之变为 8080,明文传输风险与暴露面同时上升。官方对此有明确警告。
  • 管理面与业务面共用网络。 Dashboard 与集群同网部署,安全边界模糊,一旦所在网段被突破,管理界面即随之暴露。
  • 单页应用的鉴权边界不一致。 前端资源必须预认证可达,若后端接口的鉴权中间件存在遗漏或路由前缀未被覆盖,就会出现「页面要登录、接口不校验」的错配。
  • 把「能打开页面」当成「已部署好」。 部署方确认界面可以访问即认为配置完成,未验证后端接口的未认证响应行为。

05 资产识别与面板指纹

探测请求包

GET / HTTP/1.1
Host: 192.0.2.20:8443
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xm l
Connection: close

(192.0.2.20 取自文档保留网段,为示意地址;8443 为启用 SSL 时的默认端口,关闭 SSL 时为 8080。请求不跟随重定向,只看第一跳响应。)

判定条件:最终响应状态码为 200,且响应体同时包含以下三个字符串——CephOSDs/rbd_mirroring。三个字符串逐字符核对如下,它们的语义都指向前端界面

特征串含义与所在位置
Ceph产品名,出现在页面标题、导航与前端资源包中
OSDs集群容量 / OSD 面板的界面标签
/rbd_mirroring前端路由与菜单项(RBD 镜像)

三者都是界面标识,因此该组合的准确定性是「资产指纹」——用于确认目标是一个 Ceph Dashboard 实例,不构成漏洞成立

资产检索语句

body="rbd_mirroring" && body="Ceph"

建议以响应体中的前端路由名为主特征,因为它不依赖部署侧的路径与头部改写。可再叠加端口条件(8443 或 8080)进一步收敛。

关于头部与 banner 类字段的提醒:有些检索语句习惯用 banner="ceph"header="ceph-mgr" 定位资产。需要指出的是:banner 字段对应的是协议层 banner,用来匹配 HTTP 服务并不可靠;header 匹配则强依赖目标原样返回特定响应头,一旦前面加了反向代理或做了头部改写就会漏掉。相比之下,响应体中的前端路由名更稳定。

06 认证边界验证方法

以下步骤均为只读,不触发任何管理动作(不创建用户、不修改配置、不下发集群操作)。

  1. 确认端口与协议。 8443 对应启用 SSL,8080 对应关闭 SSL;两者都可能存在,需分别探测。
  2. 未携带凭据请求首页。 记录状态码、响应体长度与是否出现登录表单元素。
  3. 区分登录页与已认证界面。 观察响应体里有没有集群的实际数据——OSD 数量、存储池列表、容量数字、健康状态文本——而不是只有导航标签与路由名。只有出现实际数据,才说明越过了认证边界。
  4. 验证后端接口边界(决定性一步)。 以未认证身份请求 Dashboard 的后端接口(形如 /api/...),观察是否返回未认证状态。预期行为是返回 401/403;若返回结构化数据,则情形三成立。
  5. 核对认证初始化状态。 在授权范围内查看是否已创建用户账户并关联角色。未创建账户与认证失效是两回事,需分别确认。
  6. 记录版本线索。 记录响应头与前端资源中的版本信息,用于评估已知问题的适用性。

误报风险

  • 前端资源在登录前可获取是单页应用的正常行为,命中三个特征串不代表未认证可读数据。
  • 若目标前置了反向代理并返回统一错误页,产品名类字符串可能被误命中。
  • 同一台主机上可能同时存在 Ceph 与其他组件的 Web 服务,端口混淆会造成张冠李戴。
  • 因此该判据应定位为「资产识别」;结论必须由第 3、4 步支撑。

07 修复建议

  1. 收敛网络暴露面。 不要把 8443/8080 暴露到不可信网络;确需远程访问时置于 VPN 或跳板机之后,并用安全组 / 网络策略限制来源网段。
  2. 显式指定监听地址。 通过配置项把 Dashboard 绑定到管理网卡的具体地址,避免默认绑定 :: 导致的多网卡暴露。
  3. 保持 SSL 启用。 如必须关闭,务必同时收紧来源地址,并明确知晓凭据将以明文传输的风险。
  4. 创建最小权限账户。 按职责分配角色,日常查看不要使用管理员账户。
  5. 保持账户锁定开启。 该机制默认开启,不要为了排查方便而关闭。
  6. 统一鉴权边界。 确保后端接口与页面走同一套鉴权中间件,避免出现「页面要登录、接口不校验」的错配;升级后重新验证接口的未认证响应行为。
  7. 纳入监控与审计。 对管理端口的访问做日志留存与异常来源告警。

08 参考资料

授权声明

本文用于授权范围内的安全评估与防御加固参考。文中所有主机地址均取自文档保留网段(192.0.2.0/24 等),为示意地址,不对应任何真实系统。请勿在未获得明确书面授权的情况下对任何系统执行本文所述的验证操作;未获授权的测试可能违反相关法律法规,风险由操作者自行承担。

最新评论

昵称
邮箱
提交评论