CVE-2026-85271 in Open edX Platforminfo

Summary

by MITRE • 09/18/2026

Open edX Platform enables the authoring and delivery of online learning at any scale. From Redwood until Ulmo and Verawood.1, the add_additional_attributes_to_notifications function in openedx/core/djangoapps/notifications/email/utils.py assigns notification content without sanitizing discussion-title values produced by get_notification_content in openedx/core/djangoapps/notifications/base_notification.py. An enrolled student can place CSS-capable markup in the post_title value supplied by lms/djangoapps/discussion/rest_api/discussions_notifications.py. Digest and batched-email rendering then passes that value through openedx/core/djangoapps/notifications/templates/notifications/digest_content.html as safe HTML, allowing email-open tracking and content spoofing or phishing when another learner opens a CSS-rendering client. The immediate-email path is not affected because it strips title markup and renders a separately sanitized body. This issue is fixed in Ulmo and Verawood.1.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 09/18/2026

The Open edX platform, widely utilized for scalable online learning delivery, contains a critical security vulnerability within its notification system that allows for Cross-Site Scripting attacks via email clients. Specifically, the flaw resides in the add_additional_attributes_to_notifications function located in openedx/core/djangoapps/notifications/email/utils.py. This component is responsible for preparing notification content for transmission but fails to properly sanitize discussion-title values retrieved from get_notification_content in openedx/core/djangoapps/notifications/base_notification.py. The vulnerability affects versions ranging from Redwood through Ulmo and Verawood.1, creating a significant risk vector for enrolled users within the platform ecosystem.

The attack mechanism exploits how post_title values are handled when generated by lms/djangoapps/discussion/rest_api/discussions_notifications.py. An authenticated student with permission to create discussion posts can inject CSS-capable markup into these titles. When the system processes digest or batched emails, it passes this unsanitized title through openedx/core/djangoapps/notifications/templates/notifications/digest_content.html as safe HTML. This configuration choice effectively disables browser-level protections against script execution within the email context, allowing malicious scripts to execute when a recipient opens the notification using an email client that supports CSS and JavaScript rendering.

The operational impact of this vulnerability extends beyond simple data leakage. Attackers can leverage the executed code for content spoofing or phishing campaigns targeting other learners who receive these notifications. By injecting custom styles and scripts, an attacker could manipulate the visual appearance of the email to mimic legitimate platform elements, thereby deceiving users into revealing credentials or clicking on malicious links. Additionally, the execution environment allows for email-open tracking, enabling attackers to confirm active user accounts and gather intelligence on recipient behavior without their knowledge. This undermines both confidentiality and integrity within the learning management system.

It is important to note that this vulnerability does not affect all notification paths equally. The immediate-email path remains secure because it explicitly strips title markup and renders a separately sanitized body, preventing script execution in real-time notifications. However, the batched processing logic lacks these safeguards, creating an inconsistent security posture where only delayed communications are vulnerable. This inconsistency may lead to false confidence among administrators who assume all notification channels are equally protected.

To mitigate this risk, organizations running affected versions must upgrade immediately to Ulmo or Verawood.1, where the issue has been resolved through proper input sanitization and output encoding practices. Until an upgrade is feasible, administrators should consider disabling digest notifications if possible, as these represent the primary attack surface for this vulnerability. Security teams should also monitor email logs for unusual patterns that might indicate exploitation attempts. From a standards perspective, this flaw aligns with CWE-79 Improper Neutralization of Input During Web Page Generation commonly known as Cross-site Scripting and maps to ATT&CK techniques related to Client-side Execution such as T1059 Command and Scripting Interpreter or T1204 User Execution depending on the specific payload delivered. Proper implementation of Content Security Policy headers in email clients can also provide an additional layer of defense, although reliance on client-side controls is not a substitute for server-side sanitization.

Responsible

GitHub M

Reservation

09/03/2026

Disclosure

09/18/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!