Skip to main content

Unleash CVE-2026-63466

| EUVDEUVD-2026-64042 MEDIUM
Improper Encoding or Escaping of Output (CWE-116)
2026-08-21 GitHub_M GHSA-w4mq-xh27-6xpx
4.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain editor-level Unleash account
  2. Delivery
    Set username to injected link syntax
  3. Exploit
    Trigger any feature flag event
  4. Execution
    format() replaces process-wide Mustache escape with identity function
  5. Persist
    Unescaped username renders in all notification channel messages
  6. Impact
    Victim clicks attacker-controlled link in trusted notification

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding for downstream
Exploitation Conditions

Exploitation requires an authenticated Unleash account with at minimum editor-level privileges (CVSS PR:L; not unauthenticated). The attacker must be able to set their username or display name to arbitrary string content containing Slack mrkdwn or Teams link syntax (<url|label> or equivalent) - this is possible because the username and name fields are validated only with a Joi string type check and have no character set restrictions. At least one outbound notification addon must be configured and active: Webhook, Slack (legacy), Microsoft Teams, Datadog, or New Relic integrations are all affected sinks. The injection activates the first time any feature flag event causes FeatureEventFormatterMd.format() to execute (whether triggered by the attacker or normal platform activity) and persists for the remaining lifetime of the Node.js process. Exploitation is limited by: requirement for editor-level authentication; requirement that at least one notification integration is configured (Unleash instances with no addons configured are not exposed to the cross-channel contamination); and requirement that victims actively click the injected link for harm beyond link appearance in a notification. Deployments running Unleash 8.0.3 or later are not affected.

Impact

The CVSS 4.1 score and vector (AV:N/AC:L/PR:L/UI:R/S:C/C:N/I:L/A:N) accurately characterize the realistic threat profile: network-reachable but requiring editor-level authentication (PR:L), dependent on a victim clicking an injected link (UI:R), with limited integrity impact (I:L) scoped across component boundaries to notification channels (S:C). No EPSS score was provided in the input data, so probabilistic exploitation frequency cannot be assessed quantitatively. The absence of a KEV listing and the lack of public POC code keep this in the monitored-but-not-emergency tier for most organizations. The primary real-world risk is trust abuse: organizations using Unleash webhook or chat integrations as a trusted feed for deployment or incident response decisions are exposed to phishing via an attacker-controlled link rendered in what appears to be a legitimate Unleash system notification. The process-wide persistence of the escaping bypass - active from the first notification event until process restart - amplifies impact beyond the initial trigger. The attack surface is bounded by: the requirement for editor-level credentials, the need for at least one notification addon to be configured, and the need for victim interaction to realize downstream harm beyond link appearance.

Exploit ScenarioDerived

An attacker who holds or obtains an Unleash editor-level account sets their display name to a Slack mrkdwn link string such as <https://attacker.example.com|URGENT: prod incident - click here>. On the next feature flag event (toggled by the attacker or any other user), FeatureEventFormatterMd.format() fires, permanently disables Mustache HTML escaping for the process, and the username renders unescaped into every configured notification channel; recipients in Slack, Teams, or Datadog see a legitimate Unleash system message containing a hyperlink pointing to an attacker-controlled destination. No public exploit code has been identified, but the attack requires no specialized tooling beyond a text field and an editor account.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 21, 2026

Process-wide Mustache HTML escaping is permanently disabled in Unleash (all versions prior to 8.0.3) from the first moment any notification addon formats a feature event, allowing an editor-level user who has placed Slack or Teams link syntax in their unrestricted username to inject attacker-controlled hyperlinks into every configured outbound notification channel - including Slack, Microsoft Teams, Datadog, New Relic, and email. The scope change (S:C in CVSS) reflects that the vulnerable assignment in FeatureEventFormatterMd contaminates Mustache rendering across email-service.ts, webhook.ts, datadog.ts, and new-relic.ts for the lifetime of the Node.js process. No active exploitation has been confirmed (not in CISA KEV) and no public exploit code has been identified at time of analysis.

RemediationAI

Upgrade to Unleash 8.0.3 or later, available at https://github.com/Unleash/unleash/releases/tag/v8.0.3. The fix (commit 002012cfdbedd2e9b7db9dc83b9f549f761db22e) scopes the no-op escape function to a per-render config object ({ escape: (text: string) => text }) passed as the fourth argument to each Mustache.render() call, eliminating the process-wide singleton mutation entirely. If immediate upgrade is not feasible, a partial compensating control is to audit and restrict existing editor-level user accounts' username fields for embedded angle-bracket link syntax (<, >), and to enforce username character restrictions at the application boundary - noting this requires a custom validation change and does not fix the underlying escaping architecture. Organizations should also consider disabling notification addon integrations (Slack, Teams, Datadog, New Relic, Webhook) until patched, accepting the trade-off of lost operational visibility. Restarting the Unleash Node.js process clears the corrupted global escape function state but does not prevent re-exploitation on the next notification event.

Affected VersionsENISA

unleash < 8.0.3

Affected Packages

npm unleash-server fix: 8.0.3
euvd unleash fix: 8.0.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in npm, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability (CWE-116: Improper Encoding or Escaping of Output) arises from a side-effecting mutation of the mustache npm package's module-level escape singleton. The mustache library (pinned ^4.2.0, confirmed 4.2.0 installed) stores its HTML encoder as mustache.escape = escapeHtml - a single object property shared across all imports in the process via Node.js's module cache. In src/lib/addons/feature-event-formatter-md.ts line 355, the format() method assigns Mustache.escape = (text) => text, replacing the process-wide encoder with an identity function rather than using mustache 4.x's supported per-call config parameter ({ escape: fn }). As a result, every subsequent Mustache.render() call across email-service.ts, webhook.ts, datadog.ts, and new-relic.ts executes without HTML entity encoding for the rest of the process lifetime. The {{user}} template variable, present in nearly every event action template per EVENT_MAP in feature-event-formatter-md-events.ts, interpolates event.createdBy - the acting account's username or email. The username field (create-user-schema.ts, user-service.ts:289) has only a Joi string type check and no charset or length restrictions, making <url|label> Slack mrkdwn syntax or equivalent Teams link syntax fully injectable. The affected CPE is cpe:2.3:a:unleash:unleash:*:*:*:*:*:*:*:*; npm package unleash-server.

Know when Unleash 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

Vendor (GitHub_M) PRIMARY 4.1 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:N/I:L/A:N
vuln.today AI 4.1 MEDIUM

Editor-level authentication required (PR:L), victim must actively click injected link (UI:R), scope crosses to external notification channels (S:C), no confidentiality or availability impact.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
None
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Aug 21, 2026 - 19:02 EUVD

DescriptionCVE.org

Unleash is an open-source feature management platform. Prior to 8.0.3, FeatureEventFormatterMd.format in src/lib/addons/feature-event-formatter-md.ts assigns Mustache.escape to an identity function before rendering action and path templates. Because Mustache.escape is process-wide, the assignment disables escaping for subsequent Mustache.render calls in email-service.ts, webhook.ts, datadog.ts, and new-relic.ts. An editor-level user can place Slack or Microsoft Teams link syntax in an unrestricted username, trigger a feature event, and inject an attacker-labeled link into a trusted outbound notification channel, while other Mustache sinks remain unescaped until restart. This issue is fixed in version 8.0.3.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
popular open-source feature flag platform, self-hosted enterprise deployments
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

40
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +20
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy