CVE-2026-76909 — unleash-server
Fix: Unleash/unleash@7c89cedCVE-2026-76909 is a Cross-site Scripting (XSS) vulnerability in unleash-server. A fix is available for unleash-server — see the affected versions and patch details below.
Unleash: CR-approval email renders user-controlled raw HTML
Exploitation Status
No confirmed exploitation observed yet
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-76909.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
How broadly this vulnerability is actually deployed: weekly install volume shows current usage, and reverse-dependency count shows how many other packages break if it stays unpatched.
unleash-servernpmDescription
Summary
The change-request approval HTML email template renders fields as raw HTML. User who can create a change request can inject HTML into approval notification emails. I was not able to confirm Enterprise platform is using vulnerable code nor that it doesn't sanitize input.
Details
src/mailtemplates/requested-cr-approval/requested-cr-approval.html.mustache uses Mustache triple-stash syntax for fields that can originate from users:
{{{ changeRequestTitle }}}
{{{ requesterName }}}
{{{ requesterEmail }}}
{{{ changeRequestLink }}}
Triple-stash disables HTML escaping even when Mustache's global escape function is safe. The related renderer is sendRequestedCRApprovalEmail in src/lib/services/email-service.ts, which renders the template with Mustache.render.
PoC
- Use an Enterprise deployment with change requests and approval emails enabled.
- As a project member who can create change requests, set a display name or change-request title to HTML such as:
</a><a href="https://example.com">Approve change request</a>
- Create a change request that requires approval.
- Observe that the approval email contains attacker-controlled raw HTML instead of escaped text.
Impact
Change-request approvers can receive forged links, tracking pixels, or visually altered email content.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 📦npm | unleash-server | all versions | 8.0.3npm install unleash-server@8.0.3 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for unleash-server, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update unleash-server to 8.0.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-76909 is resolved across your whole dependency graph.
Workarounds
Escape or sanitise the affected output on the server side rather than relying on client-side filtering, and add a Content-Security-Policy that blocks inline script execution so injected markup cannot run even if it reaches the page.
Frequently Asked Questions
Is CVE-2026-76909 in your dependencies?
Find it across npm, including transitive dependencies.