Skip to content

wekan

v10.23 Security

This release includes 2 security fixes for security teams reviewing exposed deployments.

Published 4d Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 2 known CVEs

Topics

docker javascript kanban meteor real-time sandstorm
+2 more
snapcraft wekan

Affected surfaces

auth

Summary

AI summary

Updates fix, https://wekan.fi/hall-of-fame/exportbleed/, and https://github.com/wekan/wekan/commit/2d32e3462 across a mixed release.

Full changelog

v10.23 2026-07-22 WeKan ® release

This release fixes the following CRITICAL VULNERABILITIES:

  • ExportBleed: stored XSS in HTML board exports
    through a card-title second parse
    (CWE-79 Cross-site Scripting; GitHub Security Advisory
    GHSA-8r5p-4q9j-f5jx, severity High; client/lib/exportHTML.js). A board member could store
    entity-encoded markup in a card title (e.g. <img src=x onerror=...>). It stays inert on
    the live board — Blaze escapes it and the +viewer sanitizer neutralizes handlers, keeping the
    entity payload as text — but the exported index.html embedded a card-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 and ran 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).

    • Fixed by building the modal with DOM nodes and assigning the card title/body through
      textContent, never innerHTML, so they are inserted as inert text
      (commit).
    • Thanks to koyokr (report) and xet7 (fix).
  • SpliceBleed follow-up: incomplete
    multi-character sanitization re-flagged in the filename markup strip
    (GitHub CodeQL code
    scanning alert #426, rule js/incomplete-multi-character-sanitization, CWE-116 Improper Encoding
    or Escaping of Output; imports/lib/fileNameDisplay.js). The SpliceBleed fix (#425) looped a
    CHAIN of six replaces to a fixpoint — runtime-safe, but CodeQL (a local check) could not
    attribute the fixpoint to the individual <[^>]*>? tag replace, so it kept flagging it ("this
    string may still contain <script").

    • Fixed by restructuring to the proven-complete pattern used by
      client/lib/importDependencies.js stripHtml() (which cleared the sibling alert #421): remove
      template/PI/CDATA tokens (looped), then strip HTML/XML tags with a SINGLE
      replace(/<[^>]*>/g, '') looped to a fixed point, then drop any stray angle bracket so even an
      unclosed tag (a trailing <script) cannot survive. Behaviour is unchanged, and Blaze {{ }}
      still HTML-escapes every rendered filename, so this stays defence-in-depth
      (commit).
    • Thanks to GitHub CodeQL (code scanning alert #426) and xet7 (fix).

Thanks to above GitHub users for their contributions and translators for their translations.

Security Fixes

  • GHSA-8r5p-4q9j-f5jx — ExportBleed: stored XSS in HTML board exports via card‑title second parse (CWE-79). Fixed by using textContent instead of innerHTML.
  • CodeQL alert #426 – SpliceBleed follow‑up: incomplete multi‑character sanitization in filename markup; fixed by ensuring all unsafe characters are stripped to a fixpoint.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track wekan

Get notified when new releases ship.

Sign up free

About wekan

The Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . New English strings for new features at imports/i18n/data/en.i18n.json . Non-English translations at https://app.transifex.com/wekan/wekan only.

All releases →

Related context

Beta — feedback welcome: [email protected]