导语:Citrix Bleed(内存越读)家族又添新成员。2026年6月30日,Citrix正式发布CVE-2026-8451漏洞公告——又是一个NetScaler在解析SAML认证请求时的内存越读。CVSS 8.8分,影响所有配置为SAML身份提供商的NetScaler ADC和Gateway。漏洞由安全公司watchTowr Labs(就是那个每几个月就要”不小心”从NetScaler里读出一堆内存的团队)于2026年3月发现并报告。然而更讽刺的是——披露不到24小时,攻击者已经在利用它了。
一、漏洞概述:又一个CitrixBleed
CVE-2026-8451( watchTowr 团队称之为”CitrixBleed To Infinity And Beyond”,无限出血)是一个NetScaler ADC和NetScaler Gateway在配置为SAML身份提供商(SAML IDP)时的内存越读漏洞。
Citrix官方描述:Insufficient input validation leading to memory overread(输入验证不足导致内存越读)。
基础信息:
| 项目 | 内容 |
|---|---|
| CVE编号 | CVE-2026-8451 |
| CVSS评分 | 8.8(高危) |
| 影响产品 | NetScaler ADC / NetScaler Gateway |
| 利用前提 | 必须配置为SAML IDP |
| 认证要求 | 无需认证(预认证) |
| 利用方式 | 发送畸形SAML AuthnRequest |
| 在野利用 | 已确认(Lupovis 6月30日发现) |
受影响版本:
- NetScaler ADC & Gateway 14.1 —— 14.1-72.61 之前的版本
- NetScaler ADC & Gateway 13.1 —— 13.1-63.18 之前的版本
- NetScaler ADC FIPS —— 14.1-72.61 FIPS 之前的版本
- NetScaler ADC FIPS & NDcPP —— 13.1-37.272 之前的版本
修复版本:
- 14.1-72.61 及之后版本
- 13.1-63.18 及之后版本
二、漏洞原理:XML属性解析器的边界失控
这是理解这个漏洞最核心的部分,也是它最有趣的地方。
2.1 问题出在哪里
watchTowr Labs的研究人员在分析今年3月的CVE-2026-3055时,顺藤摸瓜发现了这个同源漏洞。问题出在NetScaler处理SAML AuthnRequest(认证请求)时调用的XML属性解析代码。
Citrix没有使用标准的XML解析库,而是自己写了一段解析逻辑,专门用来提取XML标签中类似foo="bar"这种属性值。结果这段代码有两个致命缺陷:
缺陷一:无边界检查的字符串扫描
解析器在扫描属性值时,没有对输入缓冲区做任何边界检查。如果属性值没有被正确终止(比如缺少引号或换行),解析器会一直读下去,直到遇到特定控制字符才停下。
缺陷二:引号外属性值的特殊处理
在引号内的属性值,会在遇到匹配引号时正常终止。但对于不带引号的属性值,解析器只在遇到NULL字节或>时才停止——换行符(0x0A)不是终止符。
这意味着如果发送这样的请求:
<samlp:AuthnRequest Version="2.0" AssertionConsumerServiceURL=
id=
<saml:Issuer>watchtowr</saml:Issuer>
</samlp:AuthnRequest>
解析器会认为AssertionConsumerServiceURL=后面没有引号包裹的值,于是它会一直读到下一个>才停——而这个>可能出现在很多行之后,甚至在内存的其他位置。
2.2 日志里的证据
watchTowr的研究人员在/var/log/ns.log中直接看到了解析器越读的后果。正常情况下,解析日志应该像这样:
AuthnReq start tag parsed, id=<_99d3e71118f42305e05acb14ad0bd917>,
acs=<http://sp.example.com/demo1/index.php?acs>, forceAuth=<0>, binding=<POST>
但发送畸形请求后,日志变成了这样:
AuthnReq start tag parsed, id=<>, acs=<▒^M▒ᆳ▒="2.0" id="11"
AssertionConsumerServiceURL="22"ᆳ▒mple.com/demo1/index.php</saml:Issuer>,
forceAuth=<0>, binding=<Unknown>
acs字段的值里出现了"2.0" id="11" AssertionConsumerServiceURL="22"这样的二进制数据——这些数据根本不在请求的XML里,是从请求缓冲区之外的内存中读取的。
2.3 数据如何泄露出去
NetScaler在处理SAML请求后,会生成一个NSC_TASS cookie,其中嵌入了从XML解析出的各个字段值。这个cookie通过HTTP响应返回给客户端。
当解析器越读后,超出边界的内存数据会被写入这个cookie——就这样,NetScaler进程内存中的敏感数据被送到了攻击者手上。
watchTowr的PoC脚本成功读取到了0xdeadbeef填充模式和疑似内存指针的数据:
Leaked bytes:
00000000 f0 0d 90 de de de de de de de de de de de de de |................|
00000010 de de de de de de de de de de de de de de de de |................|
00000020 de de de de de de de de de de de de de de de de |................|
00000030 de de de de de de de de de de de de de de de de |................|
00000040 de de de de de de de de ed a7 |................|
00000050 0c a1 35 00 |..5.|
0xf00d是 Citrix 用于测试的魔数,0xdeadbeef是内存填充数据,而0xa10ca7ed看起来像是一个有效的进程内存指针。如果这确实是一个指针,那这个漏洞的价值就不只是”信息泄露”了——它可以成为进一步内存破坏利用的基石。
2.4 与CVE-2026-3055的区别
今年3月爆出的CVE-2026-3055(CitrixBleed4)也能导致大量内存泄露(可达数KB),而CVE-2026-8451的越读量相对较小,因为解析器在遇到NULL、>等控制字符时会停止越读。watchTowr在测试中每次只能挤出几个字节。但这不意味着它不危险——哪怕几个字节的进程内存指针,配合其他漏洞,也可能组合出完整的利用链。
三、在野利用:披露不到24小时
安全公司Lupovis在2026年6月30日(漏洞披露当天)即监测到来自法兰克福(IP:146.70.139.154)的定向攻击。
攻击者的行为模式很有意思:
- 先对目标发送验证请求(返回404则跳过)
- 确认目标存在后,才投递完整Payload
- 监测HTTP 200响应(表示漏洞利用成功)
这说明攻击者不是广撒网式扫描,而是有针对性的定向攻击——先侦察目标版本,再精准投放Exploit。Lupovis确认,攻击者使用的Payload与watchTowr Labs发布的检测工具完全一致。

