漏洞概述
Ivanti Connect Secure、Ivanti Policy Secure 和 Ivanti Neurons for ZTA gateways 是 Ivanti 公司推出的远程访问与安全连接解决方案,主要提供 VPN、访问控制、流量加密等核心功能。其 IF-T/TLS 协议在认证阶段前存在栈缓冲区溢出漏洞,攻击者可利用该漏洞实现未授权远程代码执行。该漏洞已被 APT 组织实际利用。
Ivanti Connect Secure
影响范围
- Ivanti Connect Secure:22.7R2 ~ 22.7R2.4
- Ivanti Policy Secure:22.7R1 ~ 22.7R1.2
- Ivanti Neurons for ZTA gateways:22.7R2 ~ 22.7R2.3
复现环境
版本:Ivanti Connect Secure 22.7R2.3
环境搭建
将 Ivanti Connect Secure 22.7R2.3 虚拟机镜像导入虚拟化平台并启动,按照界面提示完成 IP 地址、管理员账号和密码等基础配置。
配置完成后进入命令行界面,可通过编号进行系统管理,但无法直接执行底层 Shell 命令。
Linux Operating System | CLI (Command Line Interface) and GUI (Graphic User Interface) - GeeksforGeeks
同时,在浏览器中使用 HTTPS 协议访问配置的 IP 地址,可正常显示 Web 登录界面。
Editing Ivanti Secure Access Client User Interface Labels
获取系统文件与底层 Shell
直接查看虚拟机磁盘文件并尝试挂载时,发现文件系统已被加密,无法通过常规方式获取系统文件。传统方案需逆向启动流程并破解解密算法,但耗时较长。
笔者采用了一种高效方法:暂停虚拟机后,直接修改内存文件,将 /home/bin/dsconfig.pl 字符串替换为 ///////////////bin/sh(该脚本为控制台界面调用的核心文件)。替换完成后等待控制台超时,按回车键即可获得底层 Shell。
获取 Shell 后,可执行任意系统命令。随后利用内置 Python 程序开启简单 Web 服务,快速下载系统文件进行后续逆向分析。
漏洞分析
根据公开 POC,该漏洞通过 HTTPS 协议触发,定位目标进程为 /home/bin/web。
逆向分析发现,IF-T/TLS 协议在认证阶段会获取客户端属性字段(clientIP、clientHostName、clientCapabilities 等)并进行处理。
在处理 clientCapabilities 属性值时,程序使用 strncpy 进行复制,但最后一个参数(要复制的最大字节数)错误地使用了从客户端获取的长度值加 1,该值完全可被攻击者控制。
Learn Buffer Overflows through Visuals | Lightfoot Labs
而目的缓冲区(dest)是一个位于栈上的固定缓冲区,最大长度仅为 256 字节。攻击者只需传入超过 256 字节的 clientCapabilities 属性值,即可触发栈缓冲区溢出。
溢出成功后可覆盖栈中保存的返回地址,函数返回时程序控制流将被劫持至攻击者指定的内存地址,从而执行任意代码。
漏洞利用
理论上,覆盖返回地址即可实现代码执行,但实际利用远非如此简单。主要面临以下挑战:
- 程序自身安全保护
- 虚函数调用
- 对象内存释放
首先分析 /home/bin/web 的保护机制:程序启用了NX(不可执行栈)和PIE(位置无关可执行)保护。溢出数据默认无法直接作为 shellcode 执行,必须通过 ROP(Return-Oriented Programming)技术绕过 NX。
PIE + 系统地址随机化导致内存地址不可预测。经分析,未发现信息泄露路径,但因程序为 32 位,最多只需暴力尝试 65536 次(2¹⁶),即可破解 libc.so.6 的基地址。
此外,在到达被覆盖的返回地址前,程序还会执行多处其他代码,其中一个虚函数调用地址可能被溢出破坏,导致程序提前崩溃。解决办法是在 libc.so.6 中搜索满足条件的虚函数调用地址,确保控制流能正常到达后续 ROP 链。
另外,程序中存在一处释放 DSUtilMemPool 对象内存的代码,该内存已被溢出覆盖,会导致异常退出。通过将该对象指针设置为 -1(0xFFFFFFFF)即可绕过释放操作。
经过上述分析与精心布局,最终的栈布局如下图所示:
通过以上栈布局设计,溢出后的 clientCapabilities 数据可精准覆盖返回地址,结合 ROP 技术最终实现任意代码执行。
总结:该漏洞利用链完整、条件苛刻,但一旦突破即可获得高权限远程代码执行能力。建议受影响用户立即升级至安全版本,并加强网络边界防护。