GHSA-2JP7-WWPG-3P9W
Vulnerability from github – Published: 2026-08-17 17:49 – Updated: 2026-08-17 17:49Fix: PR #7905 (ether/etherpad).
getHTMLFromAtext in src/node/utils/ExportHtml.ts interpolates values from the exportHtmlAdditionalTagsWithData plugin hook into span data-<k>="<v>" without HTML-attribute escaping. The value comes verbatim from the pad attribute pool, which a pad editor controls via a crafted changeset (only author attributes are validated; moveOpsToNewPool -> AttributePool.putAttrib stores any value). With a bundled plugin that registers the hook (ep_font_color / ep_font_size), an attribute value such as " onload="alert(1) is exported as <span data-color="" onload="alert(1)"> and served as text/html, yielding stored XSS for any collaborator who opens the export.
Fix: escape the name and value via Security.escapeHTMLAttribute. PR #7905 also adds a startup warning when default/placeholder account or SSO credentials are configured (defense-in-depth, non-breaking).
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 1.8.14"
},
"package": {
"ecosystem": "npm",
"name": "ep_etherpad-lite"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "3.3.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-55090"
],
"database_specific": {
"cwe_ids": [
"CWE-79"
],
"github_reviewed": true,
"github_reviewed_at": "2026-08-17T17:49:38Z",
"nvd_published_at": null,
"severity": "HIGH"
},
"details": "Fix: PR #7905 (ether/etherpad).\n\n`getHTMLFromAtext` in `src/node/utils/ExportHtml.ts` interpolates values from the `exportHtmlAdditionalTagsWithData` plugin hook into `span data-\u003ck\u003e=\"\u003cv\u003e\"` without HTML-attribute escaping. The value comes verbatim from the pad attribute pool, which a pad editor controls via a crafted changeset (only `author` attributes are validated; `moveOpsToNewPool` -\u003e `AttributePool.putAttrib` stores any value). With a bundled plugin that registers the hook (ep_font_color / ep_font_size), an attribute value such as `\" onload=\"alert(1)` is exported as `\u003cspan data-color=\"\" onload=\"alert(1)\"\u003e` and served as text/html, yielding stored XSS for any collaborator who opens the export.\n\nFix: escape the name and value via `Security.escapeHTMLAttribute`. PR #7905 also adds a startup warning when default/placeholder account or SSO credentials are configured (defense-in-depth, non-breaking).",
"id": "GHSA-2jp7-wwpg-3p9w",
"modified": "2026-08-17T17:49:39Z",
"published": "2026-08-17T17:49:38Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/ether/etherpad/security/advisories/GHSA-2jp7-wwpg-3p9w"
},
{
"type": "WEB",
"url": "https://github.com/ether/etherpad/pull/7905"
},
{
"type": "WEB",
"url": "https://github.com/ether/etherpad/commit/86c56cf827dd6e5ff1b6cd3760f87adc47f58bb1"
},
{
"type": "PACKAGE",
"url": "https://github.com/ether/etherpad"
},
{
"type": "WEB",
"url": "https://github.com/ether/etherpad/releases/tag/3.3.0"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N",
"type": "CVSS_V4"
}
],
"summary": "Etherpad has stored XSS in HTML export via unescaped attribute-pool values"
}
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.