CVE-2026-52781
Deferred Deferred - Pending Action
Stored XSS in OpenProject via Macro HTML Sanitizer Bypass

Publication date: 2026-06-26

Last updated on: 2026-06-26

Assigner: GitHub, Inc.

Description
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.
CVSS Scores
EPSS Scores
Probability:
Percentile:
Meta Information
Published
2026-06-26
Last Modified
2026-06-26
Generated
2026-06-27
AI Q&A
2026-06-26
EPSS Evaluated
N/A
NVD
EUVD
Affected Vendors & Products
Showing 1 associated CPE
Vendor Product Version / Range
openproject openproject to 17.3.3 (exc)
Helpful Resources
Exploitability
CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-79 The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Attack-Flow Graph
AI Quick Actions
Instant insights powered by AI
Detection Guidance

This vulnerability can be detected by monitoring for suspicious POST requests to the /api/v3/projects/{project}/work_packages endpoint, specifically those containing the "description" parameter with injected data-controller="poll-for-changes" attributes.

You can use network traffic inspection tools or web application firewall (WAF) logs to identify such requests.

Example commands to detect suspicious payloads in logs or live traffic might include:

  • Using grep on server logs: grep -i 'data-controller="poll-for-changes"' /var/log/openproject/access.log
  • Using curl to test injection: curl -X POST -d 'description=<macro data-controller="poll-for-changes">' https://your-openproject-instance/api/v3/projects/{project}/work_packages
  • Using network packet capture tools like tcpdump or Wireshark to filter HTTP POST requests to the vulnerable endpoint and inspect payloads for suspicious data-controller attributes.
Mitigation Strategies

The immediate mitigation step is to upgrade OpenProject to version 17.3.3, 17.4.1, or later, where the vulnerability has been fixed.

Until the upgrade can be performed, consider implementing web application firewall (WAF) rules to block requests containing the suspicious data-controller="poll-for-changes" attribute in the description parameter.

Additionally, review and restrict user privileges to limit the ability to inject malicious content.

Executive Summary

This vulnerability is a stored cross-site scripting (XSS) issue in OpenProject versions prior to 17.3.3. It occurs because the HTML sanitizer allows unrestricted data-* attributes on <macro> elements, including data-controller="poll-for-changes." An attacker can inject this attribute into a work package description, causing Stimulus.js to mount a controller that fetches an attacker-uploaded attachment and executes arbitrary Turbo Stream actions.

These actions include redirecting every authenticated victim's browser session to an attacker-controlled server. The vulnerability requires low privileges and no user interaction to exploit.

Impact Analysis

This vulnerability can impact you by allowing an attacker to execute arbitrary actions in the context of your authenticated browser session. Specifically, it can redirect your browser to a malicious server controlled by the attacker.

Because the attack affects confidentiality and integrity, sensitive information could be exposed or manipulated without your consent.

Compliance Impact

The vulnerability allows attackers to execute arbitrary actions in authenticated users' browser sessions, including redirecting them to attacker-controlled servers. This results in a compromise of confidentiality and integrity of user data within the application.

Such unauthorized access and manipulation of data could potentially lead to non-compliance with data protection regulations like GDPR and HIPAA, which require safeguarding personal and sensitive information against unauthorized access and ensuring data integrity.

Chat Assistant
Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-52781. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70
EPSS Chart