CVE-2026-52781: OpenProject HTML Sanitization Bypass Allows Unauthorized Redirects
OpenProject, a popular open-source project management platform, contains a vulnerability in how it sanitizes HTML content in work package descriptions. An attacker with login credentials can inject malicious code that exploits Stimulus.js, a JavaScript framework, to automatically execute commands in the browsers of other authenticated users. This could redirect victims to phishing sites or other attacker-controlled locations without their knowledge. The flaw affects all versions before 17.3.3 and 17.4.1.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.4 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Weaknesses (CWE)
- CWE-79
- 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, 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.
1 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability resides in OpenProject's HTML sanitization layer, which fails to adequately restrict data-* attributes on <macro> elements. An authenticated attacker crafts a work package description containing data-controller="poll-for-changes", which binds to a Stimulus controller. When the description is viewed, this controller fetches an attacker-controlled attachment and passes its contents to Turbo Stream's renderStreamMessage() function. Turbo Stream then interprets and executes arbitrary stream actions—including redirect_to—in the victim's authenticated session context. The issue stems from overly permissive sanitization rules that allow :data wildcard patterns rather than explicit attribute whitelisting.
Business impact
Organizations using OpenProject face unauthorized session hijacking of authenticated users. An internal actor or attacker with valid credentials can silently redirect employees to malicious websites, phishing pages, or credential-harvesting sites during normal project management workflows. This is particularly risky in multi-team environments where work packages are widely shared. The attack requires no user interaction beyond viewing a compromised work package, making it difficult to detect or prevent without patching. Incident response teams may struggle to trace redirects back to their source if logging is incomplete.
Affected systems
OpenProject versions prior to 17.3.3 (in the 17.3.x branch) and prior to 17.4.1 (in the 17.4.x branch) are affected. The vulnerability requires an authenticated user account to inject the malicious payload, so only instances with user registration or shared team environments face direct risk. Self-hosted and SaaS deployments are equally vulnerable if not updated.
Exploitability
Exploitation requires prior authentication to the OpenProject instance, which limits the attack surface to internal users or individuals with valid credentials obtained through other means. However, once authenticated, the attack is trivial to execute—no special privileges, complex interaction, or client-side user action is needed beyond a victim viewing the infected work package. The payload is stored in the work package description, ensuring persistence and broad reach across the team. This combination of low complexity and high impact makes the vulnerability moderately dangerous in collaborative environments.
Remediation
Upgrade OpenProject to version 17.3.3 or later (for 17.3.x deployments) or to version 17.4.1 or later (for 17.4.x deployments). These versions implement stricter HTML sanitization that explicitly whitelists safe data-* attributes rather than permitting wildcards. Verify the patched version before and after deployment. Organizations unable to patch immediately should restrict work package visibility to trusted users and monitor for suspicious redirects in web server logs.
Patch guidance
OpenProject maintainers have released fixes in versions 17.3.3 and 17.4.1. Review your current version via the OpenProject admin dashboard or command line (openproject --version). Plan a maintenance window to apply the update, as it may require a restart of the application server. Test the update in a staging environment first to confirm compatibility with any custom macros or extensions. After patching, confirm that Stimulus controllers are correctly bound and that no legacy data-* attributes remain in existing work package descriptions. Refer to the official OpenProject release notes for detailed upgrade procedures.
Detection guidance
Search your OpenProject instance for work package descriptions containing data-controller="poll-for-changes" or similar suspicious data-* attribute patterns. Enable HTTP request logging and alert on redirect_to actions originating from Turbo Stream responses. Monitor for unusual attachment uploads by users with edit permissions on shared work packages. Correlate any user-reported unexpected redirects during project management sessions with the timestamps of work package updates. If your instance is internet-facing, analyze web server logs for abnormal referrer patterns or destination IPs associated with your OpenProject domain.
Why prioritize this
Although the CVSS score is 6.4 (MEDIUM), the vulnerability should be treated as HIGH priority in collaborative environments. The attack requires authentication but no user interaction, achieves session-level privilege escalation effects, and affects all authenticated users viewing a compromised work package. The reputational and compliance risk of unauthorized redirects, combined with the trivial exploitation difficulty, justifies rapid patching. Organizations using OpenProject for sensitive project planning or with non-technical user bases should prioritize this within days rather than weeks.
Risk score, explained
CVSS 3.1 score of 6.4 reflects: Network-accessible attack vector (AV:N), low attack complexity (AC:L), low privilege requirement (PR:L), no user interaction needed (UI:N), and scope change (S:C) because the attack affects other authenticated users. Confidentiality and integrity are slightly impacted (C:L, I:L) through potential phishing and session manipulation, but availability is not directly compromised (A:N). The score appropriately captures authentication as a prerequisite but does not fully weight the ease of exploitation or the insider threat dimension; contextualize this as MEDIUM within your organization's risk model, adjusting upward if OpenProject hosts critical or sensitive projects.
Frequently asked questions
Do I need to be an administrator to exploit this vulnerability?
No. Any authenticated user—including standard project members—can inject the malicious payload into a work package description they have edit permissions for. Administrator privileges are not required.
Will patching my OpenProject instance delete existing malicious work packages?
No. Patching prevents new exploits but does not sanitize existing work packages. After upgrading, audit your work packages for suspicious data-* attributes and remove or edit them manually. The patch prevents the browser from executing such payloads going forward.
If I restrict work package visibility to my team, am I protected?
Restricting visibility reduces exposure but does not eliminate risk. Any team member with edit permissions can still inject the payload, and all viewers remain vulnerable. Patching is the proper fix; visibility restrictions are a temporary mitigation only.
How can I tell if someone has exploited this vulnerability in my instance?
Search work package descriptions and comments for data-controller attributes and unusual attachment uploads. Check your web server access logs for sudden redirects or unusual Turbo Stream requests. If users report unexpected browser redirects while using OpenProject, investigate concurrent work package edits.
This analysis is provided for informational purposes and reflects publicly disclosed information as of the publication date. CVSS scores and severity ratings are based on the official CVE record and may not account for your organization's specific context, asset criticality, or risk tolerance. Always verify patch applicability and compatibility within your environment before deploying updates. If you believe you have been exploited, engage your security incident response team immediately. This assessment does not constitute legal or compliance advice. Source: NVD (public-domain), retrieved 2026-08-05. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2016-20070MEDIUMPrivilege Escalation & Stored XSS in WordPress Booking Calendar Contact Form 1.0.23
- CVE-2018-25384MEDIUMStored XSS in Wikidforum 2.20 Allows Authenticated Attackers to Inject Malicious Scripts
- CVE-2019-25731MEDIUMStored XSS in Zuz Music 2.1 Contact Form
- CVE-2019-25737MEDIUMStored XSS in Live Chat Unlimited 2.8.3 – Admin Session Compromise
- CVE-2019-25739MEDIUMGigToDo 1.3 Stored XSS Vulnerability in Proposal Descriptions
- CVE-2019-25742MEDIUMStored XSS in Zoner Real Estate WordPress Theme 4.1.1 – Admin Account Compromise Risk
- CVE-2019-25743MEDIUMWordPress Soliloquy Lite 2.5.6 Stored XSS Vulnerability
- CVE-2019-25744MEDIUMWordPress Popup Builder 3.49 Stored XSS Vulnerability – Exploit Prevention & Patch Guide