Download Latest Version wekan-11.72-s390x.zip (286.8 MB)
Email in envelope

Get an email when there's a new version of wekan

Home / v10.23
Name Modified Size InfoDownloads / Week
Parent folder
wekan_10.23_arm64.snap 2026-07-22 304.3 MB
wekan-10.23-riscv64.zip 2026-07-22 310.9 MB
wekan-10.23-ppc64le.zip 2026-07-22 312.2 MB
wekan-10.23-s390x.zip 2026-07-22 313.1 MB
wekan-10.23-sandstorm.spk 2026-07-22 168.6 MB
wekan-10.23-win64.zip 2026-07-22 295.2 MB
wekan-10.23-mac-arm64.zip 2026-07-22 305.8 MB
wekan-10.23-amd64.zip 2026-07-22 307.1 MB
wekan-10.23-arm64.zip 2026-07-22 309.8 MB
README.md 2026-07-22 2.7 kB
v10.23 source code.tar.gz 2026-07-22 32.7 MB
v10.23 source code.zip 2026-07-22 33.8 MB
Totals: 12 Items   2.7 GB 0

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.

Source: README.md, updated 2026-07-22