OpenBSD 中的漏洞允许 smtpd、ldapd 和 radiusd 中的权限升级和身份验证绕过

夸利斯公司 透露弱点 在OpenBSD中,其中之一允许您无需身份验证即可远程连接某些网络服务,而其他三个则可以增加其在系统中的权限。 Qualys 报告指出 OpenBSD 开发人员的快速响应 - 所有问题都得到了解决 被淘汰 в OpenBSD的6.5 и OpenBSD的6.6 私人通知后40小时内。

该远程可利用漏洞是由于在 libc 库中安排对身份验证处理程序的调用时出现错误导致的,该处理程序调用
/usr/libexec/auth/login_style 程序在命令行上传递参数。 包括使用可选参数“-s service”调用login_style时,允许传递协议名称。 如果在用户名开头使用“-”字符,则在运行 login_style 时,该名称将被视为一个选项。 因此,如果您在身份验证期间指定“-schallenge”或“-schallenge: passwd”作为用户名,则login_style会将请求视为使用处理程序的请求 S/键.

问题在于,login_style 中的 S/Key 协议仅在形式上得到支持,但实际上在输出身份验证成功标志时被忽略。 因此,攻击者可以冒充“-schallenge”用户并绕过身份验证并获得访问权限,而无需指定密码或密钥。 所有使用常规 libc 调用进行身份验证的网络服务都可能受到该问题的影响。 例如,在 smtpd (AUTH PLAIN)、ldapd 和 radiusd 中确认了绕过身份验证的能力。

该漏洞不会在 sshd 中显现出来,因为它通过检查用户在系统中的存在来提供额外的保护。 但是,sshd 可用于测试系统是否容易受到漏洞的影响 - 当访问用户名“-sresponse:passwd”时,连接会挂起,因为 sshd 等待 login_passwd 返回调用的参数(挑战),而 login_passwd等待传输丢失的参数(名称“-sresponse”作为选项)。 潜在的本地攻击者可能会尝试绕过 su 实用程序中的身份验证,但传递名称“-sresponse”会导致进程崩溃,因为在执行 getpwnam_r("-schallenge", ...) 函数时返回空指针。

其他漏洞:

  • CVE-2019-19520 - 通过操作 xlock 实用程序来提升本地权限,该实用程序附带 sgid 标志,可将组更改为“auth”。 在xlock代码中,仅当用户ID(setuid)更改时才禁止重新定义库路径,这使得攻击者可以更改环境变量“LIBGL_DRIVERS_PATH”并组织加载他的共享库,其中的代码将被执行权限升级到“auth”组后。
  • CVE-2019-19522 - 当系统中启用 S/Key 或 YubiKey 身份验证(默认情况下未启用)时,允许“auth”组中的本地用户以 root 身份运行代码。 可以通过利用上述 xlock 漏洞来访问“auth”组中的成员身份,该组成员允许将文件写入 /etc/skey 和 /var/db/yubikey 目录。 例如,攻击者可以添加新的 /etc/skey/root 文件来生成一次性密钥,用于通过 S/Key 进行 root 身份验证。
  • CVE-2019-19519 - 可以通过使用 su 实用程序进行操作来增加资源限制。 当指定“-L”选项时(这意味着在失败的情况下会循环重复身份验证尝试),用户类别仅设置一次,并且在后续尝试中不会重置。 攻击者可以在第一次尝试使用不同的帐户类别输入其他人的登录名时执行“su -l -L”,但在第二次尝试成功通过自己的身份验证时执行“su -l -L”。 在这种情况下,将为用户设置与第一次尝试时指定的用户类别相对应的限制(例如,进程的最大数量或进程的内存大小)。 该方法仅适用于非特权用户的借用限制,因为根用户需要位于wheel组中)。

另外,还可以注意到 执行 OpenBSD 中提供了一种检查系统调用有效性的新方法,使漏洞利用进一步复杂化。 该方法允许系统调用仅在从先前注册的内存区域访问时才执行。 标记内存区域 建议的 新的系统调用 系统调用().

来源: opennet.ru