Skip to content
Heist/ feed
Back to feed
High

Mage AI through 0.9.79 Arbitrary File Read via Unvalidated Path in browser_items Endpoint

Type: advisorySources: OSV

Mage AI does not confine the paths accepted by its browser-items API to the project directory. BrowserItemResource in mage_ai/api/resources/BrowserItemResource.py passes a caller-supplied path to the filesystem read and write helpers without calling the containment helper that the sibling FileContentResource and FileResource classes both use, so the resource contains no such call while those two contain several. A user holding the Viewer role, which grants read access within the project and nothing outside it, can therefore read any file the server process can read by supplying an absolute path. The permission model that would otherwise separate roles is not consulted for this route in the default configuration, because the setting that enables it defaults to false. Callers holding the Editor role additionally write through the same unconfined path, though that role is already able to execute code by design, so the boundary crossed by this flaw is the read available to the Viewer role.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-81030
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 18:14 UTC · Revision 1

Source evidence

Mage AI through 0.9.79 Arbitrary File Read via Unvalidated Path in browser_items Endpoint

core-osv · Original source

Published 26 Aug 2026, 15:44 UTC

Mage AI does not confine the paths accepted by its browser-items API to the project directory. BrowserItemResource in mage_ai/api/resources/BrowserItemResource.py passes a caller-supplied path to the filesystem read and write helpers without calling the containment helper that the sibling FileContentResource and FileResource classes both use, so the resource contains no such call while those two contain several. A user holding the Viewer role, which grants read access within the project and nothing outside it, can therefore read any file the server process can read by supplying an absolute path. The permission model that would otherwise separate roles is not consulted for this route in the default configuration, because the setting that enables it defaults to false. Callers holding the Editor role additionally write through the same unconfined path, though that role is already able to execute code by design, so the boundary crossed by this flaw is the read available to the Viewer role.

osv:CVE-2026-81030
Complete source record
{
  "id": "60241d461900964eb37155f5ca3d502e3a968b1940e15c7c91e096b306f16774",
  "url": "https://osv.dev/vulnerability/CVE-2026-81030",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Mage AI through 0.9.79 Arbitrary File Read via Unvalidated Path in browser_items Endpoint",
    "summary": "Mage AI does not confine the paths accepted by its browser-items API to the project directory. BrowserItemResource in mage_ai/api/resources/BrowserItemResource.py passes a caller-supplied path to the filesystem read and write helpers without calling the containment helper that the sibling FileContentResource and FileResource classes both use, so the resource contains no such call while those two contain several. A user holding the Viewer role, which grants read access within the project and nothing outside it, can therefore read any file the server process can read by supplying an absolute path. The permission model that would otherwise separate roles is not consulted for this route in the default configuration, because the setting that enables it defaults to false. Callers holding the Editor role additionally write through the same unconfined path, though that role is already able to execute code by design, so the boundary crossed by this flaw is the read available to the Viewer role.",
    "evidence": "osv:CVE-2026-81030",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-81030",
      "aliases": [
        "CVE-2026-81030"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/mage-ai/mage-ai",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "last_affected": "6f953279bbe0ac92152cc19d45436b0923c022ff"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "last_affected": "0.9.79"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  }
                ]
              }
            }
          ],
          "versions": [
            "0.9.79",
            "0.9.78",
            "0.9.77",
            "0.9.76",
            "0.9.75",
            "0.9.74",
            "0.9.73",
            "0.9.72",
            "0.9.71",
            "0.9.70",
            "0.9.68",
            "0.9.66",
            "0.9.65",
            "0.9.64",
            "0.9.63",
            "0.9.62",
            "0.9.60",
            "0.9.59",
            "0.9.50",
            "0.9.48",
            "0.9.46",
            "0.9.45",
            "0.9.43",
            "0.9.41",
            "0.9.38",
            "0.9.35",
            "0.9.34",
            "0.9.30",
            "0.9.28",
            "0.9.26",
            "0.9.23",
            "0.9.21",
            "0.9.19",
            "0.9.16",
            "0.9.14",
            "0.9.11",
            "0.9.10",
            "0.9.8",
            "0.9.4",
            "0.9.0",
            "0.8.93",
            "0.8.86",
            "0.8.83",
            "0.8.78",
            "0.8.75",
            "0.8.69",
            "0.8.58",
            "0.8.52",
            "0.8.44",
            "0.8.37",
            "0.8.29",
            "0.8.27",
            "0.8.24",
            "0.8.15",
            "0.8.11",
            "0.8.3",
            "0.8.2",
            "0.7.98",
            "0.7.90",
            "0.7.84",
            "0.7.74"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-81030.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:21.827487481Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/81xxx/CVE-2026-81030.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-81030",
        "https://www.vulncheck.com/advisories/mage-ai-through-0.9.79-arbitrary-file-read-via-unvalidated-path-in-browser-items-endpoint",
        "https://github.com/mage-ai/mage-ai/issues/6134",
        "https://github.com/mage-ai/mage-ai",
        "https://github.com/mage-ai/mage-ai/blob/0.9.79/mage_ai/api/resources/BrowserItemResource.py"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-22"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/81xxx/CVE-2026-81030.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-81030",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 488233,
  "published_at": "2026-08-26T15:44:58.663+00:00"
}