Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as staff with course-import permission
-
DeliveryCraft .tar.gz with sibling-prefix traversal member
-
ExploitUpload via Studio import_olx (import_handler)
-
Execution_is_bad_path startswith check passes
-
PersistExtraction writes into sibling course staging dir
-
ImpactLimited cross-tenant file corruption
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated course author or staff user holding course-import permission in Open edX Studio (CMS), on a version from Aspen.1 up to but not including Ulmo/Verawood.1. The attacker must submit a crafted .tar.gz (gzip tar) archive through the import_olx flow (cms.djangoapps.contentstore.views.import_export.import_handler); the malicious member must use a path that extends the target staging directory's base64 name as a string prefix so |
| Impact | This is a genuine but low-severity issue whose real-world priority is modest. The vendor CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N = 4.3 Medium) is well-calibrated to the described flaw: a segment-unaware |
| Exploit ScenarioDerived | An authenticated course author or staff user with course-import rights on a multi-tenant Open edX instance uploads a crafted .tar.gz through the Studio (CMS) import_olx flow containing a member path like |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Authenticated course authors or staff holding course-import permission in Open edX Studio (CMS) can break out of the intended extraction directory by importing a crafted .tar.gz archive, because openedx/core/lib/extract_archive.py validated archive member paths with a string startswith comparison instead of a segment-aware containment check. The impact is limited to cross-tenant file corruption: an archive member whose path extends a sibling course staging directory's base64 name as a string prefix can be written into that neighbouring staging area, and the advisory does not establish arbitrary filesystem writes, file reads, or code execution. The flaw affects Open edX releases from Aspen.1 up to but not including Ulmo and Verawood.1, requires PR:L (authenticated) network access per the CVSS vector, scores 4.3, and there is no public exploit identified at time of analysis; while the ingested tags include an 'RCE' label, our assessment confirms that no code-execution primitive is demonstrated by the advisory.
RemediationAI
Vendor-released patch: upgrade to Ulmo 4 (release/ulmo.4) or Verawood.1, which contain the corrected _is_bad_path implementation; site operators on Aspen.1 through the last release before Ulmo should treat deploying the upstream commits (8422334e2063015a28b6460a34aa4bb4d8ae1ca8, 97de0586d878936c9f97c03fdaa20346ee8eac29, e552907ff33a7b2e53f99b819123c9dacdfc127a) or backporting the commonpath-based check as the primary fix, per the advisory at https://github.com/openedx/openedx-platform/security/advisories/GHSA-6cmm-8875-5pcw. Because exploitation requires the course-import permission, the most effective compensating control is to restrict Studio import rights to a small, trusted set of course authors and remove the permission from staff who do not need it, accepting that this slows legitimate course maintenance; additionally, serialise or tightly schedule imports in multi-tenant installations so vulnerable sibling staging directories with matching base64 prefixes are less likely to coexist during an extraction, at the cost of reduced import concurrency. Blocking or stripping .tar.gz course imports entirely is not a realistic mitigation because it breaks the OLX import workflow, and note that zip-based imports are not affected by this specific bypass, so migrating packaging to zip where feasible removes the exposure without further code changes. Existing deployments should also scan course staging directories for unexpected files written into sibling paths and audit import activity by low-trust accounts, since no vendor-supplied detection or exploit code is required for a malicious author to attempt this.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerable code lives in openedx/core/lib/extract_archive.py, which wraps archive extraction for course imports (OLX .tar.gz packages). Its _is_bad_path helper resolved the join of the extraction base directory with each archive member path and then compared the result against the base using Python's str.startswith. That is a classic CWE-22 root cause: a prefix comparison is not a directory-boundary check, so a sibling path such as <parent>/Y29evil/file passes when the base is <parent>/Y29, even though it lies outside the base. The upstream fix (commit 8422334e2063015a28b6460a34aa4bb4d8ae1ca8, with companion commits 97de0586d878936c9f97c03fdaa20346ee8eac29 and e552907ff33a7b2e53f99b819123c9dacdfc127a) replaces the string test with os.path.commonpath([target, base]) != base, wrapping the call in a try/except ValueError that treats incomparable paths (mixed absolute/relative, or different drives on Windows) as bad. The accompanying test module pins the boundary with cases for prefix-bypass files, symlink targets pointing at a sibling directory, and legitimate in-base members. Reaching this code requires the authenticated import_olx flow implemented in cms.djangoapps.contentstore.views.import_export.import_handler; ZipFile.extractall strips parent-traversal segments, so zip archives are not practically exploitable through the same path.
Know when Openedx 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:N/S:U/C:N/I:L/A:N
Network-reachable Studio import by an authenticated import-privileged user (PR:L, UI:N); no confidentiality or availability impact, only limited integrity-affecting cross-tenant file corruption (I:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
Open edX Platform enables the authoring and delivery of online learning at any scale. From Aspen.1 until Ulmo and Verawood.1, openedx/core/lib/extract_archive.py uses _is_bad_path to validate safe_extractall targets by comparing resolved path strings with startswith instead of comparing path components. A course author or staff user with course import permission can submit a crafted .tar.gz archive through the import_olx flow initiated by cms.djangoapps.contentstore.views.import_export.import_handler. An archive member can therefore escape into a sibling course staging directory whose name shares the attacker's base64 directory prefix, causing limited cross-tenant file corruption. Zip archives are not practically affected because ZipFile.extractall strips parent traversal segments, and the advisory does not establish arbitrary filesystem writes, file reads, or direct code execution. This issue is fixed in Ulmo and Verawood.1.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Drag and Drop XBlock v2 implements a drag-and-drop style problem, where a learner has to drag items to zones on a target
Server-side request forgery in the Open edX Platform SAML provider-data sync endpoint lets an authenticated user holding
This openedx-translations repository contains translation files from Open edX repositories to be kept in sync with Trans
Missing authorization on the `set_course_mode_price()` instructor endpoint in Open edX Platform allows any authenticated
Server-Side Request Forgery with full response exfiltration in Open edX Platform's Studio CMS video download endpoint al
HTML/CSS injection in Open edX Platform discussion-notification emails allows an authenticated, enrolled student to embe
Open edX Platform versions prior to commit 76462f1e5fa9b37d2621ad7ad19514b403908970 suffer from an open redirect vulnera
Stored cross-site scripting (XSS) via CSS injection in Open edX Platform allows enrolled students to inject arbitrary CS
LTI Consumer XBlock implements the consumer side of the LTI specification enabling integration of third-party LTI provid
Open edX Platform from maple release through ulmo allows unauthenticated attackers to bypass email verification by explo
OAuth nonce replay attacks against Open edX LMS's LTI 1.1 Provider endpoint allow an attacker who intercepts a valid LTI
EUVD-2026-83399
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB