Skip to content
Heist/ feed
Back to feed
High

Outline: Zip Extraction Path Escape via PATH_MAX Truncation in Collection Import

Type: advisorySources: OSV

Outline is a service that allows for collaborative documentation. Prior to 1.7.0, ZipHelper.extract computes the extraction path for each entry by passing a full filesystem path through trimFileAndExt, a filename helper that calls path.basename on its input when truncating. When a zip entry's nested path is long enough to push the joined filesystem path over MAX_PATH_LENGTH (4096 bytes), trimFileAndExt silently drops all directory components and returns a bare filename. fs.createWriteStream then opens the file relative to the process working directory instead of inside the extraction sandbox, and the escaped file persists after import cleanup because cleanupExtractedData only removes the temporary extraction directory. This vulnerability is fixed in 1.7.0.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-43888
Confirmed fixed CVEs
Not specified
Updated in this feed
4 Nov 2026, 02:04 UTC · Revision 1

Source evidence

Outline: Zip Extraction Path Escape via PATH_MAX Truncation in Collection Import

core-osv · Original source

Published 11 May 2026, 21:09 UTC

Outline is a service that allows for collaborative documentation. Prior to 1.7.0, ZipHelper.extract computes the extraction path for each entry by passing a full filesystem path through trimFileAndExt, a filename helper that calls path.basename on its input when truncating. When a zip entry's nested path is long enough to push the joined filesystem path over MAX_PATH_LENGTH (4096 bytes), trimFileAndExt silently drops all directory components and returns a bare filename. fs.createWriteStream then opens the file relative to the process working directory instead of inside the extraction sandbox, and the escaped file persists after import cleanup because cleanupExtractedData only removes the temporary extraction directory. This vulnerability is fixed in 1.7.0.

osv:CVE-2026-43888
Complete source record
{
  "id": "6ee30c42e1c7f68a09dc92cd6ff3c2d838d1fc3936b0fb4d2a3bbe62d64cf95c",
  "url": "https://osv.dev/vulnerability/CVE-2026-43888",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Outline: Zip Extraction Path Escape via PATH_MAX Truncation in Collection Import",
    "summary": "Outline is a service that allows for collaborative documentation. Prior to 1.7.0, ZipHelper.extract computes the extraction path for each entry by passing a full filesystem path through trimFileAndExt, a filename helper that calls path.basename on its input when truncating. When a zip entry's nested path is long enough to push the joined filesystem path over MAX_PATH_LENGTH (4096 bytes), trimFileAndExt silently drops all directory components and returns a bare filename. fs.createWriteStream then opens the file relative to the process working directory instead of inside the extraction sandbox, and the escaped file persists after import cleanup because cleanupExtractedData only removes the temporary extraction directory. This vulnerability is fixed in 1.7.0.",
    "evidence": "osv:CVE-2026-43888",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-43888",
      "aliases": [
        "CVE-2026-43888",
        "GHSA-hw32-2v7j-mgqc"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/outline/outline",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "568b4ac074c67c5c58c75637c3a60b41f5bb1e6b"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.7.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.7.0"
                      }
                    ],
                    "source": "DESCRIPTION"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v1.6.1",
            "v1.6.0",
            "v1.5.0",
            "v1.4.0",
            "v1.2.0",
            "v1.2.0-0",
            "v1.1.0",
            "v1.0.1",
            "v1.0.0",
            "v0.87.4",
            "v0.87.2",
            "v0.87.1",
            "v0.87.0",
            "v0.86.0",
            "v0.82.0",
            "v0.80.2",
            "v0.80.1",
            "v0.80.0",
            "v0.79.1",
            "v0.79.0",
            "v0.78.0-0",
            "v0.77.1",
            "v0.77.0",
            "v0.76.2-0",
            "v0.76.1",
            "v0.76.0",
            "v0.76.0-2",
            "v0.76.0-1",
            "v0.76.0-0",
            "v0.75.2",
            "v0.75.1",
            "v0.75.0",
            "v0.73.1",
            "v0.73.0",
            "v0.72.0",
            "v0.71.0",
            "v0.70.2",
            "v0.70.1",
            "v0.70.0",
            "v0.69.1",
            "v0.69.0",
            "v0.67.2",
            "v0.67.1",
            "v0.67.0",
            "v0.67.0-pre.1",
            "v0.66.0",
            "v0.65.1",
            "v0.65.0",
            "v0.64.3",
            "v0.64.2",
            "v0.64.1",
            "v0.64.0",
            "v0.63.0",
            "v0.62.0",
            "v0.61.0",
            "v0.60.1",
            "v0.60.0",
            "v0.59.0",
            "v0.58.0",
            "v0.57.0",
            "v0.56.0",
            "v0.55.0",
            "v0.54.0",
            "v0.53.1",
            "v0.53.0",
            "v0.52.0",
            "v0.51.0",
            "v0.50.0",
            "v0.49.0",
            "v0.48.1",
            "v0.48.0",
            "v0.46.0",
            "v0.45.0",
            "v0.44.0",
            "v0.43.3",
            "v0.43.2",
            "v0.43.1",
            "v0.43.0",
            "v0.42.2",
            "v0.42.1",
            "v0.42.0",
            "v0.41.0",
            "v0.40.2",
            "v0.40.1",
            "v0.40.0",
            "v0.39.0",
            "0.39.0",
            "v0.38.1",
            "v0.38.0",
            "v0.37.0",
            "v0.36.1",
            "v0.36.0",
            "v0.35.0",
            "v0.34.0",
            "v0.33.0",
            "v0.32.0",
            "v0.31.0",
            "v0.30.0",
            "v0.29.0",
            "v0.28.0",
            "v0.27.0",
            "v0.26.0",
            "v0.25.0",
            "v0.24.0",
            "v0.23.0",
            "v0.22.1",
            "v0.22.0",
            "v0.21.0",
            "v0.20.0",
            "v0.19.1",
            "v0.19.0",
            "v0.18.0",
            "v0.16.3",
            "v0.16.2",
            "v0.17.0",
            "v0.16.1",
            "0.16.0",
            "v0.15.1",
            "v0.15.0",
            "v0.14.0",
            "v0.13.5",
            "v0.13.4",
            "v0.13.3",
            "v0.13.2",
            "v0.13.1",
            "v0.9.0",
            "v0.8.1",
            "v0.8.0",
            "v0.7.0",
            "v0.6.1",
            "v0.6.0",
            "v0.5.0",
            "v0.4.0",
            "v0.3.1",
            "v0.3.0",
            "v0.2.0",
            "0.1.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-43888.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:32.645727105Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/43xxx/CVE-2026-43888.json",
        "https://github.com/outline/outline/security/advisories/GHSA-hw32-2v7j-mgqc",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-43888"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-22"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/43xxx/CVE-2026-43888.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-43888",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 499535,
  "published_at": "2026-05-11T21:09:42.972+00:00"
}