Skip to main content

OpenProject EUVDEUVD-2026-39871

| CVE-2026-52781 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-06-26 GitHub_M
6.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Authenticate as low-privilege project contributor
  2. Delivery
    Upload malicious Turbo Stream attachment to OpenProject
  3. Exploit
    Inject data-controller attribute into work package description via macro element
  4. Install
    Victim navigates to affected work package
  5. C2
    Stimulus.js auto-mounts poll-for-changes controller
  6. Execute
    Controller fetches attacker attachment and calls renderStreamMessage()
  7. Impact
    Victim browser executes redirect_to attacker-controlled server

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The attacker must hold a low-privilege authenticated account in the target OpenProject instance with at minimum the permission to edit work package descriptions in at least one project (typically Contributor or Member role). The attacker must also be able to upload attachments to the OpenProject instance, as the malicious Turbo Stream payload is hosted as an uploaded file. Exploitation of victim sessions requires those victims to navigate to and load the affected work package in a browser - they need not click any link or perform any further action once on the page. Exploitation is limited to the scope of users who have view access to the affected work package. Deployments where all project members are fully trusted internal users are at significantly lower risk. The <macro> element support and Stimulus.js/Turbo Streams integration are standard components of OpenProject's default web interface and are not non-default configurations.

Impact

The official CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N scores 6.4, and the S:C (scope change) reflects the cross-user nature of stored XSS correctly. However, the UI:N designation warrants scrutiny: a victim must navigate to the affected work package, which under NVD guidance typically qualifies as UI:R; accepting UI:N inflates the score slightly. Setting UI:R yields approximately 5.4 but does not reduce the operational threat. The PR:L requirement is the primary limiting factor - exploitation is gated on authenticated contributor-level access, excluding unauthenticated internet-based attacks. The scope change combined with no-victim-action-beyond-page-load means a single injected payload propagates to all project members who view the work package, amplifying blast radius in collaborative environments. EPSS data was not provided in the input and exploitation probability cannot be independently quantified here. No CISA KEV listing and no public POC exist at time of analysis, making this a credible but not confirmed-exploited threat. Real-world priority is elevated for multi-tenant OpenProject deployments where external collaborators or untrusted project members have edit access to work packages; low for tightly controlled internal-only deployments.

Exploit ScenarioDerived

An authenticated OpenProject project member with contributor-level access edits a work package description and injects <macro data-controller="poll-for-changes" data-poll-for-changes-url-value="/api/v3/attachments/ATTACKER_ID/content"> pointing to a previously uploaded attachment containing crafted Turbo Stream markup with a redirect_to action targeting an attacker-controlled phishing server. When any other project member opens the work package in their browser, Stimulus.js silently mounts the poll-for-changes controller, fetches the malicious attachment, and renderStreamMessage() executes the redirect, sending the victim's authenticated session context to the attacker's server. No public POC is available at time of analysis, but the vulnerability mechanism is fully described in the advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jun 26, 2026

Stored XSS in OpenProject's HTML sanitizer allows authenticated project contributors to execute arbitrary Turbo Stream actions - including forced redirects - in every other user's authenticated browser session. The sanitizer's :data wildcard for <macro> elements permits injection of data-controller attributes that Stimulus.js silently mounts, chaining an attacker-uploaded attachment through renderStreamMessage() to achieve cross-user session manipulation without victim interaction beyond viewing the work package. Patch-confirmed by vendor GitHub Security Advisory GHSA-q33w-f822-hg8x; no public exploit identified at time of analysis.

RemediationAI

Upgrade to OpenProject 17.3.3 (stable) or 17.4.1 (development) as confirmed by the vendor advisory at https://github.com/opf/openproject/security/advisories/GHSA-q33w-f822-hg8x. For deployments unable to upgrade immediately, restrict work package edit permissions to fully trusted internal users only - remove contributor-level access for external collaborators or untrusted accounts, which eliminates the attacker's ability to inject the malicious data-controller payload. As an additional compensating control, review and harden the deployment's Content Security Policy headers to restrict connect-src and frame-ancestors directives, which may partially limit the impact of Turbo Stream redirect_to actions by blocking attacker-controlled cross-origin destinations; however, CSP alone does not prevent the controller from mounting or fetching the attachment. Neither workaround substitutes for the patch, as the underlying sanitizer flaw remains exploitable by any user who retains edit access.

Affected VersionsENISA

openproject 17.4.0, < 17.4.1
openproject < 17.3.3

Affected Packages

euvd openproject fix: 17.3.3, 17.4.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

OpenProject's frontend stack combines Stimulus.js (a lightweight JavaScript framework that auto-mounts controllers based on data-controller DOM attributes) with Turbo Streams (a Rails-based protocol for server-driven DOM updates via HTML fragments). The vulnerable sanitizer permits <macro> HTML elements with arbitrary data-* attributes via a :data allowlist wildcard instead of an explicit allowlist of safe attribute names. Because Stimulus.js scans the entire DOM for data-controller attributes and mounts matching controllers automatically, injecting data-controller="poll-for-changes" into a sanitized work package description is sufficient to invoke a built-in controller. That controller fetches an attacker-uploaded attachment URL and passes its content to renderStreamMessage(), which processes arbitrary Turbo Stream actions including redirect_to. The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation), specifically an overly permissive sanitizer allowlist enabling persistent script-equivalent behavior without <script> tags. Affected products are identified by CPE cpe:2.3:a:opf:openproject:*:*:*:*:*:*:*:* covering all versions prior to the patched releases.

Know when Openproject gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 6.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

UI:R assigned because victims must navigate to the work package to trigger the payload, contra the official UI:N; all other metrics align with the provided vector.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Jun 26, 2026 - 21:02 EUVD

DescriptionCVE.org

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

Threat Intelligence Overview

EPSS Score
0.1%
Top 95% exploitable
Prevalence
Medium
popular open-source project management platform, broad self-hosted enterprise adoption
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2019-11600 HIGH POC
8.1 May 13

A SQL injection vulnerability in the activities API in OpenProject before 8.3.2 allows a remote attacker to execute arbi

CVE-2023-33960 HIGH POC
7.5 Jun 01

OpenProject is web-based project management software. Rated high severity (CVSS 7.5), this vulnerability is remotely exp

CVE-2023-31140 MEDIUM POC
6.5 May 08

OpenProject is open source project management software. Rated medium severity (CVSS 6.5), this vulnerability is remotely

CVE-2026-46386 CRITICAL
9.9 Jun 26

Authenticated remote code execution affects the official openproject/openproject Docker image, which ships with a hardco

CVE-2026-52782 CRITICAL
9.9 Jun 26

Cross-project folder hijacking in OpenProject before 17.3.3 and 17.4.1 lets a project-admin abuse an insecure direct obj

CVE-2026-52785 CRITICAL
9.9 Jun 26

SQL injection in OpenProject's baseline-comparison (timestamps) functionality lets an authenticated, low-privileged user

CVE-2026-25763 CRITICAL POC
9.9 Feb 06

OpenProject has a CVSS 9.9 command injection vulnerability allowing authenticated users to execute OS commands on the pr

CVE-2026-52780 CRITICAL
9.6 Jun 26

Remote code execution in OpenProject before 17.3.3 and 17.4.1 arises from cache store poisoning, allowing an attacker wi

CVE-2026-32698 CRITICAL
9.1 Mar 18

OpenProject, a web-based project management platform, contains a critical SQL injection vulnerability in versions prior

CVE-2026-22600 CRITICAL
9.1 Jan 10

OpenProject (before 16.6.4) has a local file read vulnerability through SVG-based ImageMagick exploitation in the PDF ex

CVE-2026-32703 CRITICAL
9.0 Mar 18

OpenProject's Repositories module contains a stored cross-site scripting (XSS) vulnerability that occurs when displaying

CVE-2026-24772 HIGH
8.9 Jan 28

Token decryption in OpenProject 17.0 allows authenticated attackers to intercept and decrypt 24-hour authentication toke

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy