CVE-2019-18634:影响Linux和macOS的sudo提权漏洞

tianqi1  1746天前

22.jpg

近期,来自苹果的研究人员Joe Vennix在sudo中发现了一个重要的漏洞(CVE-2019-18634),可让普通权限的Linux和macOS用户以root权限运行命令。

这个漏洞只能在特定的配置下利用。

Sudo是最重要、最强大、最常用的实用程序之一,它预装在macOS和几乎所有基于UNIX或linux的操作系统上,是系统的核心命令之一。

sudo可让用户以另一个用户的权限运行程序,默认情况下是超级用户。这个命令最初可解释为“超级用户做”(superuser do),因为旧版本的sudo被设计成只能以超级用户身份运行命令。

只有在sudoers配置文件中启用了“pwfeedback”选项时,才能利用这个漏洞。Sudo的pwfeedback选项可让用户在输入密码时提供可视化的反馈(辅助输入)。

在NIST发布的报告中表示,对于1.8.26版本之前的Sudo中,如果在/etc/sudoers中启用了pwfeedback,那么用户就可以在高权限的sudo进程中触发基于堆栈的缓冲区溢出。pwfeedback在Linux Mint和elementary OS中是默认设置的,不过它在其他操作系统中并不是这样,只有管理员启用才能生效。攻击者需要向tgetpass.cgetln()的stdin传递一个长字符串以触发漏洞。

33.png

专家指出,即使是未在sudoers文件中列出的用户也可利用此漏洞。

Sudo的开发者Todd C. Miller表示,利用漏洞和sudo权限无关,只需要启用了pwfeedback即可。

44.png

当sudo提示输入密码时,可以通过管道符将大量输入传递给sudo,从而重现漏洞,例如:

$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Password: Segmentation fault

漏洞出现的原因有两个:

  • 当从终端设备以外的设备读取数据时,pwfeedback选项不会被忽略。由于缺少终端,已保存的行擦除字符的版本保持其初始值0。

  • 如果出现写错误,擦除星号行的代码就无法正确地重置缓冲区位置,但是会重置剩余的缓冲区长度。因此,getln()函数可以写入缓冲区的末尾。

如果管理员发现了该选项被启用,可以通过将sudoers配置文件中的Defaults pwfeedback更改为Defaults !pwfeedback来禁用它。

Sudo的维护者已发布1.8.31版本,修复了这个漏洞。

Miller解释说:“虽然在1.8.26到1.8.30的版本中也存在类似缺陷,但是由于在sudo在1.8.26中引入了EOF处理,所以漏洞无法利用。”

早在2019年10月,Vennix就在sudo程序中发现了一个安全策略绕过问题,可能被恶意用户或程序利用,以root身份在Linux系统上执行任意命令。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://securityaffairs.co/wordpress/97265/breaking-news/sudo-cve-2019-18634-flaw.html

最新评论

昵称
邮箱
提交评论