OATH-Toolkit 的 PAM 模块中发现了一个严重漏洞,在处理一次性密码 (OTP) 身份验证时,系统可能会受到潜在的 root 级攻击。该问题被标记为CVE-2024-47191,由 SUSE 安全团队的 Matthias Gerstner 在 SUSE 工程师 Fabian Vogt 的内部报告后发现。该漏洞会影响使用 oath-toolkit 进行基于 OTP 的双因素身份验证的系统,这对利用此模块的系统构成了显著威胁。
oath-toolkit 广泛用于管理 OTP,通常作为密码验证的第二个因素。该问题源于2.6.7 版中引入的一项功能,该功能允许将 OTP 状态文件(称为 usersfile)存储在用户的主目录中。该漏洞是在 PAM 模块在这些目录中执行文件操作的方式中发现的。
Gerstner 描述道:“ Fabian注意到PAM 模块在用户的主目录中执行不安全的文件操作。由于 PAM 堆栈通常以 root 身份运行,因此这很容易导致安全问题。”${HOME} 或 ${USER} 等路径的扩展逻辑没有得到妥善保护,导致严重的安全漏洞。
CVE-2024-47191 的根本原因在于 PAM 模块在 OTP 身份验证期间与 usersfile 交互的方式。当用户进行身份验证时,PAM 模块会调用 liboath 库中的 oath_authenticate_usersfile() 函数,该函数负责管理对此文件的访问。然而,正如 Gerstner 指出的那样,“特权不会被放弃,并且该函数不知道特殊的特权 PAM 上下文。 ”
此漏洞使非特权用户能够利用以 root 权限运行的 PAM 堆栈执行的文件操作。例如,通过在主目录中创建符号链接 (symlink),用户可以诱使系统覆盖 /etc/shadow 等关键文件,从而有效地获得 root 访问权限。
郭士纳概述了这种漏洞是如何轻易被触发的:
“这将导致/etc/shadow
被覆盖,并且其所有权将更改为待认证用户。待认证用户可获得完全 root 权限。无需赢得竞争条件,也无需猜测路径名。”
攻击场景直接,不需要复杂的条件或时间,因此是一种紧迫的安全威胁。
SUSE 安全团队迅速采取行动解决该漏洞。他们与原始上游作者合作开发了一个补丁来修复该问题。然而,这项任务比最初看起来要复杂得多,正如 Gerstner 在报告中解释的那样:
“ PAM 模块无法确定目标用户文件是否应该由 root 或需要验证的用户,甚至是某个不相关的用户拥有。 ”
发现的核心问题之一是锁定机制损坏。在原始形式下,模块的锁定文件可能会过早解除链接,从而导致潜在的竞争条件。此外,将锁定文件存储在用户主目录中可能会使目录混乱或导致本地拒绝服务。
为了解决这些问题,SUSE 实施了几项关键措施:
-
现在可以使用防止符号链接攻击的系统调用来安全地遍历用户文件路径。
-
权限被降至用户文件的所有者,从而减轻了权限提升的可能性。
-
彻底检查了锁定机制以避免使用户的主目录混乱,现在利用用户文件本身进行锁定。
尽管 oath-toolkit 2.6.12 版本中也发布了更具移植性的上游解决方案,但该综合补丁目前已用于 SUSE 产品。
oath-toolkit 的上游开发人员也发布了一个修复程序,该修复程序包含在版本2.6.12中。虽然他们的方法旨在提高跨平台兼容性,但它并未解决 SUSE 安全团队考虑的所有用例。不过,这两种解决方案都解决了核心漏洞,保护系统免受原始报告中概述的破坏性特权提升攻击。
原文始发于微信公众号(独眼情报):CVE-2024-47191:OATH-Toolkit PAM 模块中的严重缺陷可能导致 Root 漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论