CVE-2025-58644
Executive Summary
CVE-2025-58644 is a critical deserialization of untrusted data vulnerability in the WordPress plugin "LTL Freight Quotes - TQL Edition" by Enituretechnology. This flaw allows an unauthenticated attacker to perform object injection via crafted serialized data, potentially leading to remote code execution (RCE), data exfiltration, or full site compromise. The vulnerability affects all versions up to and including 1.2.6. As of this report, no official patch is available, and no public proof-of-concept (PoC) or exploit code has been released. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the severity (CVSS 7.2) demands immediate attention.
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 resides in a WordPress plugin distributed via the official WordPress plugin repository. Users who installed the plugin from the WordPress dashboard or via direct download are affected. No package manager (NPM, PyPI, Go, Ruby) is involved. The supply chain risk is moderate due to the lack of a patch and the plugin's integration with freight quoting services, which may process sensitive business data.
CVSS Breakdown & Threat Level
- CVSS Score: 7.2 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: High
- Integrity Impact: High
- Availability Impact: High
Threat Level: High. The vulnerability is remotely exploitable without authentication, and successful exploitation can lead to complete compromise of the WordPress instance.
Deep Dive & Mechanics
The vulnerability stems from the insecure use of PHP's unserialize() function on user-supplied input within the plugin's code. The plugin likely processes serialized data from HTTP requests (e.g., POST parameters, cookies, or API calls) without proper validation or sanitization. When an attacker crafts a malicious serialized object, PHP's deserialization mechanism can instantiate arbitrary classes and trigger magic methods like __wakeup(), __destruct(), or __toString(). This can lead to:
- Object Injection: The attacker can inject arbitrary PHP objects, potentially exploiting gadget chains in the plugin or WordPress core to execute code.
- Remote Code Execution (RCE): By chaining with known gadget chains (e.g., from WordPress or common libraries), the attacker can execute system commands.
- Data Manipulation: The attacker may modify database entries, inject malicious content, or exfiltrate sensitive data.
The vulnerable code likely resembles:
$data = unserialize($_POST['some_field']);
Without proper checks (e.g., is_serialized() validation, allowed classes whitelist, or use of JSON instead), this is a classic deserialization vulnerability.
Vulnerable vs. Patched Code
Vulnerable Code (<= 1.2.6):
// Example of vulnerable code in the plugin
$input = $_POST['ltl_freight_data'];
$data = unserialize($input);
// Process $data...
Patched Code (Hypothetical):
// Secure alternative using JSON
$input = $_POST['ltl_freight_data'];
$data = json_decode($input, true);
if (json_last_error() !== JSON_ERROR_NONE) {
// Handle error
}
// Process $data...
Or with allowed classes whitelist:
$input = $_POST['ltl_freight_data'];
$allowed_classes = ['MySafeClass', 'AnotherSafeClass'];
$data = unserialize($input, ['allowed_classes' => $allowed_classes]);
Since no official patch exists, users must implement mitigations manually.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Environment:
- WordPress 6.x with LTL Freight Quotes - TQL Edition <= 1.2.6 installed.
- PHP 7.4+ with
allow_url_include = Off(default). - Attacker machine with Python/Go for crafting payloads.
Exploitation Steps:
- Identify the vulnerable endpoint (e.g.,
/wp-admin/admin-ajax.phpor a custom REST route). - Craft a malicious serialized payload using a known PHP gadget chain (e.g., from WordPress or Guzzle).
- Send the payload via POST request:
curl -X POST http://target/wp-admin/admin-ajax.php \
-d "action=ltl_freight_process&data=O:14:\"WP_HTML_Token\":2:{s:5:\"token\";s:4:\"test\";s:6:\"length\";i:1;}"
- Monitor for code execution (e.g., via out-of-band DNS or file write).
Example Payload (Conceptual):
// PHP serialized object for RCE via gadget chain
O:10:"MyGadget":1:{s:4:"cmd";s:6:"id > /tmp/pwned";}
Blue Team (Defensive)
Detection:
- Monitor for unusual serialized data in HTTP requests (e.g.,
O:,a:,s:patterns). - Use WAF rules to block requests containing
unserializeor serialized objects. - Enable PHP
disable_classesanddisable_functionsto limit gadget chains.
Hunting:
- Search logs for
unserialize()calls with user input. - Check for unexpected file writes in
/tmp/or web root. - Monitor outbound connections from the WordPress server.
Indicators of Compromise (IOCs)
- Network:
- HTTP requests with serialized PHP objects in POST data (e.g.,
O:,a:,s:). - Outbound connections to attacker-controlled IPs/domains.
- HTTP requests with serialized PHP objects in POST data (e.g.,
- File System:
- Unexpected files in
/tmp/,/var/www/html/wp-content/, or plugin directories. - Modified
.phpfiles with eval or system calls.
- Unexpected files in
- Process:
- PHP processes executing shell commands (e.g.,
id,whoami,curl).
- PHP processes executing shell commands (e.g.,
- Logs:
- PHP error logs showing
unserialize()errors or__wakeup()calls. - Web server logs with suspicious POST parameters.
- PHP error logs showing
Detection Engineering
YARA Rule
rule CVE_2025_58644_Deserialization {
meta:
description = "Detects serialized PHP objects in HTTP requests targeting LTL Freight Quotes plugin"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-58644"
strings:
$serialized = /O:\d+:"[^"]+":\d+:\{/
$plugin_ref = /ltl-freight-quotes-tql-edition/i
condition:
$serialized and $plugin_ref
}
Sigma Rule
title: CVE-2025-58644 - Deserialization Attempt on LTL Freight Quotes Plugin
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP POST requests containing serialized PHP objects targeting the vulnerable plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'ltl-freight-quotes-tql-edition'
cs-request-body|re: 'O:\d+:"[^"]+":\d+:\{'
condition: selection
falsepositives:
- Legitimate plugin functionality using serialization (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-58644 - LTL Freight Quotes Deserialization Attempt"; flow:to_server; content:"POST"; http_method; content:"ltl-freight-quotes-tql-edition"; http_uri; pcre:"/O:\d+:\"[^\"]+\":\d+:\{/"; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block serialized PHP objects in POST data.
- Apply virtual patching via mod_security or similar:
SecRule REQUEST_BODY "@rx O:\d+:\"[^\"]+\":\d+:\{" \
"id:1000001,phase:2,deny,status:403,msg:'CVE-2025-58644 Deserialization Attempt'"
Long-term Fix:
- Replace
unserialize()withjson_decode()in the plugin code. - Use
is_serialized()with strict validation if serialization is required. - Implement allowed classes whitelist in
unserialize()calls.
Monitoring:
- Enable detailed logging for all POST requests to plugin endpoints.
- Set up alerts for serialized data patterns in logs.
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.