Emissary CVE-2026-54442
MEDIUMAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain privileged config access to nav links
-
DeliveryInject protocol-relative URL (//169.254.169.254)
-
ExploitAuthenticated user loads navigation bar
-
ExecutionVictim clicks bypassed link
-
PersistBrowser reaches attacker host or metadata endpoint
-
ImpactSession or IAM credentials exfiltrated
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the ability to populate an emissary navigation-link value (the navButtons/navItems map consumed by NavAction) with an attacker-chosen string whose value matches |
| Impact | This is a CVSS 4.8 (Medium) issue and the severity signals are consistent with a lower-tier priority rather than an emergency. The CVSS vector CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N is network-reachable but gated by two strong limiters: PR:H (the flaw lives in navigation-link configuration, which an attacker must be able to populate) and UI:R (a victim must click the rendered link). No EPSS score and no CISA KEV entry were supplied, and the vuln.today decision label is 'this_month' - not 'act_now' or 'emergency' - so none of the decision signals indicate active or imminent widespread exploitation. The supplied PoC is a Python script that only re-implements and tests the regex |
| Exploit ScenarioDerived | An actor able to set an emissary navigation-link value configures an entry to a protocol-relative URL such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Emissary's navigation-link filter in NavAction.java can be bypassed, so a crafted nav entry can still drive users to an attacker-controlled host (open redirect) or make the Emissary server request internal resources such as the cloud instance metadata endpoint (SSRF). The problem is an incomplete fix: the added pattern ^(https?:/)?/.* accepts protocol-relative strings like //evil.com/..., //169.254.169.254/latest/meta-data/, and single-slash scheme forms such as http:/evil.com, while blocking javascript:, ftp: and data: URIs. Scored CVSS 4.8 (Medium) with a vector requiring high privileges (PR:H) and victim interaction (UI:R), the issue is not in CISA KEV and no confirmed working exploit is known, although the advisory publishes a PoC script demonstrating the regex bypass; package metadata lists the fixed release as 8.51.0.
RemediationAI
Vendor-released patch: 8.51.0, per package metadata (the advisories instead list >= e2078417464b, the commit at https://github.com/NationalSecurityAgency/emissary/commit/e2078417464b9004620dde28dcbca2f73ea06c13); upgrade to the fixed release and verify the navigation filter rejects protocol-relative (//evil.com, //169.254.169.254/...), single-slash (http:/evil.com, https:/evil.com), triple-slash and backslash variants rather than only blocking javascript:, ftp: and data:. The advisory's suggested remediation is to replace the regex with java.net.URI parsing plus explicit scheme and host allowlisting, since regex-only checks are what produced this incomplete fix. Until the update is applied, because populating nav-link values requires high-privileged configuration access (PR:H), keep the navButtons/navItems configuration writable only by trusted administrators and audit existing entries for leading //, ///, \ or single-slash scheme forms; the latter reduces exposure but does not remove the SSRF path, and any tightening of link configuration will block legitimate externally hosted navigation targets. For deployments where the //169.254.169.254/latest/meta-data/ vector matters, enforce IMDSv2-only access so the metadata service is not reachable by unauthenticated request-forgery traffic, accepting the migration cost for older instance tooling.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in maven
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Emissary is a Java (Maven, gov.nsa.emissary:emissary) analysis framework whose web UI builds a navigation bar from a navButtons/navItems map rendered through the nav.mustache template; the pre-fix code passed link values straight into the href attribute with no validation. The remediation commit e2078417464b added a VALID_LINK pattern in NavAction.java plus a filter in getNavItems(), and added rel="noopener noreferrer" to the rendered anchors. Root cause class is CWE-918 (Server-Side Request Forgery), compounded by an open-redirect pattern: the optional group (https?:/)? means the pattern degenerates to //.* when the scheme group is absent, so protocol-relative URLs match; the group also happily captures a single slash after the scheme (http:/, https:/), which browsers normalize into a full http:// URL. Because these values are rendered as links and consumed by the navigation flow, a privileged configuration-level actor can point navigation at an arbitrary host, and in AWS/GCP deployments the //169.254.169.254/latest/meta-data/ form can reach instance metadata and expose IAM credentials. Views also note the pre-fix build accepted any URL, so the filter is a narrowing control rather than a complete one.
Know when Java gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
Nav links come from configuration an attacker must control, so PR:H; the victim must click the rendered link, so UI:R; the redirect crosses into the attacker/browser context, so S:C; limited confidentiality/integrity from session or metadata exposure and no availability impact.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
DescriptionGitHub Advisory
Summary
The URL validation regex ^(https?:/)?/.* added to emissary's NavAction.java allows protocol-relative URLs (//evil.com/...) and single-slash scheme variants (http:/evil.com) to bypass validation, enabling SSRF and open redirect attacks.
Affected Package
- Ecosystem: Maven
- Package: NationalSecurityAgency/emissary
- Affected versions: < e2078417464b
- Patched versions: >= e2078417464b
Severity
Medium
CWE
CWE-918 - Server-Side Request Forgery (SSRF)
Details
The fix in NavAction.java (line 47) introduces a VALID_LINK pattern:
Pattern.compile("^(https?:/)?/.*")This regex is intended to restrict navigation links to relative paths and HTTP/HTTPS URLs. However, it has multiple bypass vectors.
Protocol-relative URLs (//evil.com/...): The group (https?:/)? is optional, so the pattern reduces to //.* when the group is absent. This matches //evil.com/steal?c=SESSION, which browsers resolve to the current page's protocol plus the attacker's host.
Single-slash scheme (http:/evil.com): The regex group captures http:/ as a valid match, and browsers normalize http:/evil.com to http://evil.com, creating an open redirect to the attacker's server.
Protocol-relative to cloud metadata (//169.254.169.254/...): This enables SSRF to cloud instance metadata endpoints, which is particularly dangerous in AWS/GCP environments where IAM credentials can be retrieved.
The pre-fix code had no validation at all, accepting any URL. The fix blocks javascript:, ftp:, and data: URIs, but the protocol-relative and single-slash bypasses remain exploitable.
PoC
"""
CVE-2026-35571 - NationalSecurityAgency/emissary SSRF via NavAction
The fix in commit e2078417464b adds URL scheme validation using:
Pattern.compile("^(https?:/)?/.*")
This allows protocol-relative URLs (//evil.com) and single-slash variants
(http:/evil.com) to bypass the validation.
Tested against: emissary@0d4dc56 (pre-fix) and patch e207841
Extracted from: src/main/java/emissary/server/mvc/NavAction.java:47
"""
import re
import sys
FIXED_PATTERN = re.compile(r"^(https?:/)?/.*")
def vulnerable_accepts(link: str) -> bool:
"""Pre-fix behaviour: no validation, everything passes."""
return True
def fixed_accepts(link: str) -> bool:
"""Post-fix behaviour: must match VALID_LINK pattern."""
return bool(FIXED_PATTERN.match(link))
TEST_VECTORS = [
("javascript: XSS payload",
"javascript:alert(document.cookie)", True),
("ftp: scheme",
"ftp://evil.com/exfil", True),
("data: URI",
"data:text/html,<script>alert(1)</script>", True),
("Relative path",
"/path/to/resource", False),
("HTTP URL",
"http://trusted.internal:8080/api", False),
("HTTPS URL",
"https://trusted.internal/api", False),
("Protocol-relative URL to attacker host (//evil.com)",
"//evil.com/steal?c=SESSION", True),
("Protocol-relative with embedded credentials",
"//user:pass@evil.com/path", True),
("Protocol-relative to cloud metadata (//169.254.169.254)",
"//169.254.169.254/latest/meta-data/", True),
("Backslash trick (\\\\evil.com)",
"\\\\evil.com/path", True),
("Tab in scheme (java\\tscript:...)",
"java\tscript:alert(1)", True),
("Path starting with attacker-like host (/evil.com)",
"/evil.com", False),
("Triple slash (///evil.com)",
"///evil.com/etc/passwd", True),
("http:/ single-slash to attacker host",
"http:/evil.com/steal", True),
("https:/ single-slash to attacker host",
"https:/evil.com/steal", True),
("URL-encoded javascript scheme (%6a...)",
"%6aavascript:alert(1)", True),
("CRLF injection in path",
"/legit\r\nLocation: http://evil.com", True),
]
def main():
print("=" * 72)
print("CVE-2026-35571 -- Emissary NavAction SSRF / Open-Redirect PoC")
print("Pattern under test: ^(https?:/)?/.*")
print("=" * 72)
print()
bypasses_found = []
results_table = []
for desc, url, should_block in TEST_VECTORS:
vuln_result = vulnerable_accepts(url)
fixed_result = fixed_accepts(url)
if should_block and fixed_result:
status = "BYPASS"
bypasses_found.append((desc, url))
elif should_block and not fixed_result:
status = "BLOCKED (good)"
elif not should_block and fixed_result:
status = "ALLOWED (good)"
elif not should_block and not fixed_result:
status = "FALSE-POS"
else:
status = "UNKNOWN"
results_table.append((desc, url, vuln_result, fixed_result, status))
for desc, url, vuln, fixed, status in results_table:
display_url = repr(url) if len(url) > 50 else url
print(f"[{status:>15}] {desc}")
print(f"{'':>17} URL: {display_url}")
print(f"{'':>17} pre-fix={vuln} post-fix={fixed}")
print()
print("=" * 72)
print(f"Total vectors tested : {len(TEST_VECTORS)}")
print(f"Bypasses found : {len(bypasses_found)}")
print()
if bypasses_found:
print("VULNERABILITY CONFIRMED -- the following vectors bypass the fix:")
print()
for desc, url in bypasses_found:
print(f" - {desc}")
print(f" URL: {repr(url)}")
print()
print("Key finding: The regex ^(https?:/)?/.* allows protocol-relative")
print("URLs (//evil.com/...) because the optional group (https?:/) can be")
print("absent, leaving //.* which matches //attacker.com. This enables")
print("SSRF to arbitrary external hosts via navigation links.")
print()
print("Additionally, http:/evil.com and https:/evil.com match the regex")
print("(group 1 captures 'http:/' or 'https:/') and browsers normalise")
print("these to http://evil.com, enabling open redirect / SSRF.")
sys.exit(0)
else:
print("No bypasses found -- fix appears complete.")
sys.exit(1)
if __name__ == "__main__":
main()
Steps to reproduce:
- Run
python3 poc.py - Observe that protocol-relative and single-slash URLs bypass the regex
Expected output:
VULNERABILITY CONFIRMED
Protocol-relative URLs (//evil.com/) and single-slash variants (http:/evil.com) bypass the regex validation.Impact
An attacker can craft navigation links that bypass URL validation to redirect users to attacker-controlled servers (open redirect) or make the emissary server issue requests to internal services (SSRF). The //169.254.169.254/latest/meta-data/ bypass is particularly dangerous in cloud environments, enabling retrieval of IAM credentials.
Suggested Remediation
Replace the regex with one that explicitly rejects protocol-relative URLs. Alternatively, parse the URL with java.net.URI and validate the scheme and host against an allowlist rather than relying on regex.
References
- Incomplete fix commit: https://github.com/NationalSecurityAgency/emissary/commit/e2078417464b9004620dde28dcbca2f73ea06c13
- Original CVE: CVE-2026-35571
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Affected Products (CPE)GitHub Advisory
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
GHSA-c6q7-wqw2-h65w
NVD
CVE.org
Exploit-DB