Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Network API requires only a valid user session (PR:L); exposure is limited to admin_only field option labels (C:L); no integrity or availability impact applies.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
OpenProject is open-source, web-based project management software. Prior to 17.6.0, GET /api/v3/custom_options/:id resolved CustomOption records by global numeric id and allowed UserCustomField and GroupCustomField options without checking visible(current_user), so authenticated non-admin users could enumerate sequential custom option ids and read labels belonging to admin_only user or group custom fields. This issue is fixed in 17.6.0.
AnalysisAI
Incorrect authorization in OpenProject's REST API before 17.6.0 allows any authenticated non-admin user to enumerate sequential custom option IDs via GET /api/v3/custom_options/:id and read option labels belonging to admin_only UserCustomField and GroupCustomField records. The root cause, confirmed by commit diff, is that the authorization handler returned true unconditionally for these two custom field types instead of invoking the visible(current_user) scope filter. No public exploit code exists and this is not listed in CISA KEV, but the low attack complexity and standard network API surface make this trivially exploitable by any account holder on an affected instance.
Technical ContextAI
OpenProject exposes a Grape-based REST API at /api/v3. The custom_options_api.rb endpoint resolves CustomOption records by sequential global integer ID - a design that enables enumeration attacks when authorization is incomplete. The authorization function authorize_custom_option_visibility dispatches on custom field type, but the prior when UserCustomField, GroupCustomField branch returned true unconditionally, bypassing the .visible(current_user) ActiveRecord scope that enforces admin_only visibility. CWE-863 (Incorrect Authorization) applies precisely: an authorization decision point existed in the code but was implemented to always permit access for these two types. The fix adds authorized_user_custom_option and authorized_group_custom_option helper methods that query .visible(current_user).exists? on the parent custom field and raise API::Errors::NotFound (returning HTTP 404) if the field is not visible to the caller. The CPE string cpe:2.3:a:opf:openproject:*:*:*:*:*:*:*:* indicates all versions of the opf/openproject application are in scope up to the fix.
RemediationAI
Upgrade to OpenProject 17.6.0 or later, which incorporates the fix from commit a13fa079bc8040449570384c19f2d98f637179f1 adding proper visible(current_user) authorization to the custom_options API endpoint. The release is available at https://github.com/opf/openproject/releases/tag/v17.6.0 and the vendor advisory at https://github.com/opf/openproject/security/advisories/GHSA-wr3w-qchj-p4cm. As a compensating control prior to patching, administrators can restrict access to the /api/v3/custom_options/* endpoint at the network or reverse-proxy layer to trusted internal IP ranges, though this may break legitimate API integrations and automation that rely on this endpoint. Alternatively, converting or removing admin_only custom field option labels to non-sensitive values reduces information exposure risk without addressing the underlying authorization flaw. Neither workaround is a substitute for upgrading.
More in Openproject
View allA SQL injection vulnerability in the activities API in OpenProject before 8.3.2 allows a remote attacker to execute arbi
OpenProject is web-based project management software. Rated high severity (CVSS 7.5), this vulnerability is remotely exp
OpenProject is open source project management software. Rated medium severity (CVSS 6.5), this vulnerability is remotely
Authenticated remote code execution affects the official openproject/openproject Docker image, which ships with a hardco
Cross-project folder hijacking in OpenProject before 17.3.3 and 17.4.1 lets a project-admin abuse an insecure direct obj
SQL injection in OpenProject's baseline-comparison (timestamps) functionality lets an authenticated, low-privileged user
OpenProject has a CVSS 9.9 command injection vulnerability allowing authenticated users to execute OS commands on the pr
Remote code execution in OpenProject before 17.3.3 and 17.4.1 arises from cache store poisoning, allowing an attacker wi
OpenProject, a web-based project management platform, contains a critical SQL injection vulnerability in versions prior
OpenProject (before 16.6.4) has a local file read vulnerability through SVG-based ImageMagick exploitation in the PDF ex
OpenProject's Repositories module contains a stored cross-site scripting (XSS) vulnerability that occurs when displaying
Token decryption in OpenProject 17.0 allows authenticated attackers to intercept and decrypt 24-hour authentication toke
Same weakness CWE-863 – Incorrect Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51281