0%

CVE-2025-22457-ivanti栈溢出漏洞分析

前言

既CVE-2025-0282之后,ivanti再次爆出一个栈溢出漏洞CVE-2025-22457。此文记录关于它的利用过程学习。

漏洞定位

获取X-Forwarded-For的值,并且获取数字0-9以及点.,并把这些拷贝到栈上。

由于没有对X-Forwarded-For的长度进行检查,很明显存在一个栈溢出。

漏洞利用

由于只能输入数字和点,所以想通过控制返回地址去进行ROP是行不通的。同时注意上图中的*((_DWORD *)a1 + 0x36) = -1;这一段代码,我们在进行栈溢出时,会覆盖掉这里的a1,并且很明显会把他覆盖成一个3开头的地址,比如0x39393939。但是这个地址正常来说是非法地址,所以当时在看到这个漏洞的适合以为是无法利用的。

后续参考rapid的文章,得知可用通过堆喷的方式去绕过上面这个限制。

我们通过申请大量的堆块,使得0x39393939等地址可用被我们控制。并且下面会进入函数processCookieHeader。这个函数的入参a1就是在上面会被我们覆盖的那个。

这个函数一开始的地方就是函数指针的调用,在堆喷控制堆布局之后,我们就可以通过控制这里的函数指针,去控制程序执行流,之后就可以进行ROP了。

并且文章中也给出了堆喷的方式,通过IF-T/TLS传输机制去进行堆喷即可。

下图是相关调试过程,因为多核不方便进行调试,我就改成了单核,这样更方便调试。

最后附上rce图。

参考链接

https://attackerkb.com/topics/0ybGQIkHzR/cve-2025-22457/rapid7-analysis?referrer=notificationEmail