☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Cedcommerce logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N 🐛 CWE-862
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-31773

CVE-2025-31773 Missing Authorization in Cedcommerce
📅 PUBLISHED: 2025-04-01 15:16 UTC 🔄 UPDATED: 2026-08-12 14:52 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.59%
👁️
0.59% probability
14.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Estonia License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 5.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
5.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-31773 is a Missing Authorization vulnerability in the Cedcommerce Ship Per Product WordPress plugin, affecting versions up to and including 2.1.0. This flaw allows unauthenticated attackers to access functionality that should be constrained by Access Control Lists (ACLs), potentially exposing sensitive shipping configuration data or enabling unauthorized actions within the WordPress ecosystem. The vulnerability has a CVSS score of 5.3 (Medium) and a low EPSS probability of 0.0%, indicating it is not currently being actively exploited in the wild. No public proof-of-concept (PoC) code or patch is available at this time.

⚡ 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 resides in a WordPress plugin distributed via the official WordPress plugin repository and third-party marketplaces. As a WordPress ecosystem component, it is not managed through traditional package managers like NPM or PyPI. However, the risk to the supply chain is significant: compromised sites can lead to data exfiltration, defacement, or further lateral movement within hosting environments. Administrators should treat this as a high-priority update once a patch is released.

CVSS Breakdown & Threat Level

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

The threat level is Medium due to the low complexity and no required privileges, but the impact is limited to low confidentiality loss. The lack of a public exploit and low EPSS score reduces immediate risk, but the absence of a patch increases long-term exposure.

Deep Dive & Mechanics

The vulnerability stems from improper authorization checks in the ship-per-product plugin's AJAX handlers or REST API endpoints. The plugin likely exposes functions for managing shipping rules, rates, or product associations without verifying user capabilities (e.g., manage_options or edit_posts). An unauthenticated attacker can send crafted HTTP requests to these endpoints, bypassing WordPress's built-in capability checks.

Root Cause: The plugin fails to call current_user_can() or similar authorization functions before executing sensitive operations. This is a classic CWE-862 (Missing Authorization) flaw.

Attack Vector: The attacker sends a GET or POST request to a vulnerable endpoint (e.g., /wp-admin/admin-ajax.php?action=ship_per_product_get_rates) without any authentication token. The server processes the request and returns data or performs actions intended only for administrators.

Impact: An attacker could:

  • Retrieve shipping configuration data (e.g., rates, zones, product mappings).
  • Modify shipping rules if the endpoint allows writes.
  • Potentially escalate to further attacks if the plugin stores sensitive API keys or credentials.

Vulnerable vs. Patched Code

Since no patch is available, we can only hypothesize the fix. The vulnerable code likely resembles:

// Vulnerable: No capability check
add_action('wp_ajax_nopriv_ship_per_product_get_rates', 'get_rates_callback');
function get_rates_callback() {
    // Process request without checking user permissions
    $rates = get_option('ship_per_product_rates');
    wp_send_json($rates);
}

A patched version would include:

// Patched: Added capability check
add_action('wp_ajax_nopriv_ship_per_product_get_rates', 'get_rates_callback');
function get_rates_callback() {
    if (!current_user_can('manage_options')) {
        wp_die('Unauthorized', 403);
    }
    $rates = get_option('ship_per_product_rates');
    wp_send_json($rates);
}

The fix ensures only users with the manage_options capability (typically administrators) can access the endpoint.

Exploitation & Lab Setup

Red Team

Prerequisites: A WordPress site with the Ship Per Product plugin version <= 2.1.0 installed and active.

Exploitation Steps:

  1. Identify Vulnerable Endpoints: Use a tool like Burp Suite or curl to enumerate AJAX actions. Common patterns include ship_per_product_* or spp_*.

  2. Craft Request: Send an unauthenticated GET request to:

    GET /wp-admin/admin-ajax.php?action=ship_per_product_get_rates HTTP/1.1
    Host: target-site.com
    
  3. Analyze Response: If the server returns JSON data containing shipping rates or configuration, the endpoint is vulnerable.

  4. Automate with Script:

    #!/bin/bash
    TARGET="http://target-site.com"
    curl -s "$TARGET/wp-admin/admin-ajax.php?action=ship_per_product_get_rates" | jq .
    

