Skip to content
Heist/ feed
Back to feed
High

Security advisory

Type: advisorySources: OSVCVE: CVE-2026-60009

In Eclipse Theia versions up to and including 1.73.1, the `@theia/filesystem` backend binds `POST /file-upload` in every filesystem-enabled deployment. The handler takes an attacker-supplied absolute path from the multipart `uri` field and calls `fs.move(tmp, target, { overwrite: true })` with no workspace confinement and no authentication. In browser (non-Electron) deployments the connection token is enforced only on WebSocket upgrades; the HTTP middleware in `@theia/core` re-issues the cookie and calls `next()` without rejecting tokenless HTTP requests. Because `multipart/form-data` is a CORS-safelisted request type, a cross-origin web page can trigger the write with no preflight and no credentials, resulting in an unauthenticated arbitrary file write outside the workspace to any absolute path the backend process can write. This can escalate to remote code execution, for example by overwriting a startup-executed file such as `~/.bashrc`. Electron mode uses a separate `ElectronSecurityToken` and is not affected via this path.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-60009
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 06:28 UTC · Revision 1

Source evidence

CVE-2026-60009

core-osv · Original source

Published 5 Aug 2026, 10:59 UTC

In Eclipse Theia versions up to and including 1.73.1, the `@theia/filesystem` backend binds `POST /file-upload` in every filesystem-enabled deployment. The handler takes an attacker-supplied absolute path from the multipart `uri` field and calls `fs.move(tmp, target, { overwrite: true })` with no workspace confinement and no authentication. In browser (non-Electron) deployments the connection token is enforced only on WebSocket upgrades; the HTTP middleware in `@theia/core` re-issues the cookie and calls `next()` without rejecting tokenless HTTP requests. Because `multipart/form-data` is a CORS-safelisted request type, a cross-origin web page can trigger the write with no preflight and no credentials, resulting in an unauthenticated arbitrary file write outside the workspace to any absolute path the backend process can write. This can escalate to remote code execution, for example by overwriting a startup-executed file such as `~/.bashrc`. Electron mode uses a separate `ElectronSecurityToken` and is not affected via this path.

osv:CVE-2026-60009
Complete source record
{
  "id": "1f88941b4618372d56ad0849c34dd9456ec290cb44cc67a027645b656cbf91f7",
  "url": "https://osv.dev/vulnerability/CVE-2026-60009",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "CVE-2026-60009",
    "summary": "In Eclipse Theia versions up to and including 1.73.1, the `@theia/filesystem` backend binds `POST /file-upload` in every filesystem-enabled deployment. The handler takes an attacker-supplied absolute path from the multipart `uri` field and calls `fs.move(tmp, target, { overwrite: true })` with no workspace confinement and no authentication. In browser (non-Electron) deployments the connection token is enforced only on WebSocket upgrades; the HTTP middleware in `@theia/core` re-issues the cookie and calls `next()` without rejecting tokenless HTTP requests. Because `multipart/form-data` is a CORS-safelisted request type, a cross-origin web page can trigger the write with no preflight and no credentials, resulting in an unauthenticated arbitrary file write outside the workspace to any absolute path the backend process can write. This can escalate to remote code execution, for example by overwriting a startup-executed file such as `~/.bashrc`. Electron mode uses a separate `ElectronSecurityToken` and is not affected via this path.",
    "evidence": "osv:CVE-2026-60009",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-60009",
      "aliases": [
        "CVE-2026-60009",
        "GHSA-62f6-wcvg-54h3"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/eclipse-theia/theia",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "172494ea2564ca07690e230805861146007fae79"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.74.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "cpe": "cpe:2.3:a:eclipse:theia:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.74.0"
                      }
                    ],
                    "source": "CPE_RANGE"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v1.73.0",
            "v1.72.0",
            "next",
            "v1.71.0",
            "v1.70.0",
            "v1.69.0",
            "v1.68.0",
            "v1.67.0",
            "v1.66.0",
            "v1.65.0",
            "v1.64.0",
            "v1.63.0",
            "v1.62.0",
            "v1.61.0",
            "v1.60.0",
            "v1.59.0",
            "v1.58.0",
            "v1.57.0",
            "v1.55.0",
            "v1.56.0",
            "v1.54.0",
            "v1.53.0",
            "v1.52.0",
            "v1.50.0",
            "v1.49.0",
            "v1.48.0",
            "v1.47.0",
            "v1.46.0",
            "v1.45.0",
            "v1.44.0",
            "v1.43.0",
            "v1.42.0",
            "v1.41.0",
            "v1.40.0",
            "v1.39.0",
            "v1.38.0",
            "v1.37.0",
            "v1.36.0",
            "v1.35.0",
            "v1.34.0",
            "v1.33.0",
            "v1.32.0",
            "v1.31.0",
            "v1.30.0",
            "v1.29.0",
            "v1.28.0",
            "v1.27.0",
            "v1.26.0",
            "v1.25.0",
            "v1.24.0",
            "v1.23.0",
            "v1.22.1",
            "v1.22.0",
            "v1.21.0",
            "v1.20.0",
            "v1.17.0",
            "v1.16.0",
            "v1.15.0",
            "v1.14.0",
            "v1.13.0",
            "1.13.0",
            "v1.12.0",
            "v1.11.0",
            "v1.10.0",
            "v1.9.0",
            "v1.8.0",
            "v1.7.0",
            "v1.6.0",
            "v1.5.0",
            "v1.4.0",
            "v1.3.0",
            "v1.2.0",
            "v1.1.0",
            "v1.0.0",
            "v0.16.0",
            "v0.15.0",
            "v0.14.0",
            "v0.13.0",
            "v0.12.0",
            "v0.11.0",
            "v0.10.0",
            "v0.9.0",
            "v0.8.0",
            "v0.7.0",
            "v0.6.0",
            "v0.5.0",
            "v0.4.0",
            "v0.3.19",
            "v0.3.18",
            "v0.3.17",
            "v0.3.16",
            "v0.3.15",
            "v0.3.14",
            "v0.3.13",
            "v0.3.12",
            "v0.3.11",
            "v0.3.10",
            "v0.3.9",
            "v0.3.8",
            "v0.3.4",
            "v0.3.3",
            "v0.3.2",
            "v0.3.1",
            "v0.3.0",
            "v0.2.4",
            "v0.2.3",
            "v0.2.2",
            "v0.2.1",
            "v0.2.0",
            "v0.1.1",
            "v0.1.0",
            "0.0.1-alpha.2",
            "0.0.1-alpha.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-60009.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:26.374239284Z",
      "provider": "osv",
      "references": [
        "https://gitlab.eclipse.org/security/cve-assignment/-/work_items/177",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/60xxx/CVE-2026-60009.json",
        "https://github.com/eclipse-theia/theia/security/advisories/GHSA-62f6-wcvg-54h3",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-60009",
        "https://gitlab.eclipse.org/security/vulnerability-reports/-/issues/595",
        "https://gitlab.eclipse.org/security/vulnerability-reports/-/work_items/595"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-22",
          "CWE-306",
          "CWE-352",
          "CWE-73"
        ],
        "cna_assigner": "eclipse",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/60xxx/CVE-2026-60009.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-60009",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 493055,
  "published_at": "2026-08-05T10:59:24.458+00:00"
}