CVE-2021-3156漏洞修复

早上腾讯云发来邮件,说服务器存在CVE-2021-3156漏洞,Ubuntu在1月26号已经发布了相关信息。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或 -i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。这样攻击者就可以使用普通用户获取到了root权限,还是挺危险的,如果是线上业务最好还是及时升级。

影响范围

通过sudo -V 或者 sudo --version | grep version 查询sudo的版本

解决方法

手动的去安装最新的sudo即可。在更新前需要做好备份的工作,然后卸载旧版本的sudo,重新安装新版本,以下以ubuntu为例。

  1. 备份sudo的pam配置文件:mv /etc/pam.d/sudo /etc/pam.d/sudo.bak
  2. 下载最新的sudo版本 :wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz
  3. 解压:tar zxvf sudo-1.9.5p2.tar.gz
  4. 删除旧的sudo:apt remove -y sudo
  5. 配置sudo:cd ./sudo-1.9.5p2.tar.gz && ./configure —prefix=/usr/
  6. 安装:make && make install
  7. 恢复备份文件:mv /etc/pam.d/sudo.bak /etc/pam.d/sudo

这样在查询sudo的版本时,就已经是最新版本了

WeChatWorkScreenshot_2647bcd5-e6a5-43ae-92bc-e24b344ca360

小插曲

因为有的服务器默认是非root权限,然后我先删除了旧的sudo,接下来就悲剧了。在make install等需要授权的地方就提示没有权限,但是我又没有sudo去提权。然后我想通过apt重新安装sudo,发现进程被锁,没有sudo无法pkill,郁闷。

尝试使用pkexec apt-get install sudo来安装sudo,又提示鉴权失败。

polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized

This incident has been reported.

Emm最后找到一个大神的解决方案,很有意思。首先在运行pkexec的终端A里使用echo $$打印当前的PID。接下来在开一个新的终端B,通过执行pkttyagent --process 刚刚拿到的PID。果然B里面的鉴权成功了,然后A里再进行安装sudo的操作即可。


Published with Ghost | Moegi