Lab Setup:

  • Use a local WordPress instance (e.g., via Docker or XAMPP).
  • Install the vulnerable plugin version 2.1.0 from a trusted archive.
  • Ensure no authentication is required to access the admin area.

Blue Team

Detection Steps:

  1. Monitor Logs: Check web server access logs for requests to admin-ajax.php with suspicious action parameters (e.g., ship_per_product_*) from unauthenticated IPs.

  2. Honeypot Endpoints: Deploy a fake endpoint that mimics the vulnerable action and alerts on access.

  3. Network Traffic Analysis: Look for repeated GET/POST requests to /wp-admin/admin-ajax.php without a valid wpnonce or cookie.

Mitigation in Lab:

  • Immediately disable the plugin if no patch is available.
  • Implement a Web Application Firewall (WAF) rule to block requests to admin-ajax.php with action parameters matching ship_per_product_* unless authenticated.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • HTTP requests to /wp-admin/admin-ajax.php with action=ship_per_product_* parameters.
    • Unusual JSON responses containing shipping configuration data.
  • File IOCs:
    • Modified plugin files in /wp-content/plugins/ship-per-product/.
    • Unexpected entries in WordPress options table (wp_options) related to shipping.
  • Behavioral IOCs:
    • Unauthorized changes to shipping rates or zones.
    • Anonymous access to admin-ajax.php endpoints.

Detection Engineering

YARA Rule

rule CVE_2025_31773_Ship_Per_Product {
    meta:
        description = "Detects vulnerable Ship Per Product plugin files"
        author = "Valters IT"
        date = "2025-04-17"
        reference = "CVE-2025-31773"
    strings:
        $vuln_func = "wp_ajax_nopriv_ship_per_product" nocase
        $no_auth = "current_user_can" nocase
    condition:
        $vuln_func and not $no_auth
}

Sigma Rule

title: CVE-2025-31773 - Unauthenticated Access to Ship Per Product AJAX Endpoints
id: 8a9b3c2d-1e5f-4a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects unauthenticated requests to vulnerable Ship Per Product AJAX actions
author: Valters IT
date: 2025/04/17
logsource:
    category: webserver
    product: apache
    service: access
detection:
    selection:
        cs-method: 'GET'
        cs-uri-stem: '/wp-admin/admin-ajax.php'
        cs-uri-query|contains: 'action=ship_per_product_'
    condition: selection
falsepositives:
    - Legitimate admin requests (rare)
level: high

Suricata Rule

alert http any any -> $HOME_NET any (
    msg:"CVE-2025-31773 - Unauthenticated Ship Per Product AJAX Access";
    flow:to_server,established;
    content:"GET"; http_method;
    content:"/wp-admin/admin-ajax.php"; http_uri;
    content:"action=ship_per_product_"; http_uri;
    classtype:attempted-recon;
    sid:1000001;
    rev:1;
    reference:cve,2025-31773;
)

Remediation & Mitigation

Immediate Actions:

  1. Disable the Plugin: If the plugin is not critical, deactivate and delete it until a patch is released.
  2. Web Application Firewall (WAF): Block requests to admin-ajax.php with action parameters starting with ship_per_product_ unless they include a valid nonce.
  3. Access Controls: Restrict access to /wp-admin/ directory via .htaccess or IP whitelisting.

Long-Term Fix:

  • Monitor the Cedcommerce plugin page for an official patch.
  • Apply the patch immediately upon release.
  • Consider replacing the plugin with an alternative that follows secure coding practices.

Detection Hardening:

  • Enable detailed logging for admin-ajax.php requests.
  • Deploy the provided YARA, Sigma, and Suricata rules in your SIEM/IDS.

Valters IT
Securing Digital Frontiers

👁️ SHODAN DORKS (THREAT HUNTING)

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.

http.title:"Ship Per Product"
http.html:"wp-content/plugins/ship-per-product"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-31773/ · 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.