OOB内存读取:NetScaler ADC和Gateway
产品供应商
Cloud Software Group
产品描述
受影响的Citrix NetScaler ADC和Gateway组件用于认证、授权和审计(AAA)以及远程访问。
漏洞列表
在Citrix NetScaler ADC和Gateway中发现一个漏洞:
- 越界内存读取
受影响版本
- NetScaler ADC和NetScaler Gateway 14.1 低于 14.1-12.35
- NetScaler ADC和NetScaler Gateway 13.1 低于 13.1-51.15
- NetScaler ADC和NetScaler Gateway 13.0 低于 13.0-92.21
- NetScaler ADC 13.1-FIPS 低于 13.1-37.176
- NetScaler ADC 12.1-FIPS 低于 12.1-55.302
- NetScaler ADC 12.1-NDcPP 低于 12.1-55.302
NetScaler ADC和NetScaler Gateway版本12.1现已终止生命周期(EOL)且存在漏洞。
发现总结
该漏洞使未经认证的攻击者能够从配置为Gateway或AAA虚拟服务器的NetScaler设备远程获取信息。虽然与CVE-2023-4966性质相似,但此问题返回高度敏感信息的可能性要小得多。
影响
该漏洞允许攻击者从内存中恢复数据。虽然在大多数情况下不会返回有价值的信息,但在我们对Bishop Fox Cosmos客户的测试中,我们观察到先前HTTP请求的POST请求体被泄露的情况。Web应用程序使用POST请求传输潜在敏感信息(例如状态或凭据),因此这些请求数据通常应保持私有。
解决方案
按照Citrix安全公告CTX584986中指定的修复指南,尽快安装以下更新软件:
- NetScaler ADC和NetScaler Gateway 14.1-12.35及更高版本
- NetScaler ADC和NetScaler Gateway 13.1-51.15及13.1的更高版本
- NetScaler ADC和NetScaler Gateway 13.0-92.21及13.0的更高版本
- NetScaler ADC 13.1-FIPS 13.1-37.176及13.1-FIPS的更高版本
- NetScaler ADC 12.1-FIPS 12.1-55.302及12.1-FIPS的更高版本
- NetScaler ADC 12.1-NDcPP 12.1-55.302及12.1-NDcPP的更高版本
越界内存读取
NetScaler ADC和Gateway产品存在未经认证的越界内存读取漏洞,可被利用来捕获设备进程内存中的信息,包括HTTP请求体。
漏洞详情
- CVE ID:供应商已更新CVE-2023-6549以涵盖此漏洞以及原始的拒绝服务漏洞,因为它们通过相同的修复措施进行修复。
- 漏洞类型:越界读取
- 访问向量:☒ 远程, ☐ 本地, ☐ 物理, ☐ 上下文相关, ☐ 其他(如果是其他,请指定)
- 影响:☐ 代码执行, ☐ 拒绝服务, ☐ 权限提升, ☒ 信息泄露, ☐ 其他(如果是其他,请指定)
- 安全风险:☐ 严重, ☒ 高, ☐ 中等, ☐ 低
- 漏洞:CWE-125(越界读取)
Bishop Fox工作人员确定,先前版本的NetScaler ADC和Gateway产品存在未经认证的越界内存读取漏洞,并利用该漏洞捕获设备进程内存中的信息,包括HTTP请求体。
Bishop Fox工作人员确定,Gateway或AAA虚拟服务器在处理对/nf/auth/startwebview.do URI的HTTP GET请求时,对HTTP Host请求头进行不安全处理。易受攻击的函数尝试计算包含Host头的字符串长度,然后指示后续函数将该长度的字符串复制到HTTP响应消息中。然而,如果请求中提交的Host头值超过约5,394字节,C snprintf方法的不正确使用会导致长度超过源缓冲区的大小,并导致不相关的数据被复制到响应中。利用此漏洞不需要认证。
以下Python概念验证代码可用于演示对易受攻击设备的可利用性:
|
|
图1 – 概念验证利用代码
对/nf/auth/startwebview.do URI的请求由ns_aaa_start_webview_for_authv3函数处理。ns_aaa_start_webview_for_authv3函数使用snprintf函数构建XML响应,并通过调用ns_vpn_send_response函数将此响应返回给用户,如下所示:
|
|
图2 – 反编译的ns_aaa_start_webview_for_authv3函数摘录
ns_vpn_send_response函数发送HTTP响应,其中响应体和体大小作为参数提供。在上面显示的代码中,大小设置为snprintf函数的返回值。根据snprintf函数的文档,返回值是如果有足够空间时将写入的字符数。因此,如果构建的响应将超过缓冲区大小(在这种情况下为0x1800字节),ns_vpn_send_response函数将响应缓冲区末端之外的额外数据。这与CVE-2023-4966(CitrixBleed)的根本原因相同。
ns_aaa_start_webview_for_authv3函数中sprintf函数的不安全使用在本报告的不安全字符串处理发现中有更详细的讨论。
Bishop Fox工作人员分析了先前版本的易受攻击Citrix部署,并观察到披露的内存包含来自HTTP请求的数据,有时包括POST请求体的情况。例如,下面的响应包括由设备处理的另一个HTTP请求的数据,显然与Nessus漏洞扫描相关:
|
|
图3 – NetScaler设备响应披露内存内容
受影响位置
- URI:/nf/auth/startwebview.do
- 函数:/netscaler/nsppe中的ns_aaa_start_webview_for_authv3
致谢
Bishop Fox能力开发组
时间线
- 2024年1月22日:初始发现
- 2024年1月25日:与供应商联系
- 2024年2月1日:供应商确认漏洞
- 2024年5月6日:漏洞公开披露
- 2024年5月10日:供应商更新安全公告,确认CVE-2023-6549中的拒绝服务修复也解决了越界内存读取问题