CVE-2025-12101
Cross-Site Scripting (XSS)
Record summary
CVE-2025-12101 has a selected CVSS score of 5.9 (medium); EIP currently links 3 repository PoCs and 1 Nuclei template.
Description
Cross-Site Scripting (XSS) in NetScaler ADC and NetScaler Gateway when the appliance is configured as a Gateway (VPN virtual server, ICA Proxy, CVPN, RDP Proxy) OR AAA virtual server
Exploitation context
Affected products and versions
2| Product | Source | Version range | Status |
|---|---|---|---|
Default status: unaffected | CVE List | 14.1 to < 56.73 | affected |
| 13.1 to < 60.32 | affected | ||
| 13.1-FIPS and NDcPP to < 37.250 | affected | ||
| 12.1-FIPS and NDcPP to < 55.333 | affected | ||
GatewayBrowse NetScaler / GatewayDefault status: unaffected | CVE List | 14.1 to < 56.73 | affected |
| 13.1 to < 60.32 | affected | ||
| 13.1-FIPS and NDcPP to < 37.250 | affected | ||
| 12.1-FIPS and NDcPP to < 55.333 | affected |
Proofs of concept
3Repository PoCs
GitHub6h4ack/CVE-2025-12101-checkerRepository PoCby 6h4ackStars: 5Scanner2 files
Analysis
Technical assessment
A Python script that sends a crafted HTTP POST request to the /cgi/logout endpoint of a target NetScaler ADC/Gateway and checks if a known XSS payload is reflected in the response. It does not exploit the vulnerability to execute code or exfiltrate data; it only detects the presence of the reflected payload.
Backdoor review
No backdoor observed in reviewed code
The supplied evidence consists of a README and a single Python script (cve-2025-12101.py) that implements a PoC checker for CVE-2025-12101. The script sends a hardcoded HTTP POST request with a known XSS payload to a user-supplied target and inspects the response for reflection. No backdoor, trojan, or deceptive behavior is observed. The script performs only the advertised vulnerability check and does not exfiltrate data, establish persistence, download additional payloads, or contact any attacker-controlled infrastructure.
Classification basis and observed behavior
Classification basis
The script's primary operation is to send a probe and check for a reflected payload in the response, which is the definition of a scanner. It does not attempt to execute arbitrary JavaScript in a browser context, steal cookies, or perform any post-exploitation action. The README explicitly describes it as a 'checker' and 'PoC to check ... instances'.
README.md:3cve-2025-12101.py:122Requirements
- Target must be a NetScaler ADC or Gateway configured as a Gateway or AAA virtual server with the vulnerable /cgi/logout endpoint exposed.
README.md:11-13 - Network connectivity to the target on the specified port (default 443 for HTTPS).
cve-2025-12101.py:100-101
Observed behavior
- Sends a raw TLS POST request to /cgi/logout with a hardcoded URL-encoded SAMLResponse and a RelayState parameter containing a <script>alert(1)</script> payload.
cve-2025-12101.py:25-32cve-2025-12101.py:64-79 - Receives the HTTP response and checks if the payload string '<script>alert(1)</script>' is present in the response body.
cve-2025-12101.py:111-122 - Prints a 'VULNERABLE' message if the payload is reflected and the HTTP status code is 200 or 302; otherwise prints a 'No XSS behaviour detected' message.
cve-2025-12101.py:127-136
Behaviors behind the backdoor verdict
Observables
- Hardcoded Payload
- Payload withheldThe script uses a fixed, URL-encoded SAMLResponse and RelayState containing a benign XSS test payload (<script>alert(1)</script>). This matches the described CVE-2025-12101 check and does not indicate malicious intent.
cve-2025-12101.py:25-35 - Network Connection
- Payload withheldThe script connects only to the target specified by the user via the -u argument. It does not make any other network connections.
cve-2025-12101.py:64-79cve-2025-12101.py:95-113 - User Agent
- Payload withheldThe User-Agent header is a static string identifying the tool. It does not contain any encoded data or beaconing information.
cve-2025-12101.py:71
What the analysis did not establish
- The evidence does not include any binary or compiled files; all provided files are readable text.
- The analysis is based solely on the static source code and documentation; the code was not executed, and its behavior against a live target is not verified.
- Review is based solely on the supplied text files (README.md and cve-2025-12101.py). No binary files were present or analyzed.
- The script's runtime behavior depends on the Python standard library; no supply-chain or dependency analysis was performed beyond the provided source code.
This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
GitHubboneys/CVE-2025-12101-Scanner-PoCRepository PoCby boneysStars: 0Scanner5 files
Analysis
Technical assessment
Multi-threaded Python scanner for CVE-2025-12101 that sends a crafted SAML logout request with a unique XSS payload in the RelayState parameter and checks if the payload is reflected in the response, indicating a reflected XSS vulnerability in Citrix NetScaler ADC/Gateway.
Backdoor review
No backdoor observed in reviewed code
The artifact is a Python-based scanner for CVE-2025-12101, a reflected XSS vulnerability in Citrix NetScaler. The code sends a crafted SAML logout request with a unique marker and checks for its reflection. No backdoor, deceptive payload, or concealed harmful behavior was observed in the reviewed text files.
Classification basis and observed behavior
Classification basis
The code sends a crafted request and checks for reflection of a unique marker to determine if a target is vulnerable. It does not deliver a payload to a victim's browser, exfiltrate data, or establish a foothold; it only detects and reports the presence of the vulnerability. This matches the definition of a scanner.
CVE_2025-12101.py:3CVE_2025-12101.py:164-173README.md:1README.md:6Requirements
- Target must be a NetScaler ADC or Gateway configured as a Gateway (VPN, ICA Proxy, CVPN, RDP Proxy) or AAA virtual server with the /cgi/logout endpoint accessible.
README.md:10README.md:87-89
Observed behavior
- Sends an HTTP POST request to /cgi/logout with a base64-encoded RelayState containing a CRLF injection and a unique XSS marker (<svg/onload=alert('XSSTEST...')>).
CVE_2025-12101.py:100-110CVE_2025-12101.py:135-153 - Checks if the unique marker is reflected in the response body to determine vulnerability.
CVE_2025-12101.py:164-173 - Outputs results to console and a CSV file, reporting vulnerable targets, status codes, and response details.
CVE_2025-12101.py:350-359CVE_2025-12101.py:397-398
Behaviors behind the backdoor verdict
Observables
- Network Request
- Payload withheldThe scanner sends a POST request to the target's /cgi/logout endpoint to test for XSS reflection.
CVE_2025-12101.py:135-153 - Payload
- Payload withheldThe payload is constructed to test for reflected XSS by injecting a unique marker into the RelayState parameter.
CVE_2025-12101.py:100-104
What the analysis did not establish
- Two files (LICENSE and .gitignore) are reported in file metadata but not included in the text evidence; they are unlikely to contain scanner logic.
- The evidence does not include execution output or verification that the scanner works as described.
- Two files (LICENSE and .gitignore) were omitted from the text evidence; their content was not reviewed.
- The analysis is limited to static review of the provided text; no dynamic execution or network traffic analysis was performed.
This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
GitHubrascyber/Sternsleuth-Citrix-NetScaler-RXSSRepository PoCby rascyberStars: 0Scanner10 files
Analysis
Technical assessment
A Python-based scanner for CVE-2025-12101 that sends a crafted HTTP POST request to /cgi/logout and checks if a known XSS payload is reflected in the response, reporting vulnerable targets without exploiting the vulnerability.
Backdoor review
No backdoor observed in reviewed code
The repository contains a Python scanner for CVE-2025-12101 (Citrix NetScaler RXSS). All reviewed source files implement only the advertised scanning functionality: sending a crafted HTTP POST request and checking for reflection of a known XSS payload. No backdoor, concealed executable behavior, or operator-directed harm is observed.
Classification basis and observed behavior
Classification basis
The artifact is a scanner because it sends a probe to detect reflection of a known XSS payload and reports vulnerability status without performing any action that exploits the vulnerability (e.g., no session hijacking, cookie theft, or payload execution in a victim's browser). The README explicitly describes it as a 'scanner' and 'RXSS reflection check'.
README.md:3src/cve_2025_12101_scanner/scanner.py:156-157Requirements
- Target must be a NetScaler ADC or Gateway configured as a Gateway (VPN, ICA Proxy, CVPN, RDP Proxy) or AAA virtual server.
README.md:3 - Target must be reachable over HTTPS (default port 443) or HTTP (port 80).
src/cve_2025_12101_scanner/utils.py:30-43
Observed behavior
- Sends a raw HTTP POST request to /cgi/logout with a hardcoded SAMLResponse and RelayState body containing the payload <script>alert(1)</script>.
src/cve_2025_12101_scanner/scanner.py:20-27src/cve_2025_12101_scanner/scanner.py:65 - Checks if the response contains the string <script>alert(1)</script> and if the HTTP status code is 200 or 302, marking the target as vulnerable.
src/cve_2025_12101_scanner/scanner.py:156-157 - Outputs results to console, optionally to a text file of vulnerable targets, and optionally to a JSON file.
src/cve_2025_12101_scanner/cli.py:94-104
Behaviors behind the backdoor verdict
Observables
- Hardcoded Payload
- Payload withheldThe scanner sends a fixed POST body to /cgi/logout to test for XSS reflection, consistent with the stated CVE-2025-12101 vulnerability.
src/cve_2025_12101_scanner/scanner.py:20-27 - Network Connection
- Payload withheldThe scanner connects to the target host and port specified by the user, sends the hardcoded payload, and checks the response. This is the core of the advertised scanning behavior.
src/cve_2025_12101_scanner/scanner.py:65-70src/cve_2025_12101_scanner/scanner.py:110-112src/cve_2025_12101_scanner/scanner.py:131-133
What the analysis did not establish
- Only 5 of 10 text files in the repository are included; the remaining 5 files (e.g., pyproject.toml, setup.cfg) are omitted from the evidence.
- The evidence does not include any binary files, but the packet reports 5 unclassified files totaling 2422 bytes that are not analyzed.
- The scanner's detection logic relies solely on string matching of a specific payload in the response; false positives or negatives may occur if the server reflects the payload in a non-executable context or encodes it differently.
- Five additional files (unclassified, 2422 bytes) were present in the repository but not included in the text review; their content is unknown.
- The review does not verify that the scanner correctly identifies the vulnerability or that it is safe to run against production systems.
This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
Nuclei templates
1ProjectDiscoveryMEDIUMCitrix NetScaler ADC & Gateway - Reflected XSS / Open Redirect
Cross-Site Scripting (XSS) in NetScaler ADC and NetScaler Gateway when the appliance is configured as a Gateway (VPN virtual server, ICA Proxy, CVPN, RDP Proxy) OR AAA virtual server.
Impact
Attackers can execute JavaScript in victim browsers or redirect users to malicious sites through crafted SAML responses in Citrix NetScaler Gateway configurations.
Remediation
Apply the latest Citrix security patches that properly sanitize SAML response handling in NetScaler ADC and Gateway.
Source: ProjectDiscovery