加密会话(SSL)使用的是没有“secure”属性的 cookie

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

加密会话(SSL)中使用无“Secure”属性 Cookie 的安全问题分析与解决方案

问题描述

在对 OpenUBMC 系统进行安全扫描时,发现 加密会话(SSL)使用了未设置 Secure 属性的 Cookie,存在潜在的安全风险。该问题被标记为中危漏洞(CVSS 分数 6.4)

  • 漏洞地址https://10.66.87.192/UI/Rest/MutualHandler
  • 受影响 Cookieuserdata: NULL
  • 原始响应头包含
    Set-Cookie: userdata: NULL
    Strict-Transport-Security: max-age=31536000; includeSubDomains
    Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-eval'; connect-src 'self' wss://*:*; ...
    X-Frame-Options: DENY
    

尽管系统已启用 HTTPS 和多项安全策略(如 HSTS、CSP),但关键会话 Cookie 未设置 Secure 属性。


漏洞原理与风险

什么是 Secure 属性?

Secure 是一个可附加到 Set-Cookie 响应头中的标志属性,用于指示浏览器 仅通过 HTTPS 加密连接发送该 Cookie,防止其通过明文 HTTP 传输。

示例正确设置方式:

Set-Cookie: userdata=abc123; Secure; HttpOnly; SameSite=Strict

风险分析

当前 Set-Cookie: userdata: NULL 缺少 Secure 属性,意味着:

风险项 说明
中间人攻击(MitM) 如果用户网络被劫持,且后续通过非加密链接访问服务,此 Cookie 可能被窃取。
会话信息泄露 尽管值为 NULL,但若未来用于存储敏感数据(如会话 ID、用户标识),将直接暴露。
降低整体安全性 即使使用了 HSTS 和其他安全头,缺少 Secure 属性仍构成纵深防御体系的短板。

:warning: 特别注意:即使 Cookie 值看似无害(如 NULL),只要它参与会话机制,就应视为潜在攻击向量。


根本原因分析

根据知识库信息与系统架构分析,产生该问题的原因如下:

1. Cookie 安全配置缺失

系统未对输出的 Cookie 显式设置安全属性。

  • 相关实体_cookies_acceptedSet-Cookie
  • 上下文WEB 接口和 WebUI 通过后端服务(如 BMCWEB)管理会话,但未强制所有 Set-Cookie 添加 Secure 标志。

2. 安全策略未覆盖 Cookie 层面

虽然系统实施了以下安全措施:

  • :white_check_mark: Strict-Transport-Security:强制使用 HTTPS
  • :white_check_mark: Content-Security-Policy:防止 XSS 和非法资源加载
  • :white_check_mark: X-Frame-Options: DENY:防止点击劫持

但这些策略 无法替代 Cookie 自身的安全属性

:magnifying_glass_tilted_left: 推理依据:AppScan 检测到“通过 SSL 发送不安全的 Cookie”,说明虽然通信是加密的,但 Cookie 本身允许降级传输。


解决方案与修复建议

:white_check_mark: 修复目标

为所有敏感 Cookie 添加 Secure 属性,确保仅通过 HTTPS 发送。

:white_check_mark: 具体修复措施

1. 修改后端服务代码(BMCWEB)

在生成 Cookie 的逻辑中,强制添加 Secure 属性:

Set-Cookie: userdata=VALUE; Secure; HttpOnly; Path=/; SameSite=Strict

说明

  • Secure:仅通过 HTTPS 发送
  • HttpOnly:防止 JavaScript 访问(防 XSS)
  • SameSite=Strict:防止跨站请求伪造(CSRF)

2. 检查并统一 Cookie 处理逻辑

  • 审查 BMCWEB 模块中所有 Set-Cookie 输出点
  • 确保所有与身份认证、会话相关的 Cookie 均启用 Secure
  • 参考 XCSRFTOKEN 的安全设计模式(用于防止 CSRF)

3. 验证 SSL/TLS 环境一致性

  • 确保 ProtocolType 设置为 1(HTTPS)
  • 检查 /bmc/kepler/Systems/Sms/Veth 配置中的协议类型
  • 确认无代理或反向代理绕过 HTTPS 的情况

:pushpin: 参考:文档 <id:7> 提到 SSL 证书加载路径 /data/trust/cert/ssl/SSL_1.crt,需确认证书有效且服务正运行于 HTTPS 模式。


后续加固建议

建议 说明
:locked_with_key: 启用 HttpOnly 防止客户端脚本访问 Cookie,抵御 XSS 攻击
:counterclockwise_arrows_button: 实施 SameSite 策略 推荐使用 StrictLax 模式,防范 CSRF
:test_tube: 自动化安全扫描 在 CI/CD 流程中集成 AppScan 或类似工具,定期检测 Cookie 配置
:page_facing_up: 更新安全标准文档 在《openUBMC 安全设计规范》中明确要求:所有 Cookie 必须设置 Secure 属性

结论

:red_exclamation_mark: 结论:尽管 OpenUBMC 系统已采用多种 HTTPS 安全机制(HSTS、CSP、X-Frame-Options),但由于 Cookie 缺少 Secure 属性,仍存在会话信息泄露风险

:white_check_mark: 建议立即修复:在 BMCWEB 服务中为 Set-Cookie 响应头添加 Secure 属性,并全面审查所有 Cookie 输出逻辑。

此项修复符合现代 Web 安全最佳实践,有助于提升系统的整体安全韧性。

相关链接:

  1. iBMC Web-API 登录已启用前端加密,如何在脚本里复现加密并拿 SessionId?
  2. 【iTestSmart】使用通用下载接口下载BMC文件路径注入测试,信息校验出错。
  3. 使用openssl制作SSL证书
  4. 虚拟控制台端口设置1、7等,打不开KVM
  5. 1.特性概述 | 文档中心 | openUBMC