Skip to main content

Open edX Platform CVE-2026-85272

| EUVDEUVD-2026-83399 MEDIUM
Path Traversal (CWE-22)
2026-09-18 GitHub_M
4.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as staff with course-import permission
  2. Delivery
    Craft .tar.gz with sibling-prefix traversal member
  3. Exploit
    Upload via Studio import_olx (import_handler)
  4. Execution
    _is_bad_path startswith check passes
  5. Persist
    Extraction writes into sibling course staging dir
  6. Impact
    Limited 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 _is_bad_path's startswith check is bypassed. Exploitation is meaningfully limited to multi-tenant deployments where a vulnerable sibling course staging directory sharing the prefix exists concurrently. Zip archives are NOT viable because ZipFile.extractall strips parent-traversal segments. Impact is confined to cross-tenant file corruption - no code execution, arbitrary read, or arbitrary write outside the sibling staging area.

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 startswith containment check lets a crafted tar.gz member escape into a sibling course staging directory sharing a base64 name prefix, but the advisory explicitly disclaims arbitrary filesystem writes, arbitrary reads, and code execution - impact is limited cross-tenant file corruption (integrity-only, I:L). PR:L is the critical limiter: exploitation requires an authenticated course author or staff user who already holds course-import permission, so this is an insider/tenant-abuse or compromised-privileged-account scenario, not open remote exploitation. No EPSS score, no CISA KEV listing, and no public exploit are present in the provided data (no public exploit identified at time of analysis), consistent with a recently-disclosed, hard-to-monetize integrity bug. The 'RCE' tag conflicts directly with the advisory text, which affirmatively rules out code execution - treat the tag as mislabeled, not as evidence of higher impact. Net: real, patch it in normal cadence, but not an emergency.

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 ../<base64prefix>evil/sentinel.txt. Because _is_bad_path compares resolved path strings with startswith rather than by path component, the entry escapes its own staging directory into a sibling course's staging directory that shares the base64 name prefix, corrupting or overwriting files belonging to another tenant. No public exploit code is identified at time of analysis; the fix commits include end-to-end tests demonstrating the prefix-bypass technique.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

openedx-platform release/aspen.1, < release/ulmo.4
openedx-platform release/aspen.1, < release/verawood.1

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

Vendor (GitHub_M) PRIMARY 4.3 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 4.3 MEDIUM

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).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

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

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Medium
widely-used open-source LMS for universities and MOOCs, not ubiquitous
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

22
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +22
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

CVE-2022-46147 MEDIUM POC
6.1 Nov 28

Drag and Drop XBlock v2 implements a drag-and-drop style problem, where a learner has to drag items to zones on a target

CVE-2026-42858 CRITICAL
9.9 May 11

Server-side request forgery in the Open edX Platform SAML provider-data sync endpoint lets an authenticated user holding

CVE-2024-43782 CRITICAL
9.8 Aug 23

This openedx-translations repository contains translation files from Open edX repositories to be kept in sync with Trans

CVE-2026-53635 HIGH
7.6 Sep 02

Missing authorization on the `set_course_mode_price()` instructor endpoint in Open edX Platform allows any authenticated

CVE-2026-55421 MEDIUM
6.8 Sep 02

Server-Side Request Forgery with full response exfiltration in Open edX Platform's Studio CMS video download endpoint al

CVE-2026-85271 MEDIUM
6.1 Sep 18

HTML/CSS injection in Open edX Platform discussion-notification emails allows an authenticated, enrolled student to embe

CVE-2026-35404 MEDIUM
6.1 Apr 06

Open edX Platform versions prior to commit 76462f1e5fa9b37d2621ad7ad19514b403908970 suffer from an open redirect vulnera

CVE-2026-42857 MEDIUM
5.4 May 11

Stored cross-site scripting (XSS) via CSS injection in Open edX Platform allows enrolled students to inject arbitrary CS

CVE-2023-23611 MEDIUM
5.4 Jan 26

LTI Consumer XBlock implements the consumer side of the LTI specification enabling integration of third-party LTI provid

CVE-2026-34736 MEDIUM
5.3 Apr 02

Open edX Platform from maple release through ulmo allows unauthenticated attackers to bypass email verification by explo

CVE-2026-53636 MEDIUM
4.7 Sep 02

OAuth nonce replay attacks against Open edX LMS's LTI 1.1 Provider endpoint allow an attacker who intercepts a valid LTI

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy