Skip to content
Heist/ feed
Back to feed
High

BentoML has an Arbitrary File Write via Symlink Path Traversal in Tar Extraction

Type: advisorySources: OSV

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Prior to 1.4.36, the safe_extract_tarfile() function validates that each tar member's path is within the destination directory, but for symlink members it only validates the symlink's own path, not the symlink's target. An attacker can create a malicious bento/model tar file containing a symlink pointing outside the extraction directory, followed by a regular file that writes through the symlink, achieving arbitrary file write on the host filesystem. This vulnerability is fixed in 1.4.36.

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

Source evidence

BentoML has an Arbitrary File Write via Symlink Path Traversal in Tar Extraction

core-osv · Original source

Published 3 Mar 2026, 22:45 UTC

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Prior to 1.4.36, the safe_extract_tarfile() function validates that each tar member's path is within the destination directory, but for symlink members it only validates the symlink's own path, not the symlink's target. An attacker can create a malicious bento/model tar file containing a symlink pointing outside the extraction directory, followed by a regular file that writes through the symlink, achieving arbitrary file write on the host filesystem. This vulnerability is fixed in 1.4.36.

osv:CVE-2026-27905
Complete source record
{
  "id": "2f6ccfc4b619fe41f08588fca8a1f0d5a8686a6d354bfa4508cb125122d74bde",
  "url": "https://osv.dev/vulnerability/CVE-2026-27905",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "BentoML has an Arbitrary File Write via Symlink Path Traversal in Tar Extraction",
    "summary": "BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Prior to 1.4.36, the safe_extract_tarfile() function validates that each tar member's path is within the destination directory, but for symlink members it only validates the symlink's own path, not the symlink's target. An attacker can create a malicious bento/model tar file containing a symlink pointing outside the extraction directory, followed by a regular file that writes through the symlink, achieving arbitrary file write on the host filesystem. This vulnerability is fixed in 1.4.36.",
    "evidence": "osv:CVE-2026-27905",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-27905",
      "aliases": [
        "CVE-2026-27905",
        "GHSA-m6w7-qv66-g3mf",
        "PYSEC-2026-2398"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/bentoml/bentoml",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "e1e0f7e4e407b378902507162b1339fd1da2b997"
                },
                {
                  "fixed": "4e0eb007765ac04c7924220d643f264715cc9670"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:bentoml:bentoml:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.4.36"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "4e0eb007765ac04c7924220d643f264715cc9670"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v1.4.35",
            "v1.4.34",
            "v1.4.33",
            "v1.4.32",
            "v1.4.31",
            "v1.4.30",
            "v1.4.29",
            "v1.4.28",
            "v1.4.27",
            "v1.4.26",
            "v1.4.25",
            "v1.4.24",
            "v1.4.23",
            "v1.4.22",
            "v1.4.21",
            "v1.4.20",
            "v1.4.19",
            "v1.4.18",
            "v1.4.17",
            "v1.4.16",
            "v1.4.15",
            "v1.4.14",
            "v1.4.13",
            "v1.4.12",
            "v1.4.11",
            "v1.4.10",
            "v1.4.8",
            "v1.4.7",
            "v1.4.6",
            "v1.4.5",
            "v1.4.4",
            "v1.4.3",
            "v1.4.2",
            "v1.4.1",
            "v1.4.0",
            "v1.4.0a2",
            "v1.4.0a1",
            "v1.3.22",
            "v1.3.21",
            "v1.3.20",
            "v1.3.19",
            "v1.3.18",
            "v1.3.17",
            "v1.3.16",
            "v1.3.15",
            "v1.3.14",
            "v1.3.13",
            "v1.3.12",
            "v1.3.11",
            "v1.3.10",
            "v1.3.9",
            "v1.3.8",
            "v1.3.7",
            "v1.3.6",
            "v1.3.5",
            "v1.3.4post1",
            "v1.3.4",
            "v1.1.11",
            "v1.3.3",
            "v1.3.2",
            "v1.3.1",
            "v1.3.0",
            "v1.2.20",
            "v1.2.19",
            "v1.2.18",
            "v1.2.17",
            "v1.2.16",
            "v1.2.15",
            "v1.2.14",
            "v1.2.13",
            "v1.2.12",
            "v1.2.11",
            "v1.2.10",
            "v1.2.9",
            "v1.2.8",
            "v1.2.7",
            "v1.2.6",
            "v1.2.5",
            "v1.2.4",
            "v1.2.3",
            "v1.2.2",
            "v1.2.1a1",
            "v1.2.1",
            "v1.2.0",
            "v1.1.10",
            "v1.1.9",
            "v1.1.8",
            "v1.1.7",
            "v1.1.6",
            "v1.1.5",
            "v1.1.4",
            "v1.1.3",
            "v1.1.2",
            "v1.1.1",
            "v1.1.0",
            "v1.0.25",
            "v1.0.24",
            "v1.0.23",
            "v1.0.22",
            "v1.0.21",
            "v1.0.20",
            "v1.0.19",
            "v1.0.18",
            "v1.0.17",
            "v1.0.16",
            "v1.0.15",
            "v1.0.14",
            "v1.0.13",
            "v1.0.12",
            "v1.0.11",
            "v1.0.10",
            "v1.0.9",
            "v1.0.8",
            "v1.0.7",
            "v1.0.6",
            "v1.0.5",
            "v1.0.4",
            "v1.0.3",
            "v1.0.2",
            "v1.0.0",
            "v1.0.0-rc3",
            "v1.0.0rc2",
            "v1.0.0-rc2",
            "v1.0.0-rc1",
            "v1.0.0-rc0",
            "v1.0.0-a7",
            "v1.0.0-a6",
            "v1.0.0-a5",
            "v1.0.0-a4",
            "v1.0.0-a3",
            "v1.0.0-a2",
            "v1.0.0-a1",
            "v1.0.0-dev0",
            "v0.13.1",
            "v0.13.0",
            "v0.12.1",
            "v0.12.0",
            "v0.11.0",
            "v0.10.1",
            "v0.10.0",
            "v0.9.2",
            "v0.9.1",
            "v0.9.0",
            "v0.9.0.pre",
            "v0.8.6",
            "v0.8.5",
            "v0.8.4",
            "v0.8.3",
            "v0.8.2",
            "v0.8.1",
            "v0.8.0",
            "v0.7.8",
            "v0.7.7",
            "v0.7.5",
            "v0.7.4",
            "v0.7.3",
            "v0.7.2",
            "v0.7.1",
            "v0.7.0",
            "v0.6.3",
            "v0.6.2",
            "v0.6.1",
            "v0.6.0",
            "v0.5.8",
            "v0.5.7",
            "v0.5.6",
            "v0.5.5",
            "v0.5.4",
            "v0.5.3",
            "v0.5.2",
            "v0.5.1",
            "v0.5.0",
            "v0.4.9",
            "v0.4.8",
            "v0.4.7",
            "v0.4.6",
            "v0.4.5",
            "v0.4.4",
            "v0.4.3",
            "v0.4.2",
            "v0.4.1",
            "v0.4.0",
            "bentoml-release-v0.3.4",
            "bentoml-release-v0.3.3",
            "0.2.1-beta",
            "0.2.0-beta",
            "0.1.2-beta",
            "0.1.1-beta",
            "0.0.8.post1-beta",
            "0.0.5-alpha"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-27905.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:24.888244598Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/27xxx/CVE-2026-27905.json",
        "https://github.com/bentoml/BentoML/security/advisories/GHSA-m6w7-qv66-g3mf",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-27905",
        "https://github.com/bentoml/BentoML/commit/4e0eb007765ac04c7924220d643f264715cc9670"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-59"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/27xxx/CVE-2026-27905.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-27905",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 491335,
  "published_at": "2026-03-03T22:45:40.434+00:00"
}