diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e5db0907..cd39e05b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ Versions: # Upcoming WeKan ® release -This release [fixes](https://github.com/wekan/wekan/commit/357de728c03113b787065bac2c5832ad77f1a117) the following CRITICAL SECURITY ISSUES: +This release adds the following [CRITICAL SECURITY FIXES](https://github.com/wekan/wekan/commit/357de728c03113b787065bac2c5832ad77f1a117): - [Fix GHSA-qfqv-42qw-vvwh: `cloneBoard` Meteor method has no authorization check — any user can clone (read) any private board by ID (CWE-639, CWE-862)](https://github.com/wekan/wekan/security/advisories/GHSA-qfqv-42qw-vvwh). The `cloneBoard` Meteor method in `models/import.js` copied an entire board — @@ -128,34 +128,8 @@ and, while auditing that client-side permission checks are also enforced server- behind global admin. Now requires global admin. Thanks to Claude. -and adds the following updates: +and, in the same access-control audit, the attachment write API was tightened: -- [Update Windows MongoDB](https://github.com/wekan/wekan/commit/beedf2fefa614018ce7ed499465092e814a050d9). - Thanks to xet7. -- [Update DDP transport and reactivity order for multi-tenant deployment](https://github.com/wekan/wekan/pull/6365). - Thanks to italojs. -- [Updated to Meteor 3.5-rc.1](https://github.com/wekan/wekan/commit/29b3f52e50ea2ee9bfbfb98d3842ce8a9b8e52e3). - Thanks to Meteor developers. -- [Fixed OpenAPI REST API documentation generation](https://github.com/wekan/wekan/commit/c71a97cba20247ce227a288fa74ef23cb3c4c83e), - which had been broken - since after WeKan v7.93 and only generated docs for the `login`/`register` - endpoints (2 operations) instead of the full API. The Meteor 3 migration moved - the REST routes from `models/*.js` (`JsonRoutes.add(...)`) into - `server/models/*.js` (`WebApp.handlers.get/post/put/delete(...)`) and - introduced optional chaining (`?.`) that the `esprima` Python parser cannot - read, so `openapi/generate_openapi.py` silently skipped every route file. - The generator now understands both routing styles, scans both `models/` and - `server/models/`, downlevels modern JS syntax so files parse, handles the - `type: Array` SimpleSchema idiom, and `releases/rebuild-docs.sh` works directly - with Python 3.12.x (PEP 668). The generated `public/api/wekan.yml` / - `wekan.html` now cover the full API again (89 operations / 61 paths). - Thanks to Claude. -- **Documented the attachment / file REST API in the OpenAPI docs** — file - upload, download, info, listing a board's files, copy, move and delete (the - `/api/attachment/*` endpoints registered via `WebApp.handlers.use()`, which the - generator cannot auto-discover) are now documented in `openapi/extra_paths.yml` - and injected into the generated docs, including their authentication and - permission requirements. Thanks to Claude. - **Security: attachment write operations in the REST/DDP API now require board write access, not just membership (CWE-862, CWE-639).** Both attachment API implementations (`server/routes/attachmentApi.js` HTTP routes and @@ -167,10 +141,9 @@ and adds the following updates: admins still allowed); read operations (download / list / info) keep membership-level access. Added security tests in `server/lib/tests/attachmentApi.tests.js`. Thanks to Claude. -- **The attachment copy API now honours the admin "Admin Panel / Attachments" - API transfer limits.** Copying an attachment creates a new attachment but - skipped the `apiUploadBlocked` / `apiUploadMaxBytes` checks that upload - enforces; copy now respects them in both API implementations. Thanks to Claude. + +and adds the following new features: + - **SVG image uploads are now sanitized instead of rejected.** Uploaded SVGs (attachments and avatars) are cleaned in place in `onAfterUpload` via the new `models/lib/sanitizeSvg.js`, which removes JavaScript (`