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

CVE-2025-9795

CVE-2025-9795 Arbitrary File Upload in Xujeff
📅 PUBLISHED: 2025-09-01 21:02 UTC 🔄 UPDATED: 2026-09-23 20:32 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.23%
👁️
0.23% probability
5.7× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1548
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
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.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-9795 is an unrestricted file upload vulnerability in the xujeff tianti (天梯) application, affecting versions up to 2.3. The flaw resides in the ajaxUploadFile function within UploadController.java, allowing an attacker to upload arbitrary files without proper validation. This can lead to remote code execution, data exfiltration, or full server compromise. The exploit has been publicly disclosed, increasing the risk of active exploitation. No official patch is currently available.

⚡ 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

CVSS Breakdown & Threat Level

  • CVSS Score: 6.3 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: None
  • User Interaction: None
  • Scope: Unchanged
  • Confidentiality Impact: Low
  • Integrity Impact: Low
  • Availability Impact: Low

The medium severity reflects the ease of exploitation and potential for significant impact, though the exact impact depends on the server configuration and uploaded file type.

Deep Dive & Mechanics

The vulnerability is a classic unrestricted file upload (CWE-434). The ajaxUploadFile method in UploadController.java accepts a file via the upfile parameter and saves it to the server without checking the file type, content, or size. An attacker can upload a malicious script (e.g., JSP, PHP, or shell) and then access it via the web server to execute arbitrary commands.

The lack of validation means any file extension is accepted, and the file is stored in a predictable location (likely under the web root). This allows direct access and execution.

Vulnerable vs. Patched Code

Vulnerable Code (tianti <= 2.3):

// src/main/java/com/jeff/tianti/controller/UploadController.java
@PostMapping("/ajaxUploadFile")
public String ajaxUploadFile(@RequestParam("upfile") MultipartFile file) {
    String fileName = file.getOriginalFilename();
    String savePath = "/uploads/" + fileName;
    file.transferTo(new File(savePath));
    return "success";
}

Patched Code (Hypothetical):

// Patched version would include validation
@PostMapping("/ajaxUploadFile")
public String ajaxUploadFile(@RequestParam("upfile") MultipartFile file) {
    String fileName = file.getOriginalFilename();
    // Validate file extension
    String extension = fileName.substring(fileName.lastIndexOf("."));
    if (!allowedExtensions.contains(extension)) {
        return "error: invalid file type";
    }
    // Sanitize filename
    String safeName = UUID.randomUUID().toString() + extension;
    String savePath = "/uploads/" + safeName;
    file.transferTo(new File(savePath));
    return "success";
}

Exploitation & Lab Setup

Red Team

  1. Setup: Deploy a vulnerable instance of tianti (version 2.3) on a local server.
  2. Craft Payload: Create a JSP webshell (e.g., shell.jsp) with command execution capabilities.
  3. Upload: Send a POST request to /ajaxUploadFile with the file as upfile.
    curl -F "upfile=@shell.jsp" http://target/tianti/ajaxUploadFile
    
  4. Execute: Access the uploaded file at http://target/tianti/uploads/shell.jsp and execute commands.

Blue Team

  1. Monitor: Watch for unusual file uploads, especially with executable extensions (JSP, PHP, ASP, etc.).
  2. Block: Implement WAF rules to block uploads of script files.
  3. Audit: Check server logs for POST requests to /ajaxUploadFile with suspicious file names.

Indicators of Compromise (IOCs)

  • File Paths: /uploads/*.jsp, /uploads/*.php, /uploads/*.asp
  • Network: POST requests to /ajaxUploadFile with Content-Type: multipart/form-data
  • Logs: Entries showing file uploads with non-image extensions
  • Processes: Unexpected web shell processes (e.g., cmd.exe, /bin/sh)

Detection Engineering

YARA Rule

rule CVE_2025_9795_Upload {
    meta:
        description = "Detects malicious file uploads targeting CVE-2025-9795"
        author = "Valters IT"
        date = "2025-04-10"
    strings:
        $s1 = "ajaxUploadFile" ascii
        $s2 = "upfile" ascii
        $s3 = ".jsp" ascii nocase
        $s4 = ".php" ascii nocase
    condition:
        all of ($s1, $s2) and any of ($s3, $s4)
}

Sigma Rule

title: CVE-2025-9795 Unrestricted File Upload
id: cve-2025-9795-upload
status: experimental
description: Detects attempts to exploit unrestricted file upload in tianti
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query: '/ajaxUploadFile'
        cs-uri-extension: '.jsp' or '.php' or '.asp'
    condition: selection
falsepositives:
    - Legitimate file uploads (if any)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-9795 Unrestricted File Upload"; flow:to_server; content:"POST"; http_method; content:"/ajaxUploadFile"; http_uri; content:"upfile"; http_client_body; fileext:".jsp" or fileext:".php" or fileext:".asp"; sid:1000001; rev:1;)

Remediation & Mitigation

  • Immediate: Disable the upload functionality if not required. Restrict access to the /uploads directory via web server configuration (e.g., deny execution of scripts).
  • Short-term: Implement file type validation (whitelist allowed extensions), rename uploaded files to random names, and store them outside the web root.
  • Long-term: Apply a vendor patch when available. Consider migrating to a supported alternative.

Valters IT
Securing Digital Frontiers

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-9795/ · 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.