Oracle Solaris是美国甲骨文(Oracle)公司的一套UNIX操作系统。研究人员发现Oracle Solaris 可插入身份验证模块10版本、11版本存在安全漏洞,该漏洞允许未经身份验证的攻击者通过多种协议进行网络访问,从而危害Oracle Solaris。尽管此漏洞位于Oracle Solaris中,但攻击可能会严重影响其他产品。
漏洞分析
该漏洞位于Pluggable Authentication Modules (PAM)库中。PAM使得Solaris 应用可以在认证用户的同时允许系统管理员在一处配置认证参数让所有应用都执行,配置的参数包括密码复杂度和密码过期时间。
该漏洞实际上是位于PAM parse_user_name 函数中的经典的基于栈的缓存预处漏洞。函数如下所示:
图1: 存在栈溢出漏洞的parse_user_name 函数
当长度大于 PAM_MAX_RESP_SIZE (512 字节)的用户名被传递给parse_user_name 时会触发该漏洞。该漏洞已经存在几十年了,但是只有当应用在传递用户名给PAM 之前不限制用户名给一个小的长度时才会触发该漏洞。然而,在SSH 服务器中就是不限制用户名长度的,这也是研究人员发现的一个漏洞向量。
SSH Keyboard-Interactive(键盘交互)认证机制中,SSH协议负责中继服务器PAM 库和客户端之间的弹窗和响应。这样设计的目的是在无需修改SSH 协议的同时支持其他形式的认证方式,比如双因子认证。通过修改SSH 客户端设置为强迫 Keyboard-Interactive认证弹窗输入用户名而不是通过正常的方式发送,攻击者也可以传递无限制的输入给PAM的parse_user_name 函数。
PoC 漏洞利用
为了测试不同的Solaris版本是否受到该漏洞的影响,研究人员开发了一个PoC 漏洞利用来触发溢出并使SSH 服务器本科。标准的OpenSSH 客户端提供触发该漏洞的所有选项,如图2所示:
图 2: 可以通过SSH 测试服务器是否受该漏洞的影响
如果SSH 服务器输出“Authentication failed”就表明服务器受该漏洞的影响。如果接收到太长的用户名,不受该漏洞影响的PAM 库会使得SSH 服务器重复弹出输入用户名的弹窗。PAM 库的溢出会导致SSH 服务器奔溃,如图3所示。如果SSH 服务器奔溃会在/core 下下入一个crash dump(奔溃记录),如果Solaris 机器中存在 /core 文件,并且该文件来自sshd,就表明漏洞被利用了。
图 3: SSH 服务器崩溃
漏洞影响
有漏洞的操作系统包括:
· Solaris 9 (部分版本)
· Solaris 10 (全部版本)
· Solaris 11.0
· Illumos (OpenIndiana 2020.04)
补丁
Oracle 在10月的补丁更新中发布了Solaris 10 和 11的补丁。因为Solaris 9 已经不再支持了,因此Oracle 没有发布Solaris 9的补丁。研究人员建议用户更新到最新的Solaris 版本并安装补丁。如果无法更新,建议编辑 /etc/ssh/sshd_config 文件,添加一行ChallengeResponseAuthentication no 和KbdInteractiveAuthentication no,并重启SSH 服务器。
本文翻译自:https://www.fireeye.com/blog/threat-research/2020/11/critical-buffer-overflow-vulnerability-in-solaris-can-allow-remote-takeover.html如若转载,请注明原文地址: