HIGH 8.2

CVE-2026-52783: OpenProject Plaintext OAuth Token Cache Exposure

OpenProject's file storage connector for OneDrive and SharePoint has a critical weakness: it stores authentication tokens in plain text where attackers can read them. When OpenProject syncs with Microsoft cloud storage, it obtains special access tokens that prove the application's identity to Microsoft. Instead of protecting these tokens with encryption, OpenProject saves them unencrypted in its cache layer—a temporary data store that can be accessed by anyone who gains network or system access to the server running OpenProject. An attacker with legitimate access to the cache backend (or who can reach it over the network) can retrieve these tokens and impersonate OpenProject to Microsoft's systems, potentially gaining unauthorized access to sensitive files stored in OneDrive or SharePoint across your organization.

Source data · NVD / CISA · public domain

CVSS
3.1 · 8.2 HIGH · CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:N
Weaknesses (CWE)
CWE-313
Affected products
0 configuration(s)
Published / Modified
2026-06-26 / 2026-06-29

NVD description (verbatim)

OpenProject is open-source, web-based project management software. Prior to 17.3.3 and 17.4.1, 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 is fixed in 17.3.3 and 17.4.1.

1 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The Storages module in OpenProject uses userless OAuth flows to obtain Azure AD bearer tokens for OneDrive/SharePoint integration. These access_tokens are cached persistently under deterministic keys (storage.<id>.httpx_access_token) using Rails.cache, which supports three backends: file_store, memcache, and redis. None of these backends apply encryption-at-rest by default, leaving tokens readable to anyone with access to the underlying cache system. The tokens are repopulated continuously—both by an hourly background job and on each OAuth-authenticated request—creating multiple write opportunities and a persistent attack surface. An attacker with network or filesystem access can trivially retrieve tokens via the memcached binary protocol or Redis commands without authentication, yielding valid Azure AD application-tier bearer tokens.

Business impact

Compromise of these tokens enables unauthorized access to organizational cloud storage, potentially exposing confidential documents, intellectual property, contracts, and personal data stored in SharePoint or OneDrive. An attacker can read, modify, or delete files without triggering user-level audit trails, complicating forensic investigation. For organizations relying on OpenProject as a central collaboration hub, this creates a backdoor into Microsoft 365 that bypasses user authentication and conditional access policies. The risk is heightened in multi-tenant deployments where a single token compromise affects all users accessing that storage integration.

Affected systems

OpenProject versions prior to 17.3.3 and 17.4.1 are affected when the Storages module is enabled and configured for OneDrive or SharePoint integration. The vulnerability exists regardless of which cache backend is in use (file_store, memcache, or redis), as none apply encryption-at-rest. Organizations running older versions with active cloud storage connectors are vulnerable; air-gapped or file-only deployments are not directly at risk.

Exploitability

Exploitation requires read access to the cache backend, which is a lower bar than many vulnerabilities suggest. In environments where memcache or redis is exposed on the internal network without authentication (common in containerized or cloud deployments), any networked attacker can retrieve tokens anonymously. File-store backends require filesystem access, which may be available to other containerized services or a compromised host. Once tokens are obtained, no additional steps are required—they are immediately valid bearer tokens usable against Microsoft Graph API. The deterministic key structure makes discovery straightforward. However, the attacker must already have some form of network or system-level access; this is not a remote unauthenticated attack against OpenProject itself.

Remediation

Upgrade to OpenProject 17.3.3 or 17.4.1 or later. These versions implement encryption-at-rest for cached tokens, rendering them unreadable even if the cache backend is compromised. Organizations unable to patch immediately should restrict network access to cache backends (memcache, redis) to only the OpenProject application servers, use authentication and encryption options available in redis, and monitor cache access logs for suspicious read patterns. Consider temporarily disabling OneDrive/SharePoint integrations until patches are deployed in high-sensitivity environments.

Patch guidance

