Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain editor-level Unleash account
-
DeliverySet username to injected link syntax
-
ExploitTrigger any feature flag event
-
Executionformat() replaces process-wide Mustache escape with identity function
-
PersistUnescaped username renders in all notification channel messages
-
ImpactVictim 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 ( |
| 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 |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:L/UI:R/S:C/C:N/I:L/A:N
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.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
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Stack exhaustion denial-of-service in Unleash's OpenAPI validation middleware allows unauthenticated network attackers t
Server-Side Request Forgery in Unleash's addon and integration subsystem (versions prior to 7.5.2, 7.6.5, and 8.0.2) all
Authenticated users of Unleash (npm unleash-server) prior to 8.0.3 who hold create or clone rights in any single project
Authenticated users who hold the UPDATE_FEATURE_STRATEGY permission in any single project can reorder the activation str
Authenticated users of Unleash (the open-source feature management platform) can bypass project-scoped authorization and
Unleash deployments prior to 8.0.3 render the change-request approval email template with Mustache triple-stash syntax,
EUVD-2026-64042
GHSA-w4mq-xh27-6xpx
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB