Skip to content
Heist/ feed
Back to feed
Medium

OpenList: Authenticated arbitrary file write via Content-Disposition path traversal in SimpleHttp offline-download tool

Type: advisorySources: OSV

OpenList a file list program that supports multiple storage. Prior to 4.2.3, OpenList's offline-download feature at POST /api/fs/add_offline_download with tool: "SimpleHttp" accepts an attacker-supplied URL and saves its bytes under a per-task temporary directory before transferring them to the user's destination storage. The temporary filename comes from the attacker-controlled Content-Disposition header, is passed from parseFilenameFromContentDisposition in internal/offline_download/http/util.go to filepath.Join(task.TempDir, filename) in SimpleHttp.Run in internal/offline_download/http/client.go, and is opened with os.Create without a containment check. Because filepath.Join cleans .. segments, a non-admin user with PermAddOfflineDownload on any path can traverse out of task.TempDir and create, truncate, or overwrite any file writable by the OpenList process whose parent directory already exists. The server/handles/offline_download.go AddOfflineDownload route uses normal user authentication rather than AuthAdmin, and local-storage destinations fall through tryPutUrl in internal/offline_download/tool/add.go to the vulnerable SimpleHttp.Run path. This issue is fixed in version 4.2.3.

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

Source evidence

OpenList: Authenticated arbitrary file write via Content-Disposition path traversal in SimpleHttp offline-download tool

core-osv · Original source

Published 3 Sept 2026, 16:53 UTC

OpenList a file list program that supports multiple storage. Prior to 4.2.3, OpenList's offline-download feature at POST /api/fs/add_offline_download with tool: "SimpleHttp" accepts an attacker-supplied URL and saves its bytes under a per-task temporary directory before transferring them to the user's destination storage. The temporary filename comes from the attacker-controlled Content-Disposition header, is passed from parseFilenameFromContentDisposition in internal/offline_download/http/util.go to filepath.Join(task.TempDir, filename) in SimpleHttp.Run in internal/offline_download/http/client.go, and is opened with os.Create without a containment check. Because filepath.Join cleans .. segments, a non-admin user with PermAddOfflineDownload on any path can traverse out of task.TempDir and create, truncate, or overwrite any file writable by the OpenList process whose parent directory already exists. The server/handles/offline_download.go AddOfflineDownload route uses normal user authentication rather than AuthAdmin, and local-storage destinations fall through tryPutUrl in internal/offline_download/tool/add.go to the vulnerable SimpleHttp.Run path. This issue is fixed in version 4.2.3.

