Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as planner user
-
DeliveryPOST crafted SVG to /planner/attachments/
-
ExploitBlocklist omission allows image/svg+xml
-
ExecutionVictim opens public attachment URL
-
ImpactEmbedded script executes for phishing/content spoofing
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 | Exploitation requires (1) an authenticated account permitted to use the POST /planner/attachments/ endpoint, and (2) a victim to actively open the resulting public attachment URL. The specific technical prerequisite is that the uploaded SVG is served with the image/svg+xml content type (or HTML served as text/html), which conf/configs/common.py failed to list in BLOCKED_ATTACHMENT_EXTENSIONS / BLOCKED_ATTACHMENT_MIME_TYPES prior to 2.2.60. A critical LIMITING factor is that attachments are served from a SEPARATE ORIGIN from the application, so the same-origin policy blocks the script from reading application cookies, tokens, or storage - restricting realistic impact to phishing and persistent spoofed content rather than session or account compromise. Affected versions are those prior to 2.2.60. |
| Impact | This is a genuinely low-priority issue despite being network-reachable. The CVSS vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N) scores 3.5 (Low), and the signals are internally consistent rather than conflicting: network vector but requires authentication (PR:L) to upload the attachment, and victim interaction (UI:R) to open the malicious public URL. The most important risk-limiting signal comes from the description itself, not the vector: the attachment storage uses a SEPARATE ORIGIN from the application, so the same-origin policy prevents the injected SVG/HTML script from reading application cookies or storage - meaning this is NOT a classic session-stealing stored XSS, and the maintainer explicitly states application-session compromise is not supported by the deployment configuration. Impact is therefore confined to persistent attacker-controlled active content and phishing served under a trusted-looking application-managed URL (hence C:N, I:L, A:N). No EPSS score was provided in the input, and KEV status is NO and POC status is not indicated - there is no public exploit identified at time of analysis. Net: a real but low-severity hygiene/phishing-surface issue, not an urgent remote-code or credential-theft threat. |
| Exploit ScenarioDerived | An authenticated Helium user uploads a crafted SVG (served as image/svg+xml) or HTML file as a planner attachment, which the blocklist in conf/configs/common.py fails to reject. The attacker then distributes the public attachment URL; when a visitor opens it, the embedded script executes in the attachment-origin context, enabling convincing phishing under an application-managed storage URL. No public exploit code was identified in the input, though the fix commit (f0de5c98) makes the vulnerable code path straightforward to reconstruct. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Persistent cross-site scripting in the HeliumEdu Platform student planner (all versions prior to 2.2.60) lets an authenticated user upload SVG or HTML files through POST /planner/attachments/ and have embedded script execute when a victim opens the resulting public attachment URL, enabling spoofed content and phishing under an application-managed storage URL. Exploitation is constrained: the attacker must already hold an account permitted to use the attachments endpoint, and the victim must actively open the link (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N, base score 3.5), because attachments are served from a separate origin from the application. That origin separation means the browser's same-origin policy blocks the injected script from reading application cookies, tokens, or storage, so session or account compromise is not supported by the maintained deployment configuration; no public exploit code was identified at time of analysis and the issue is not listed in CISA KEV. This is a genuinely low-priority issue despite being network-reachable, and it is fixed in version 2.2.60.
RemediationAI
Upgrade HeliumEdu Platform to version 2.2.60 or later, which is the vendor-released patch; it expands BLOCKED_ATTACHMENT_EXTENSIONS with .html, .htm, .xhtml, .svg, .svgz, .xml, .xsl, .xslt, .js, .mjs, .hta, .vbs, .vbe, .wsf, .lnk, .msi, .dmg, .pkg, .apk and .jar and correspondingly extends BLOCKED_ATTACHMENT_MIME_TYPES with browser-executable types including image/svg+xml, text/html, application/xhtml+xml, text/xml, application/xml, text/javascript and application/javascript (upstream fix commit f0de5c985c701942758b805a3d11dfb008a6af88; advisory GHSA-7r65-76fw-ch5c). Apply the same lists to any deployment that pre-dates the release and confirm the version string in conf/configs/common.py is 2.2.60 or higher. If upgrading is not immediately possible, the most effective compensating control is to force attachments to download rather than render, by serving the storage origin with Content-Disposition: attachment and a neutral Content-Type such as application/octet-stream - this eliminates SVG/HTML script execution but breaks inline image and document previews for legitimate users. Additionally, add a Content-Security-Policy of "sandbox; default-src 'none'" (or serve attachments from a cookieless, script-inert origin, which this deployment already does) to contain any residual active content, and restrict the attachments upload permission to trusted accounts; note that both measures reduce functionality and that a strict upload allowlist of known-safe image and document types is a safer long-term design than any denylist. Because exploitation requires an authenticated uploader plus a victim who opens the link, detection should focus on audit logs for SVG/HTML uploads to /planner/attachments/ and on identifying attachment URLs that are being distributed externally.
Affected VersionsENISA
Affected Packages
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
Helium is a Django-based web application whose attachment handling lives in the planner module. Uploads reach the AttachmentSerializer in helium/planner/serializers/attachmentserializer.py, which consulted the denylists BLOCKED_ATTACHMENT_EXTENSIONS and BLOCKED_ATTACHMENT_MIME_TYPES defined in conf/configs/common.py to decide what could be stored. Prior to 2.2.60 those lists omitted browser-executable formats - notably .svg/.svgz and .html/.htm/.xhtml along with the image/svg+xml, text/html and application/xhtml+xml content types - so a file the browser treats as active content could be persisted and later served back. The root cause class is CWE-79 (improper neutralization of input during web page generation), realized here as stored XSS: SVG documents support inline <script> and event-handler attributes, and when the file is fetched directly from its public URL the browser renders it as a document rather than as a passive image, executing attacker-supplied script in the attachment origin. The design deliberately separates the storage origin from the application origin, which downgrades the finding from session theft to persistent spoofed content and credential-harvesting phishing pages hosted on a trusted-looking domain. The fix commit f0de5c985c701942758b805a3d11dfb008a6af88 also adds a new helium/common/utils/httputils.py helper (urlopen_secure) with DNS-resolution SSRF checks and redirect re-validation used by webhooksesview.py, indicating 2.2.60 is a broader security-hardening release; that SSRF work is adjacent hardening, not the subject of this CVE.
Know when Platform 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
AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N
Authenticated upload (PR:L) plus victim must open the URL (UI:R); separate-origin storage blocks cookie/data theft so C:N/A:N and only limited integrity impact (I:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Helium is a free online student planner for classes, homework, grades, and notes. Prior to 2.2.60, the POST /planner/attachments/ endpoint allows authenticated users to upload SVG and HTML attachments because conf/configs/common.py omits those formats from BLOCKED_ATTACHMENT_EXTENSIONS and BLOCKED_ATTACHMENT_MIME_TYPES, and helium/planner/serializers/attachmentserializer.py relies on those blocklists. An uploaded SVG served as image/svg+xml can execute embedded script when a visitor opens its public attachment URL, allowing persistent attacker-controlled active content and phishing under an application-managed storage URL. The attachment storage uses a separate origin from the application, so same-origin policy prevents the script from reading application cookies or storage, and application-session compromise is not supported by the maintained deployment configuration. This issue is fixed in version 2.2.60.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Server-side request forgery in Huly Platform's /import endpoint allows authenticated workspace users to coerce the front
Affected 1E Platform versions have a Blind SQL Injection vulnerability that can lead to arbitrary code execution. Rated
Orchid is a Laravel package that allows application development of back-office applications, admin/user panels, and dash
Pega Platform before version 8.2.6 is affected by a Stored Cross-Site Scripting (XSS) vulnerability in the comment tags.
The Richtext Editor in Pega Platform before 8.2.6 is affected by a Stored Cross-Site Scripting (XSS) vulnerability. Rate
Improper privilege management in runZero Platform allows organization administrators to escalate privileges to superuser
Improper link resolution before file access in the Nomad module of the 1E Client, in versions prior to 25.3, enables an
Incorrect access control in the component ApiPayController.java of platform v1.0.0 allows attackers to access sensitive
Incorrect access control in the component orderService.queryObject of platform v1.0.0 allows attackers to access sensiti
Incorrect access control in the component ApiOrderService.java of platform v1.0.0 allows attackers to access sensitive i
The 1E-Exchange-DisplayMessageinstruction that is part of the End-User Interaction product pack available on the 1E Exch
The 1E-Exchange-CommandLinePing instruction that is part of the Network product pack available on the 1E Exchange does n
EUVD-2026-102221
NVD
CVE.org
EPSS
GitHub
Exploit-DB