允许您替换其他人终端中的转义序列的漏洞

util-linux 软件包中提供的 wall 实用程序中已发现一个漏洞 (CVE-2024-28085),该漏洞旨在向终端发送消息,该漏洞允许通过操纵转义序列对其他用户的终端进行攻击。该问题是由于 wall 实用程序阻止输入流上的转义序列而不是在命令行参数上执行此操作,从而允许攻击者在其他用户的终端上转义转义序列。

例如,通过执行 'wall $(printf "\033[33mHI")' 您可以用黄色打印“HI”。通过使用允许您移动指针、清除和替换屏幕上的内容的转义序列,您可以模拟在另一个用户的终端中显示 sudo 密码提示。如果用户没有注意到这个伎俩并输入了他的密码,那么该密码将作为一条不存在的命令出现在输入历史记录中(事实上,用户将在命令行上输入他的密码而不是命令)。 “\033[3A” // 将光标向上移动 3 行 “\033[K” // 删除之前的输出 “[sudo] password for a_user:” // 显示虚拟 sudo 请求 “\033[?25l” / / 设置背景颜色隐藏输入“\033[38;2;48;10;36m”

当发出未找到输入的命令的警告时,许多发行版都会运行 /usr/lib/command-not-found 处理程序,该处理程序会尝试识别包含丢失命令的软件包并提供有关是否可以安装该软件包的提示。问题是,当启动“command-not-found”处理程序时,一个不存在的命令会作为命令行参数传递给它,该参数在查看系统上的进程时可见(例如,当尝试运行已卸载的实用程序时) “xsnow”、“/usr”将在进程列表 /lib/command-not-found - xsnow 中可见”)。因此,攻击者可以监控正在运行的进程(例如,通过分析“/proc/$pid/cmdline”的出现来预测PID号)并确定受害者在命令行上输入的密码。

为了让用户输入密码以响应虚构的 sudo 提示,有人提出了一个技巧,其本质是跟踪进程列表中 sudo 实用程序的实际启动,等待它完成,然后之后立即穿过“墙”进行攻击。通过操纵转义序列,攻击者可以在实际执行 sudo 后用伪造的密码重新输入提示替换消息。受害者可能认为他在输入密码时犯了一个错误,并再次输入密码,从而在“command-not-found”处理程序的参数中泄露了密码。

成功的攻击需要将“mesg”模式设置为“y”,这是 Ubuntu、Debian 和 CentOS/RHEL 中的默认设置。该攻击已在 Ubuntu 22.04 中使用 gnome-terminal 的默认配置进行了演示。在 Debian 上,攻击很困难,因为发行版中默认情况下未启用“command-not-found”处理程序,而在 CentOS/RHEL 上,攻击将不起作用,因为 wall 实用程序安装时没有 setgid 标志,并且无法访问其他人的终端。使用Windows终端时,可以修改攻击以更改剪贴板的内容。

该漏洞自 2013 年以来一直存在于 util-linux 软件包中,之后 2.24 版本添加了在 wall 命令行上指定消息的功能,但忘记清理转义序列。昨天发布的 util-linux 2.40 中包含了对该漏洞的修复。值得注意的是,在尝试修复 util-linux 2.39 版本中的漏洞时,发现了另一个类似的漏洞,该漏洞允许通过操作区域设置来替换控制字符。

来源: opennet.ru

添加评论