osv:CVE-2026-75602
Complete source record
{
  "id": "3cba9e076fc58788fe1a2632858fe6a84cd012360f933931a02918fb65fec994",
  "url": "https://osv.dev/vulnerability/CVE-2026-75602",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "OpenList: Authenticated arbitrary file write via Content-Disposition path traversal in SimpleHttp offline-download tool",
    "summary": "OpenList a file list program that supports multiple storage. Prior to 4.2.3, OpenList's offline-download feature at POST /api/fs/add_offline_download with tool: \"SimpleHttp\" accepts an attacker-supplied URL and saves its bytes under a per-task temporary directory before transferring them to the user's destination storage. The temporary filename comes from the attacker-controlled Content-Disposition header, is passed from parseFilenameFromContentDisposition in internal/offline_download/http/util.go to filepath.Join(task.TempDir, filename) in SimpleHttp.Run in internal/offline_download/http/client.go, and is opened with os.Create without a containment check. Because filepath.Join cleans .. segments, a non-admin user with PermAddOfflineDownload on any path can traverse out of task.TempDir and create, truncate, or overwrite any file writable by the OpenList process whose parent directory already exists. The server/handles/offline_download.go AddOfflineDownload route uses normal user authentication rather than AuthAdmin, and local-storage destinations fall through tryPutUrl in internal/offline_download/tool/add.go to the vulnerable SimpleHttp.Run path. This issue is fixed in version 4.2.3.",
    "evidence": "osv:CVE-2026-75602",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-75602",
      "aliases": [
        "CVE-2026-75602",
        "GHSA-h6cj-26g5-67fv",
        "GO-2026-6368"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/openlistteam/openlist",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "a92d59d35c6c24930fba95a24e10d949480efe67"
                },
                {
                  "fixed": "9cc5dd969b9833c8cb4e14c338c3571dfdbe2108"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "4.2.3"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "9cc5dd969b9833c8cb4e14c338c3571dfdbe2108"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "a92d59d35c6c24930fba95a24e10d949480efe67"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v4.2.3"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v4.2.2",
            "v4.2.1",
            "v4.2.0",
            "beta",
            "v4.1.10",
            "v4.1.9",
            "v4.1.8",
            "v4.1.7",
            "v4.1.6",
            "v4.1.5",
            "v4.1.4",
            "v4.1.3",
            "v4.1.2",
            "v4.1.1",
            "v4.1.0",
            "v4.0.9",
            "v4.0.8",
            "v4.0.7",
            "v4.0.5",
            "v4.0.4",
            "v4.0.3",
            "v4.0.2",
            "v4.0.1",
            "v3.45.0",
            "v3.44.0",
            "v3.43.0",
            "v3.42.0",
            "v3.41.0",
            "v3.40.0",
            "v3.39.4",
            "v3.39.3",
            "v3.39.2",
            "v3.39.1",
            "v3.38.0",
            "v3.37.4",
            "v3.37.3",
            "v3.37.2",
            "v3.37.1",
            "v3.36.0",
            "v3.35.0",
            "v3.34.0",
            "v3.33.0",
            "v3.32.0",
            "v3.31.0",
            "v3.30.0",
            "v3.29.1",
            "v3.29.0",
            "v3.28.0",
            "v3.27.0",
            "v3.26.0",
            "v3.25.1",
            "v3.24.0",
            "v3.23.0",
            "v3.22.1",
            "v3.22.0",
            "v3.21.0",
            "v3.20.1",
            "v3.20.0",
            "v3.19.0",
            "v3.18.0",
            "v3.17.0",
            "v3.16.3",
            "v3.16.2",
            "v3.16.1",
            "v3.16.0",
            "v3.15.1",
            "v3.15.0",
            "v3.14.0",
            "v3.13.2",
            "v3.13.1",
            "v3.12.2",
            "v3.12.1",
            "v3.12.0",
            "v3.11.0",
            "v3.10.1",
            "v3.9.2",
            "v3.9.1",
            "v3.9.0",
            "v3.8.0",
            "v3.7.2",
            "v3.7.1",
            "v3.6.0",
            "v3.5.1",
            "v3.4.0",
            "v3.3.0",
            "v3.2.1",
            "v3.2.0",
            "v3.1.0",
            "v3.0.3",
            "v3.0.2",
            "v3.0.1",
            "v3.0.0-rc.1",
            "v3.0.0-rc.0",
            "v3.0.0-beta.2",
            "v3.0.0-beta.1",
            "v3.0.0-beta.0",
            "v2.6.1",
            "v2.6.0",
            "v2.5.2",
            "v2.5.1",
            "v2.5.0",
            "v2.4.3",
            "v2.4.2",
            "v2.4.1",
            "v2.4.0",
            "v2.3.2",
            "v2.3.1",
            "v2.3.0",
            "v2.2.0",
            "v2.1.3",
            "v2.1.2",
            "v2.1.1",
            "v2.1.0",
            "v2.0.10",
            "v2.0.9",
            "v2.0.8",
            "v2.0.7",
            "v2.0.6",
            "v2.0.5-libc",
            "v2.0.5",
            "v2.0.4-fix2",
            "v2.0.4-fix",
            "v2.0.4",
            "v2.0.3",
            "v2.0.2",
            "v2.0.1",
            "v2.0.0",
            "v2.0.0-beta7",
            "v2.0.0-beta6",
            "v2.0.0-beta5",
            "v2.0.0-beta4",
            "v2.0.0-beta3",
            "v2.0.0-beta2",
            "v2.0.0-beta"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-75602.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:38.311281441Z",
      "provider": "osv",
      "references": [
        "https://github.com/OpenListTeam/OpenList/releases/tag/v4.2.3",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/75xxx/CVE-2026-75602.json",
        "https://github.com/OpenListTeam/OpenList/security/advisories/GHSA-h6cj-26g5-67fv",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-75602",
        "https://github.com/OpenListTeam/OpenList/commit/9cc5dd969b9833c8cb4e14c338c3571dfdbe2108"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-22",
          "CWE-73"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/75xxx/CVE-2026-75602.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-75602",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 505740,
  "published_at": "2026-09-03T16:53:16.054+00:00"
}