答案内容由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
重现步骤
- 管理员用户通过Redfish登录BMC;
- 管理员配置某一管理员账户为“紧急登录用户”;
- 非管理员用户通过Redfish接口登录系统;
- 非管理员用户发起请求查询系统账户服务信息(
/redfish/v1/AccountService);
- 响应中包含
Oem/openBMC/EmergencyLoginUser 字段,值为 "Administrator"。
期望结果
- 管理员可成功设置紧急登录用户;
- 非管理员用户登录成功;
- 非管理员用户无法获取紧急登录用户信息(应被权限控制屏蔽)。
实际结果
非管理员用户通过以下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)的数据脱敏处理;
- 导致低权限用户也能看到仅应由管理员访问的系统配置项。
相关知识支撑
紧急登录用户配置方式
- 支持通过 Web UI 或后端接口设置;
- 底层由
Account 组件管理;
- 使用
EmergencyLoginAccountId 存储实体ID;
- 可通过资源协作接口查询(busctl/dbus);
来源:Document Chunk #5, Search Result #1
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 Configuration 和 Security Configuration 动态生成响应。
来源:KG Entity: Account Public Configuration, Security Configuration
建议三:日志审计增强
即使保留读取权限,也应:
- 在安全日志(SEL)中记录非管理员对敏感字段的访问;
- 提供审计追踪能力;
- 支持通过
Redfish Task Service 或 LogService 导出审计日志。
来源:KG - Redfish API → Task Service Tasks 1
已尝试方案分析(用户反馈)
用户未列出已尝试解决方案。但从系统行为来看:
- 已确认管理员可正常设置紧急登录用户 → 功能层面正确;
- 非管理员可读取 → 权限控制策略失效;
- 问题非认证失败或接口不可达类型 → 排除401/403错误;
参考 Search Result #9: “401响应码表示无效的用户请求”,而本例为200响应,说明系统主动返回了数据,属于授权过度而非认证失败。
结论与建议
| 项目 |
判断 |
| 是否为缺陷? |
是,属于安全权限越权漏洞 |
| 风险等级 |
中高风险(信息泄露,可能辅助提权) |
| 是否可复现? |
根据描述和截图可复现 |
| 是否建议修复? |
建议立即修复 |
最终建议:
应对 Redfish API 返回的 EmergencyLoginUser 字段实施细粒度权限控制,确保仅管理员角色可读取该字段,其他用户应返回空或隐藏该属性。
来源综合:Document Chunks #1, #5, KG Entities: Account, Redfish API, Security Configuration, Relationships: Account → FirstLoginPolicy, Search Results
相关链接:
- 关于紧急登录用户问题的咨询
- 禁用当前登录的用户,用户未被强制退出,且可对BMC进行设置,如端口设置,虚拟控制台设置等。
- 使用nfs协议导出日志到远端成功,但查看任务状态报错。
- 用户登陆失败-提示错误用户密码或用户锁定
- account | 文档中心 | openUBMC