Files
wekan/client/lib
Lauri Ojansivu 2d32e34621 Fix ExportBleed: stored XSS in HTML board exports via a card-title second parse.
A board member could store entity-encoded markup in a card title. It stays inert
on the live board (Blaze escapes it; the +viewer sanitizer neutralizes handlers
and keeps the entity payload as text), but the exported index.html embedded a
click handler that read the card title/body via .textContent — which DECODES HTML
entities — and then concatenated those values into content.innerHTML. That SECOND
parse revived the tag (e.g. `<img src=x onerror=...>`) and executed it when a
recipient clicked the card in the export, disclosing all data in that document
(including cards added after the attacker's board membership was removed).

The modal is now built with DOM nodes and the card title/body are assigned through
textContent, never innerHTML, so they are inserted as inert text.

Regression: tests/exportHTMLXss.test.cjs (title/body reach only textContent; no
titleText/allText flows into any innerHTML; a textContent assignment does not
revive an entity-decoded <img>).

(CWE-79 stored XSS, GitHub Security Advisory GHSA-8r5p-4q9j-f5jx.)

Thanks to koyokr and xet7 !
2026-07-22 18:04:40 +03:00
..
2026-01-28 12:55:22 +02:00
2020-05-24 12:46:39 +02:00
2025-10-21 15:19:19 +03:00
2026-01-17 17:42:27 +02:00
2020-05-24 12:46:39 +02:00