Back to the CVE list
CVE-2026-54442

NationalSecurityAgency/emissary has an incomplete fix for CVE-2026-35571

CVSS score

4.8

EPSS probability

—

Risk score

0.5

Published

2 h ago

Patch status has not yet been verified

Resmî kaynaklarda yeterli kanıt bulunamadı. Bu sonuç “yama yok” anlamına gelmez.

Impact on My Inventory

Only the personal products you have added to your account are assessed; an organisation's inventory does not appear here.

Checking session…

Vulnerability description

DayBreach AI Explanation

Verified against sources

CVE-2026-54442: NationalSecurityAgency/emissary Incomplete Fix Vulnerability

Sources read

1

Source agreement

Tam uyum

Evidence confidence

%53

Short explanation

NationalSecurityAgency/emissary contains CVE-2026-54442, an incomplete fix allowing protocol-relative URLs and single-slash scheme variants to bypass validation, enabling server-side request forgery (SSRF) and open redirect attacks.

Why does it matter?

This flaw enables attackers to execute server-side request forgery against cloud instance metadata endpoints and retrieve sensitive credentials.

What should be done?

  • Follow the vendor advisory for updates
  • Strengthen URL validation mechanisms
  • Update the regular expression logic in NavAction.java
Note on uncertainty

The sources give limited detail on some technical conditions. Review the chain of evidence below before deciding how to act.

Chain of evidence and sources2 verified claims

NationalSecurityAgency/emissary bileşenindeki NavAction.java dosyası eksik bir yama içermektedir.

Zafiyet, CWE-918 sunucu tarafı istek sahteciliği olarak sınıflandırılmaktadır.

Show the technical text from the sources

### 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: ```java 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 ```python """ 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:** 1. Run `python3 poc.py` 2. 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

CVSS vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N

CWE: CWE-918

This explanation was compiled automatically from the source records. Scores, active exploitation, patch and exploit status come straight from the sources.

IMPACT: Affected Products and Software

Affected Products

The following products are affected by CVE-2026-54442 vulnerability. Where our threat engine knows the exact affected versions, they are listed below.

IDVENDORPRODUCTACTION
1mavengov.nsa.emissary:emissary View
Total affected vendors: 1|Products: 1

RED HAT CSAF/VEX: Product Impact Check

Red Hat has not yet published a CSAF/VEX impact record for this CVE. This does not mean “not affected”.

SCORING: CVSS from Multiple Sources

CVSS Scores

The Common Vulnerability Scoring System is a standardised framework for assessing the severity of vulnerabilities in software and systems. We collect and display CVSS scores from several sources for each CVE.

SCOREVERSIONSEVERITYVECTORSOURCE
4.8CVSS 3.x—Vector not publishedGitHub Advisory
0.0CVSS 4.0—Vector not publishedGitHub Advisory

Patch and Remediation Guide

Solution & Remediation Advisory

Patch status unknown

İncelenen resmî kaynaklarda yama durumu doğrulanamadı. Bu sonuç “yama yok” anlamına gelmez.

Confirm the affected product and version against the source evidence above.
Restrict access to internet-facing services and apply network segmentation.
Until a patch is confirmed, follow the vendor advisory; do not read an unknown status as “no patch”.
Monitor server logs and network endpoints for signs of anomalous execution.

Public exploit and active exploitation status

Verified exploit intelligence

No verified public PoC, exploit repository or Metasploit module has been found for this CVE yet.

Weakness Classification and Attack Patterns (CWE & CAPEC)

CWE - Common Weakness Enumeration

While CVE identifies specific instances of vulnerabilities, CWE categorises the common flaws or weaknesses that can lead to vulnerabilities. CVE-2026-54442 is associated with the following CWEs:

Common Attack Pattern Enumeration and Classification (CAPEC)

Common Attack Pattern Enumeration and Classification (CAPEC) stores attack patterns, which are descriptions of the common attributes and approaches employed by adversaries to exploit the CVE-2026-54442 weaknesses.

Attack Vector and Accessibility

ExposureAğ üzerinden
PermissionsHigh
UserGerekiyor

Official Sources and Advisories

CVSS Vector Radar Chart

4.8 / 10
Attack VectorNetworkComplexityLowPrivilegesHighUser Interact.RequiredConfidentialityLowIntegrityLowAvailabilityNone

Vulnerability Scoring Details

CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
Attack VectorNetwork
Attack ComplexityLow
Privileges RequiredHigh privileges
User Interaction—
Confidentiality (Gizlilik)Low
Integrity (Bütünlük)Low
Availability (Erişilebilirlik)None

Yama durumu bilinmiyor

İncelenen resmî kaynaklarda yama durumu doğrulanamadı. Bu sonuç “yama yok” anlamına gelmez.

Follow the vendor

M
maven logo
maven

Weakness Type (CWE & CAPEC)

Similar Vulnerabilities

Get this vulnerability through the API

Affected products, version ranges, exploitation status and patch information in a single request, with a free key.

curl -H "x-api-key: $DAYBREACH_API_KEY" \
  "https://api.daybreach.dev/api/v1/intel/cves/CVE-2026-54442"
CVE-2026-54442 · NationalSecurityAgency/emissary has an…