GHSA-7HVX-28GP-MF6J
Vulnerability from github – Published: 2026-09-22 20:34 – Updated: 2026-09-22 20:34Summary
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": [
{
"package": {
"ecosystem": "npm",
"name": "unleash-server"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "8.0.3"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-76909"
],
"database_specific": {
"cwe_ids": [
"CWE-79"
],
"github_reviewed": true,
"github_reviewed_at": "2026-09-22T20:34:38Z",
"nvd_published_at": null,
"severity": "LOW"
},
"details": "### Summary\nThe 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\u0027t sanitize input.\n\n### Details\n`src/mailtemplates/requested-cr-approval/requested-cr-approval.html.mustache` uses Mustache triple-stash syntax for fields that can originate from users:\n\n```mustache\n{{{ changeRequestTitle }}}\n{{{ requesterName }}}\n{{{ requesterEmail }}}\n{{{ changeRequestLink }}}\n```\n\nTriple-stash disables HTML escaping even when Mustache\u0027s global escape function is safe. The related renderer is `sendRequestedCRApprovalEmail` in `src/lib/services/email-service.ts`, which renders the template with `Mustache.render`.\n\n### PoC\n1. Use an Enterprise deployment with change requests and approval emails enabled.\n2. As a project member who can create change requests, set a display name or change-request title to HTML such as:\n\n```html\n\u003c/a\u003e\u003ca href=\"https://example.com\"\u003eApprove change request\u003c/a\u003e\n```\n\n3. Create a change request that requires approval.\n4. Observe that the approval email contains attacker-controlled raw HTML instead of escaped text.\n\n### Impact\nChange-request approvers can receive forged links, tracking pixels, or visually altered email content.",
"id": "GHSA-7hvx-28gp-mf6j",
"modified": "2026-09-22T20:34:38Z",
"published": "2026-09-22T20:34:38Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/Unleash/unleash/security/advisories/GHSA-7hvx-28gp-mf6j"
},
{
"type": "WEB",
"url": "https://github.com/Unleash/unleash/commit/7c89cedcbbb5aa826951373569930e0a3c4358db"
},
{
"type": "PACKAGE",
"url": "https://github.com/Unleash/unleash"
},
{
"type": "WEB",
"url": "https://github.com/Unleash/unleash/releases/tag/v8.0.3"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N",
"type": "CVSS_V4"
}
],
"summary": "Unleash: CR-approval email renders user-controlled raw HTML"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.