CVE-2024-25718:Samly访问控制漏洞技术分析
漏洞概述
CVE-2024-25718是一个影响Samly库的严重访问控制漏洞。Samly是一个用于Elixir/Phoenix应用程序的SAML 2.0服务提供商单点登录认证库。该漏洞存在于1.4.0之前的所有版本中,CVSS 3.1基础评分为9.8分(严重级别)。
技术细节
漏洞核心机制
该漏洞的根本原因在于Samly.State.Store.get_assertion/3函数可能返回已过期的会话,而Samly.AuthHandler会使用缓存的会话且不会在会话过期后替换它。这直接干扰了访问控制机制。
具体来说,当用户通过SAML认证后,Samly会创建并存储一个包含用户身份信息的SAML断言(assertion)。这个断言本应具有有效期,并在过期后自动失效。然而,由于漏洞的存在,即使断言已过期,系统仍可能返回并使用这个过期的会话数据。
受影响组件
- Samly.State.Store模块:负责存储和检索SAML断言状态
- Samly.AuthHandler模块:处理认证逻辑,使用缓存会话
- 会话状态管理机制:两种实现方式(ETS存储和会话存储)均受影响
技术影响
- 访问控制绕过:攻击者可能利用过期的会话继续访问受限资源
- 权限提升:普通用户可能保留不应再有的权限
- 会话固定攻击:会话不按预期失效,增加安全风险
漏洞修复
该漏洞已在Samly 1.4.0版本中修复。修复方案主要涉及改进会话状态管理逻辑,确保:
- 过期会话不会被返回给调用者
- AuthHandler会正确检查会话有效期并获取新的有效会话
- 状态存储机制会及时清理过期会话
相关技术背景
Samly库架构
Samly是一个基于Erlang esaml库构建的Elixir Plug库,用于为Plug/Phoenix应用程序提供SAML 2.0服务提供商单点登录功能。它支持多种身份提供商,包括Okta、Ping Identity、OneLogin、ADFS等。
配置示例
Samly的典型配置包括:
|
|
会话状态存储选项
Samly提供两种会话状态存储机制:
- ETS存储:基于Erlang Term Storage,适用于单机部署
- 会话存储:基于Plug Sessions,适用于集群部署
两种存储机制都受到此漏洞的影响,都需要升级到1.4.0或更高版本。
安全建议
- 立即升级:所有使用Samly库的项目应升级到1.4.0或更高版本
- 会话监控:实施额外的会话有效期监控机制
- 访问控制复核:检查应用程序的访问控制逻辑是否依赖会话有效期
- 安全测试:对修复后的系统进行彻底的安全测试,特别是会话管理相关功能
总结
CVE-2024-25718暴露了Samly库在会话状态管理中的设计缺陷,这个缺陷可能被利用来绕过访问控制机制。通过及时升级到修复版本,并实施额外的安全监控措施,可以有效地缓解这一安全风险。对于使用SAML单点登录的企业应用程序而言,会话管理的安全性至关重要,需要持续关注相关库的安全更新。