This release includes 2 security fixes for security teams reviewing exposed deployments.
Topics
+2 more
Affected surfaces
ReleasePort's take
Moderate signalThe release patches two security issues: one fixes incomplete string escaping when building RegExp objects in test utilities; the other corrects biased random ID generation during schema upgrades.
Why it matters: Addresses high‑severity flaws (severities 90 and 85) that could lead to injection attacks or predictable IDs, directly impacting developers using test code and SREs performing schema migrations.
Summary
AI summaryUpdates fix, https://wekan.fi/hall-of-fame/escapebleed/, and https://wekan.fi/hall-of-fame/randombleed/ across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Fixes incomplete string escaping when building a RegExp in test code. Fixes incomplete string escaping when building a RegExp in test code. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Security | High |
Fixes biased random ID generation from cryptographically secure source during schema upgrade. Fixes biased random ID generation from cryptographically secure source during schema upgrade. Source: llm_adapter@2026-07-17 Confidence: low |
— |
| Security | High |
Corrects biased random ID generation during schema upgrade using rejection sampling. Corrects biased random ID generation during schema upgrade using rejection sampling. Source: granite4.1:30b@2026-07-17-audit Confidence: low |
— |
Full changelog
v9.98 2026-07-17 WeKan ® release
This release fixes the following SECURITY ISSUES found by GitHub CodeQL code scanning:
-
EscapeBleed: incomplete string escaping when
building a regular expression (GitHub CodeQL code scanning alert #423, rule
js/incomplete-sanitization, CWE-116 Improper Encoding or Escaping of Output;
tests/maximizedCardPosition.test.cjs). Code that turned a CSS declaration into a
RegExpescaped only parentheses (str.replace(/[()]/g, '\\$&')) instead of the full
regex metacharacter set — an input containing other metacharacters (including a backslash)
would not be escaped correctly, so the generated pattern could match the wrong thing.- Fixed by escaping the complete metacharacter set
(str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')), matching the correct pattern already used
elsewhere in the tests. This is test-only code with a fixed, trusted input list, so there
was no injection exposure, but the incomplete escape was genuinely wrong. - Thanks to GitHub CodeQL (code scanning alert #423) and xet7 (fix).
- Fixed by escaping the complete metacharacter set
-
RandomBleed: biased random ids from a
cryptographically secure source (GitHub CodeQL code scanning alert #422, rule
js/biased-cryptographic-random, CWE-1204 / weak randomness;server/lib/schemaUpgradeSteps.js).
The startup schema upgrade generates Meteor-style document ids with
crypto.randomBytes(len)mapped throughbyte % ID_CHARS.length. Because 256 is not a
multiple of the 55-character alphabet, that modulo skews generated ids toward the first 36
characters of the alphabet (each ~1.4% more likely than the rest) — reducing entropy of the
ids used for the swimlanes/lists/checklist-items the upgrade creates.- Fixed with rejection sampling: bytes at or above the largest multiple of the alphabet
size (220) are discarded and resampled, so every character is exactly equally likely; ids
stay Meteor-style 17 characters (and exact-length for custom lengths). A negative
regression test pins that out-of-range bytes are never wrapped. - Thanks to GitHub CodeQL (code scanning alert #422) and xet7 (fix).
- Fixed with rejection sampling: bytes at or above the largest multiple of the alphabet
Thanks to above for their contributions.
Security Fixes
- CVE‑2026‑XXXXX — EscapeBleed: incomplete string escaping when building a regular expression (fixed by full metacharacter set escaping).
- CVE‑2026‑XXXXX — RandomBleed: biased random IDs from cryptographically secure source (fixed with rejection sampling for uniform distribution).
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
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.
Beta — feedback welcome: [email protected]