影响 Linux Mint 和 Elementary OS 的 sudo root 漏洞

在实用程序中 须藤,用于代表其他用户组织命令的执行, 已确定 漏洞(CVE-2019-18634),它允许您将系统中的权限增加到root用户。 该问题仅在 sudo 1.7.1 发布后在 /etc/sudoers 文件中使用“pwfeedback”选项时出现,该选项默认禁用,但在某些发行版(例如 Linux Mint 和 Elementary OS)上启用。 版本中修复的问题 须藤1.8.31,几个小时前发布。 该漏洞在分发包中仍未修复。

“pwfeedback”选项允许在输入密码时在每个输入的字符后显示“*”字符。 因为 错误 在 tgetpass.c 文件中定义的 getln() 函数的实现中,在某些条件下通过标准输入流 (stdin) 传递的过大密码字符串可能无法装入分配的缓冲区并覆盖堆栈上的其他数据。 以 root 身份运行 sudo 代码时会发生溢出。

问题的本质是,当输入过程中使用特殊字符^U(行清除)时,如果写入操作失败,负责清除输出“*”字符的代码会重置可用缓冲区大小上的数据,但不会将指针返回到缓冲区中当前位置的初始值。 导致利用的另一个因素是,当数据不是从终端而是通过输入流到达时,缺乏自动禁用“pwfeedback”模式(此缺陷允许为发生记录错误创造条件,例如,在具有以下功能的系统上)单向 未命名频道 尝试写入读取通道的末尾时会发生错误)。

由于攻击者可以完全控制堆栈上的数据覆盖,因此创建允许他将权限升级为 root 的漏洞并不困难。 任何用户都可以利用该问题,无论 sudo 权限或 sudoers 中的用户特定设置如何。 要阻止该问题,您应该确保 /etc/sudoers 中没有“pwfeedback”设置,并在必要时禁用它(“默认!pwfeedback”)。 要检查是否有问题,可以运行代码:

$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
密码:分段错误

来源: opennet.ru

添加评论