GHSA-7HVX-28GP-MF6J

Vulnerability from github – Published: 2026-09-22 20:34 – Updated: 2026-09-22 20:34
VLAI
Summary
Unleash: CR-approval email renders user-controlled raw HTML
Details

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

  1. Use an Enterprise deployment with change requests and approval emails enabled.
  2. 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>
  1. Create a change request that requires approval.
  2. 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.

Show details on source website

{
  "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"
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

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.

Loading…

Loading…

Loading…

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.


Loading…