1、破绽简介:2016年11月15日,国外安全人员Dawid Golunski发布Debian、Ubuntu发行版的Nginx存在本地提权破绽(CVE-2016-1247),该破绽源于Nginx在新建日志目录时使用了不安全的权限设置,导致本地反面攻击者可利用此破绽将自身权限从nginx/web用户(www-data)提升至root。
2、影响范围:Debian的Nginx 1.6.2-5+deb8u3版本及之前版本;Ubuntu的16.04 LTS的1.10.0-0ubuntu0.16.04.3版本、14.04 LTS的1.4.6-1ubuntu3.6版本以及16.10的1.10.1-0ubuntu1.1版本均受此破绽影响。
3、破绽危害:成功利用该破绽的攻击者可获得服务器的最高级别权限,进而可能导致数据泄露等严重后果。
4、破绽利用条件:攻击者需先通过远程或其他方式获取本地权限,然后再利用此提权破绽进一步提升权限。
1、不安全的权限设置:基于Debian系统默认安装的Nginx会在/var/log/nginx/
路径下使用www-data
用户的权限新建Nginx日志目录,而该目录的拥有者是www-data
,在Ubuntu系统中,可通过命令ls -ld /var/log/nginx/
查看该目录的权限为drwxr-x--2 www-data adm 4096 Nov 12 22:32 /var/log/nginx/
,其下的文件如access.log
和error.log
的权限分别为-rw-r----1 www-data adm 0 Nov 12 22:31 /var/log/nginx/access.log
和-rw-r--r-1 root root 0 Nov 12 22:47 /var/log/nginx/error.log
。
2、提权实现方式:本地攻击者可以通过符号链接到任意文件来替换日志文件,从而实现提权,攻击者替换日志文件后,需要等待nginx daemon重新打开日志文件,这可以通过重启Nginx或使nginx daemon接受USR1进程信号来实现,而USR1进程信号会在默认安装的Nginx通过logrotate脚本调用的do_rotate()函数自动触发。
1、升级软件包:将Nginx升级到最新的安全版本,以修复该破绽,对于Debian系统,可参考官方安全公告[https://www.debian.org/security/2016/dsa-3701](https://www.debian.org/security/2016/dsa-3701);对于Ubuntu系统,可参考Ubuntu安全公告[https://www.ubuntu.com/usn/usn-3114-1](https://www.ubuntu.com/usn/usn-3114-1)。
2、临时措施:如果无法立即升级,可采取一些临时的安全措施,如限制nginx用户对日志目录及相关文件的访问权限,但这种方法可能会影响到Nginx的正常运行,因此不建议长期使用。
1、Q:如何确认我的系统是否受到该破绽影响?
A:可以通过检查Nginx的版本来确定,对于Debian系统,查看Nginx版本是否低于1.6.2-5+deb8u3;对于Ubuntu系统,分别查看Ubuntu 16.04 LTS的Nginx版本是否低于1.10.0-0ubuntu0.16.04.3、Ubuntu 14.04 LTS的Nginx版本是否低于1.4.6-1ubuntu3.6以及Ubuntu 16.10的Nginx版本是否低于1.10.1-0ubuntu1.1,如果版本低于上述对应版本,则说明系统可能受到该破绽影响。
2、Q:升级Nginx后,是否需要重启Nginx服务?
A:一般情况下,升级Nginx后需要重启Nginx服务,以使新的版本生效并确保系统的安全性,可以使用命令sudo systemctl restart nginx
来重启Nginx服务。