Skip to content
Heist/ feed
Back to feed
Medium

Open edX Platform: Path traversal via prefix-bypass in safe_extractall Path Validation

Type: advisorySources: OSV

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.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-85272
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 20:41 UTC · Revision 1

Source evidence

Open edX Platform: Path traversal via prefix-bypass in safe_extractall Path Validation

core-osv · Original source

Published 18 Sept 2026, 20:27 UTC

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.

osv:CVE-2026-85272
Complete source record
{
  "id": "699a9b1def969009ea08a730a54794b4fadc3cc21e0acb3e3481d0b904cac85f",
  "url": "https://osv.dev/vulnerability/CVE-2026-85272",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Open edX Platform: Path traversal via prefix-bypass in safe_extractall Path Validation",
    "summary": "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.",
    "evidence": "osv:CVE-2026-85272",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-85272",
      "aliases": [
        "CVE-2026-85272",
        "GHSA-6cmm-8875-5pcw"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/openedx/openedx-platform",
              "type": "GIT",
              "events": [
                {
                  "introduced": "142bb24065fa23eeaf9806a560762aa00013f296"
                },
                {
                  "fixed": "8422334e2063015a28b6460a34aa4bb4d8ae1ca8"
                },
                {
                  "fixed": "97de0586d878936c9f97c03fdaa20346ee8eac29"
                },
                {
                  "fixed": "e552907ff33a7b2e53f99b819123c9dacdfc127a"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": ">= release/aspen.1, < release/ulmo.4"
                      },
                      {
                        "last_affected": ">= release/aspen.1, < release/ulmo.4"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandaloneSingleVersion"
                  },
                  {
                    "range": [
                      {
                        "introduced": ">= release/aspen.1, < release/verawood.1"
                      },
                      {
                        "last_affected": ">= release/aspen.1, < release/verawood.1"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandaloneSingleVersion"
                  },
                  {
                    "range": [
                      {
                        "fixed": "8422334e2063015a28b6460a34aa4bb4d8ae1ca8"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "97de0586d878936c9f97c03fdaa20346ee8eac29"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "e552907ff33a7b2e53f99b819123c9dacdfc127a"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            ">= release/aspen.1, < release/ulmo.4",
            ">= release/aspen.1, < release/verawood.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-85272.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:51.696270327Z",
      "provider": "osv",
      "references": [
        "https://github.com/openedx/openedx-platform/releases/tag/release/ulmo.4",
        "https://github.com/openedx/openedx-platform/releases/tag/release/verawood.1",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/85xxx/CVE-2026-85272.json",
        "https://github.com/openedx/openedx-platform/security/advisories/GHSA-6cmm-8875-5pcw",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-85272",
        "https://github.com/openedx/openedx-platform/commit/8422334e2063015a28b6460a34aa4bb4d8ae1ca8",
        "https://github.com/openedx/openedx-platform/commit/97de0586d878936c9f97c03fdaa20346ee8eac29",
        "https://github.com/openedx/openedx-platform/commit/e552907ff33a7b2e53f99b819123c9dacdfc127a"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-22"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/85xxx/CVE-2026-85272.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-85272",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 520345,
  "published_at": "2026-09-18T20:27:44.396+00:00"
}