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 1.9.0 到 1.9.5p1 所有稳定版(默认配置)
- sudo 1.8.2 到 1.8.31p2 所有旧版本(默认配置)
建议升级到最新的sudo 1.9.5p2及更高版本来修复该漏洞
解决方法
手动的去安装最新的sudo即可。在更新前需要做好备份的工作,然后卸载旧版本的sudo,重新安装新版本,以下以ubuntu为例。
- 备份sudo的pam配置文件:mv /etc/pam.d/sudo /etc/pam.d/sudo.bak
- 下载最新的sudo版本 :wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz
- 解压:tar zxvf sudo-1.9.5p2.tar.gz
- 删除旧的sudo:apt remove -y sudo
- 配置sudo:cd ./sudo-1.9.5p2.tar.gz && ./configure —prefix=/usr/
- 安装:make && make install
- 恢复备份文件:mv /etc/pam.d/sudo.bak /etc/pam.d/sudo
这样在查询sudo的版本时,就已经是最新版本了
小插曲
因为有的服务器默认是非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的操作即可。