四、检测Artifact工具:手把手复现攻击
watchTowr Labs在GitHub上发布了CVE-2026-8451的检测工具:
GitHub:https://github.com/watchtowrlabs/watchTowr-vs-Netscaler-CVE-2026-8451
使用方法极其简单,Python脚本直接打目标URL即可:
git clone https://github.com/watchTowr/watcTowr-vs-Netscaler-CVE-2026-8451
cd watchTowr-vs-Netscaler-CVE-2026-8451
python watchTowr-vs-Netscaler-CVE-2026-8451.py https://<target>
如果目标存在漏洞,脚本会输出泄露的内存字节:
c:>python watchTowr-vs-Netscaler-CVE-2026-8451.py https://192.168.80.125
..
Leaked bytes:
00000000 f0 0d 90 de de de de de de de de de de de de de |................|
00000010 de de de de de de de de de de de de de de de de |................|
...
同时请注意:过于简单的畸形请求也会直接导致NetScaler的nsppe进程崩溃,造成DoS。
发送这个请求就能让设备宕机:
<samlp:AuthnRequest ID=
base64编码后POST到/saml/login,nsppe进程直接崩溃重启。
五、 CitrixBleed家族史:一个持续失血的伤口
从2023年的CitrixBleed(CVE-2023-4966)开始,Citrix NetScaler的内存泄露类漏洞就像打开了潘多拉魔盒:
| CVE | 时间 | 类型 | 说明 |
|---|---|---|---|
| CVE-2023-4966 | 2023.10 | 内存泄露 | CitrixBleed,Sessions劫持 |
| CVE-2025-5777 | 2025 | 内存泄露 | CitrixBleed 2 |
| CVE-2025-12101 | 2025 | 内存泄露+RXSS | CitrixBleed 4(?) |
| CVE-2026-3055 | 2026.03 | 内存越读 | CitrixBleed 4 |
| CVE-2026-8451 | 2026.06 | 内存越读 | CitrixBleed To Infinity |
watchTowr的研究人员在报告中无奈地写道:
“CitrixBleed now refers to not a single vulnerability, but an entire class of Memory Disclosure-esque vulnerabilities in Citrix NetScaler devices.”
翻译成人话:Citrix的NetScaler在内存管理上一塌糊涂,连”不小心配置一下都能导致内存泄露”。这不是某个函数的bug,这是Citrix整个代码审计体系的系统性失败。
六、修复建议
立即行动:
- 升级到安全版本
- NetScaler ADC/Gateway 14.1 → 升级到 14.1-72.61 及以上
- NetScaler ADC/Gateway 13.1 → 升级到 13.1-63.18 及以上
- 检查是否为SAML IDP配置
CVE-2026-8451的利用前提是NetScaler配置为SAML身份提供商。检查方法:
- 登录NetScaler管理界面
- 查看
Configuration → Citrix Gateway → SAML IdP - 如未配置SAML IDP,该漏洞无法直接利用
- 监测异常SAML请求
- 关注
/var/log/ns.log中异常的AuthnRequest解析日志 - 监测来自单个IP的频繁
/saml/login请求
- 网络层防护
- 如条件允许,在边界防火墙对
/saml/login端点实施速率限制 - 监控来自可信出口IP的异常出站流量
七、总结
CVE-2026-8451再一次证明:Citrix NetScaler的内存管理问题不是个案,是一个系统性的顽疾。从2023年CitrixBleed算起,三年三个主要版本,内存越读/泄露漏洞层出不穷。
对于防御者:
- 立即打补丁,特别是暴露在互联网的VPN网关设备
- 检查是否配置SAML IDP,未配置的暂时规避风险
- 关注CVE-2026-13474等其他6个同批漏洞
对于攻击者:
- 几个字节的越读听起来不起眼,但如果能稳定泄露进程指针,配合其他漏洞,完整的RCE利用链不是梦
- watchTowr的工具已经开源,有NetScaler目标的可以动手测试
安全,从来都是攻防两端的速度竞赛。
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。














暂无评论内容