答案内容由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
相关链接: