非管理员也能看到紧急登录用户

答案内容由AI生成,仅供参考:

非管理员用户可通过Redfish查询紧急登录用户问题分析

问题描述

在当前BMC系统中,非管理员用户能够通过Redfish接口查询到紧急登录用户信息,该行为不符合预期的安全策略。根据安全设计原则,紧急登录用户作为系统级特权账户,其配置信息应当仅限于高权限用户(如管理员)访问,普通用户或低权限用户不应具备查看权限。


环境信息

  • BMC版本:25.09.03.01
  • BIOS版本:21.24
  • CPLD版本
    • 扩展板_BC02IOEA_CPLD V0.10
    • 主板_BC83AMDA-BC83AMDB_CPLD V6.12
    • 风扇板_BC83FDCA_CPLD V0.05
    • 直通板_BC02STMA_CPLD 0.01
    • 12硬盘背板_BC01NHBB_CPLD 5.03

重现步骤

  1. 管理员用户通过Redfish登录BMC;
  2. 管理员配置某一管理员账户为“紧急登录用户”;
  3. 非管理员用户通过Redfish接口登录系统;
  4. 非管理员用户发起请求查询系统账户服务信息(/redfish/v1/AccountService);
  5. 响应中包含 Oem/openBMC/EmergencyLoginUser 字段,值为 "Administrator"

期望结果

  1. 管理员可成功设置紧急登录用户;
  2. 非管理员用户登录成功;
  3. 非管理员用户无法获取紧急登录用户信息(应被权限控制屏蔽)

实际结果

非管理员用户通过以下Redfish接口可以成功获取EmergencyLoginUser字段信息:

GET /redfish/v1/AccountService

响应体中包含:

"Oem": {
  "openBMC": {
    ...
    "EmergencyLoginUser": "Administrator"
  }
}

表明:非管理员具备对该敏感字段的读取权限,存在潜在安全风险


安全背景与设计原则

紧急登录用户定义

  • 角色要求:必须为管理员用户;
  • 用途:在系统异常、密码过期或访问受限等紧急情况下,用于突破常规登录限制;
  • 权限豁免:不受以下策略限制:
    • 密码有效期
    • 登录接口限制(如SSH/Redfish禁用)
    • 登录时间/IP规则

来源:Document Chunk #5 —— “紧急登录用户:必须为管理员用户……用于紧急情况下登录BMC”

权限控制模型(Account权限机制)

属性 说明
EmergencyLoginAccountId 系统资源协作接口中的敏感属性(见Document Chunk #5
config privilege 修改系统配置所需权限等级,通常仅管理员具备
读取权限粒度 当前系统未对EmergencyLoginUser字段实现细粒度访问控制

根源分析

1. 接口权限控制缺失

  • Redfish API 返回的 /redfish/v1/AccountService 包含 OEM 扩展字段;
  • 当前实现未对 Oem/openBMC/EmergencyLoginUser 进行权限过滤;
  • 所有已认证用户(含非管理员)均可读取该字段,违反最小权限原则。

2. 资源协作接口暴露敏感信息

  • EmergencyLoginAccountId 是系统内部属性(KG Entity: Account 的关联属性);
  • 在 Redfish 映射过程中未做角色感知(role-aware)的数据脱敏处理;
  • 导致低权限用户也能看到仅应由管理员访问的系统配置项。

相关知识支撑

:white_check_mark: 紧急登录用户配置方式

  • 支持通过 Web UI 或后端接口设置;
  • 底层由 Account 组件管理;
  • 使用 EmergencyLoginAccountId 存储实体ID;
  • 可通过资源协作接口查询(busctl/dbus);

来源:Document Chunk #5, Search Result #1

:white_check_mark: Redfish 接口权限模型

  • Redfish API 支持基于会话和角色的访问控制;
  • 用户登录后,其权限应影响其所能访问的资源字段;
  • openUBMC 支持通过 Redfish 管理账户、权限、安全配置;
  • 但部分 OEM 字段缺乏权限校验逻辑。

来源:KG - Redfish API, Relationship: Account → FirstLoginPolicy


解决方案建议

建议一:增加字段级访问控制(推荐)

实现目标:

/redfish/v1/AccountService 接口中 EmergencyLoginUser 字段添加权限检查,仅允许管理员及以上角色访问。

修改点:

# 伪代码示例:在Redfish响应构造时添加权限判断
if user_role >= ADMIN_ROLE:
    response["Oem"]["openBMC"]["EmergencyLoginUser"] = current_emergency_user
else:
    # 非管理员不返回该字段
    del response["Oem"]["openBMC"]["EmergencyLoginUser"]

建议二:引入视图隔离机制

实现方式:

  • 构建不同角色的响应视图(view);
  • 管理员视图:完整返回所有OEM字段;
  • 普通用户视图:过滤掉敏感字段(如EmergencyLoginUser);
  • 基于 Account Public ConfigurationSecurity Configuration 动态生成响应。

来源:KG Entity: Account Public Configuration, Security Configuration


建议三:日志审计增强

即使保留读取权限,也应:

  • 在安全日志(SEL)中记录非管理员对敏感字段的访问;
  • 提供审计追踪能力;
  • 支持通过 Redfish Task ServiceLogService 导出审计日志。

来源:KG - Redfish API → Task Service Tasks 1


已尝试方案分析(用户反馈)

用户未列出已尝试解决方案。但从系统行为来看:

  • 已确认管理员可正常设置紧急登录用户 → 功能层面正确;
  • 非管理员可读取 → 权限控制策略失效;
  • 问题非认证失败或接口不可达类型 → 排除401/403错误;

参考 Search Result #9: “401响应码表示无效的用户请求”,而本例为200响应,说明系统主动返回了数据,属于授权过度而非认证失败


结论与建议

项目 判断
是否为缺陷? :white_check_mark: 是,属于安全权限越权漏洞
风险等级 :warning: 中高风险(信息泄露,可能辅助提权)
是否可复现? :white_check_mark: 根据描述和截图可复现
是否建议修复? :white_check_mark: 建议立即修复

:white_check_mark: 最终建议:

应对 Redfish API 返回的 EmergencyLoginUser 字段实施细粒度权限控制,确保仅管理员角色可读取该字段,其他用户应返回空或隐藏该属性。


来源综合:Document Chunks #1, #5, KG Entities: Account, Redfish API, Security Configuration, Relationships: Account → FirstLoginPolicy, Search Results

相关链接:

  1. 关于紧急登录用户问题的咨询
  2. 禁用当前登录的用户,用户未被强制退出,且可对BMC进行设置,如端口设置,虚拟控制台设置等。
  3. 使用nfs协议导出日志到远端成功,但查看任务状态报错。
  4. 用户登陆失败-提示错误用户密码或用户锁定
  5. account | 文档中心 | openUBMC