This release includes 6 security fixes for security teams reviewing exposed deployments.
Topics
+14 more
Affected surfaces
ReleasePort's take
Moderate signalOpenProject v17.4.1 resolves multiple critical security vulnerabilities affecting API endpoints and cache storage.
Why it matters: CVEs include SQL injection (GHSA-98vw-2r87-fx2r) enabling admin privilege escalation, XSS (GHSA-q33w-f822-hg8x) for arbitrary Turbo Stream actions, IDOR (GHSA-3vpx-94qx-xpw6), CSRF (GHSA-6crw-7f5r-4qj9), and cache poisoning leading to RCE—all rated severity 100; immediate patching is required.
Summary
AI summaryUpdates https://yeswehack.com/programs/openproject, Security fixes, and GHSA-h83w-5q5x-pq27 - Information Disclosure across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
CVE-2026-47193: Journal diff endpoint bypasses visibility checks. CVE-2026-47193: Journal diff endpoint bypasses visibility checks. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
CVE-2026-49355: Private work package data disclosed via meeting agenda item API. CVE-2026-49355: Private work package data disclosed via meeting agenda item API. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
GHSA-3vpx-94qx-xpw6: IDOR via PATCH on /projects/<A>/settings/project_storages/<A_ps_id> leads to unauthorized resource access. GHSA-3vpx-94qx-xpw6: IDOR via PATCH on /projects/<A>/settings/project_storages/<A_ps_id> leads to unauthorized resource access. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
GHSA-6crw-7f5r-4qj9: CSRF on /users/:id via POST parameter "user[admin]" enables privilege escalation. GHSA-6crw-7f5r-4qj9: CSRF on /users/:id via POST parameter "user[admin]" enables privilege escalation. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
GHSA-98vw-2r87-fx2r: SQL injection via timestamps parameter enables arbitrary database writes and admin privilege escalation. GHSA-98vw-2r87-fx2r: SQL injection via timestamps parameter enables arbitrary database writes and admin privilege escalation. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
GHSA-h83w-5q5x-pq27: Cleartext storage of OAuth access tokens in cache leads to sensitive data exposure. GHSA-h83w-5q5x-pq27: Cleartext storage of OAuth access tokens in cache leads to sensitive data exposure. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
GHSA-q33w-f822-hg8x: Stored XSS via work package description enables arbitrary Turbo Stream actions and redirects. GHSA-q33w-f822-hg8x: Stored XSS via work package description enables arbitrary Turbo Stream actions and redirects. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Security | Critical |
GHSA-qj96-f42f-6336: Cache store poisoning leads to Remote Code Execution (RCE). GHSA-qj96-f42f-6336: Cache store poisoning leads to Remote Code Execution (RCE). Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Fixes migration 20250929070310 failing due to schema not fully migrated. Fixes migration 20250929070310 failing due to schema not fully migrated. Source: llm_adapter@2026-06-08 Confidence: high |
— |
Full changelog
Release date: 2026-06-08
We released OpenProject 17.4.1.
The release contains several bug fixes and we recommend updating to the newest version.
Below you will find a complete list of all changes and bug fixes.
Security fixes
CVE-2026-47193 - Journal diff endpoint bypasses object, journal, and field visibility checks
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-f2rx-x2qj-2hgj
CVE-2026-49355 - Private work package data disclosure through single meeting agenda item API
GET /api/v3/meetings/:meeting_id/agenda_items/:agenda_item_id discloses private work package data from a linked work package that belongs to a private/inaccessible project.
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-g387-6rm2-xw88
GHSA-3vpx-94qx-xpw6 - IDOR through /projects//settings/project_storages/<A_ps_id> via PATCH parameter "storages_project_storage[project_folder_id]" leads to Access to Unauthorized Resources
A project-admin in one project can hijack the managed Nextcloud or OneDrive folder of another project on the same storage by writing the victim project's project_folder_id into the attacker's Storages::ProjectStorage row. The next managed-folder sync overwrites the ACL on the referenced folder with the attacker project's user list.
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-3vpx-94qx-xpw6
GHSA-6crw-7f5r-4qj9 - CSRF on TARGET through /users/:id via POST parameter "user[admin]"
Turbo Drive auto-injects CSRF tokens (from <meta name="csrf-token">) on forms injected via the XSS's append Turbo Stream action. A second action, dispatch_event with name="submit", auto-submits the form with no victim interaction beyond viewing the work package, resulting in a CSRF attack
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-6crw-7f5r-4qj9
GHSA-98vw-2r87-fx2r - SQL injection in timestamps functionality
OpenProject baseline comparison allows callers to request historic work-package attributes using the timestamps parameter.
The timestamp parser accepts a relative date keyword on the first line because its regular expression uses line anchors. The parser validates the input, but the original multi-line string is kept and later interpolated into a raw SQL CASE ... THEN '<timestamp>' expression.
An authenticated user who can save a query can persist a timestamp array value containing literal commas and trigger a top-level data-modifying CTE. This gives the attacker a generic database write primitive as the OpenProject application database role.
The demonstrated impact is administrator privilege escalation: the attacker uses that write primitive to update their own account record, setting the account's administrator flag to true. The same injection also allows in-band data disclosure through work-package timestamp metadata.
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-98vw-2r87-fx2r
GHSA-h83w-5q5x-pq27 - Information Disclosure (cleartext storage of data) on localhost through memcached via Others "storage..httpx_access_token" leads to Sensitive Data Exposure
OpenProject's Storages module writes the OneDrive/SharePoint userless OAuth access_token plaintext to Rails.cache under the deterministic key storage.<id>.httpx_access_token, repopulated continuously by an hourly cron and every userless-OAuth call site (see Write cadence). None of the three allowed cache backends (file_store, memcache, redis) encrypts at rest. An attacker with read access to the cache backend recovers the Azure-AD application-tier bearer with an anonymous get over the memcached binary protocol (or the equivalent against Redis)
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-h83w-5q5x-pq27
GHSA-q33w-f822-hg8x - Stored XSS on openproject.example.com through /api/v3/projects/{project}/work_packages via POST parameter "description"
The HTML sanitizer grants <macro> elements unrestricted data-* attributes via :data wildcard. An attacker injects data-controller="poll-for-changes" into a work package description, causing Stimulus.js to mount a controller that fetches an attacker-uploaded attachment and passes it to renderStreamMessage(). This executes arbitrary Turbo Stream actions — including redirect_to — in every victim's authenticated browser session, redirecting them to an attacker-controlled server.
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-q33w-f822-hg8x
GHSA-qj96-f42f-6336 - Cache store poisoning leads to Remote Code Execution (RCE)
This vulnerability was reported as part of the YesWeHack.com OpenProject Bug Bounty program, sponsored by the European Commission.
For more information, please see the GitHub advisory #GHSA-qj96-f42f-6336
Bug fixes and changes
- Bugfix: Migration 20250929070310 failing due to update code failing on not-yet fully migrated schema [#75286]
Contributions
A big thanks to our Community members for reporting bugs and helping us identify and provide fixes.
This release, special thanks for reporting and finding bugs go to Alexander Aleschenko.
Security Fixes
- CVE-2026-47193 — Journal diff endpoint bypasses object, journal, and field visibility checks
- CVE-2026-49355 — Private work package data disclosure via meeting agenda item API
- GHSA-3vpx-94qx-xpw6 — IDOR through /settings/project_storages/ PATCH parameter leads to unauthorized resource access
- GHSA-6crw-7f5r-4qj9 — CSRF on /users/:id allowing admin promotion via POST user[admin]
- GHSA-98vw-2r87-fx2r — SQL injection in timestamps functionality enabling privilege escalation
- GHSA-h83w-5q5x-pq27 — Information disclosure of cleartext OAuth access token stored in cache
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 openproject
OpenProject is the leading open source project management software.
Beta — feedback welcome: [email protected]