Apply OpenProject 17.3.3 if running the 17.3.x line, or 17.4.1 if running 17.4.x or later. Verify patch availability through your OpenProject deployment channel (self-hosted, cloud, or Docker image). After upgrade, clear the existing cache to purge any unencrypted tokens; restart OpenProject services to force re-authentication with Microsoft. Test cloud storage connectivity to confirm functionality post-patch. For large deployments, stage patches in a non-production environment first to verify no integration breaks.

Detection guidance

Review cache backend access logs (memcached stats, redis slowlog, or filesystem audit logs) for unusual read patterns, especially repeated reads of keys matching storage.*.httpx_access_token. Monitor Azure AD sign-in logs and audit trails for bearer token usage from OpenProject's service principal that coincides with unexpected file access in OneDrive or SharePoint. Check OpenProject application logs for failed or repeated OAuth refresh attempts, which may indicate token exposure or revocation. Network segmentation monitoring can flag cache backend traffic from unexpected sources.

Why prioritize this

This vulnerability scores HIGH (8.2 CVSS) due to the combination of high-impact token exposure (confidentiality and integrity breach across cloud storage), relatively low barrier to exploitation (read access to cache), and organizational scope (affects all users sharing that storage integration). While not remotely exploitable without prior access, the deterministic key structure, persistent token storage, and typical lack of cache backend hardening make it a practical attack path in many deployments. Organizations with strict data governance, regulated cloud storage use, or sensitive IP in SharePoint should prioritize this immediately.

Risk score, explained

CVSS 8.2 (HIGH) reflects: Attack Vector Network (N) because cache backends are often accessible over LAN or in containerized environments; Attack Complexity High (H) because read access to the cache backend is required; Privileges Required Low (L) because many cache systems lack authentication or allow broad read access; Scope Changed (C) because token compromise affects downstream Microsoft systems; Confidentiality High (C) because file contents and metadata in cloud storage are exposed; Integrity High (I) because files can be modified or deleted; Availability None (A) because the token itself does not enable denial-of-service. The score reflects realistic deployment practices where cache backends are insufficiently isolated.

Frequently asked questions

If we use Redis with password authentication, are we still vulnerable?

The vulnerability exists because tokens are stored unencrypted in Redis, even with password protection. A Redis password prevents unauthorized login, but once authenticated (or if credentials are compromised), an attacker can still read plaintext tokens. Additionally, many Redis deployments in non-production environments lack password protection. Encryption-at-rest—applied in patched versions—protects tokens even if Redis is accessed.

Does this affect OpenProject if we don't use OneDrive or SharePoint?

No. The vulnerability is specific to the Storages module and only manifests when OneDrive or SharePoint integration is configured and active. OpenProject deployments using only file-based storage or no cloud connectors are not affected.

Can we rotate the Azure AD token or revoke it to mitigate this?

Yes, this is a temporary mitigation. Revoke the Azure AD application's current refresh token or regenerate its credentials through the Azure AD portal. This invalidates stolen tokens, but only until the next successful OAuth refresh. Once you patch OpenProject, the new version will encrypt tokens, and you should regenerate credentials again as a best practice to ensure old tokens cannot be reused.

How do we know if we've been exploited?

Check Azure AD audit logs and OAuth token usage patterns for the OpenProject service principal—look for unexpected file access in SharePoint/OneDrive that doesn't align with known OpenProject jobs. Review cache backend access logs for repeated reads of storage.*.httpx_access_token keys. If you suspect exposure, revoke the service principal's credentials immediately, inspect file modification history in cloud storage for unauthorized changes, and escalate to your incident response team.

This analysis is provided for informational purposes to help security teams assess and remediate the vulnerability. It is not a substitute for vendor advisories, security bulletins, or your organization's risk assessment process. Verify all patch versions, affected product configurations, and remediation steps against official OpenProject documentation and your specific deployment. Test all patches in non-production environments before production rollout. SEC.co makes no warranty regarding the accuracy or completeness of this intelligence and disclaims liability for damage resulting from its use or misuse. Source: NVD (public-domain), retrieved 2026-08-05. Analysis generated by SEC.co (claude-haiku-4-5).