CVE-2026-66881 (GCVE-0-2026-66881)
Vulnerability from cvelistv5 – Published: 2026-08-05 19:43 – Updated: 2026-11-10 17:26- CWE-23 - Relative Path Traversal
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| livebook-dev | livebook |
Affected:
0.11.0 , < 0.18.7
(semver)
Affected: 0.19.0 , < 0.19.9 (semver) cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:* |
||
| livebook-dev | livebook |
Affected:
0.11.0 , < 0.18.7
(other)
Affected: 0.11.0-cuda12 , < 0.18.7-cuda12 (other) Affected: 0.19.0 , < 0.19.9 (other) Affected: 0.19.0-cuda12 , < 0.19.9-cuda12 (other) cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:* |
||
| livebook-dev | livebook |
Affected:
c02eb984f80a543c7a52b1d882c76f56aa5be743 , < *
(git)
cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-66881",
"options": [
{
"Exploitation": "poc"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-06T13:03:23.099180Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-06T13:03:45.814Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"references": [
{
"tags": [
"exploit"
],
"url": "https://github.com/livebook-dev/livebook/security/advisories/GHSA-r4h8-2xpq-v48g"
}
],
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://repo.hex.pm",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook",
"packageURL": "pkg:hex/livebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"repo": "https://github.com/livebook-dev/livebook",
"vendor": "livebook-dev",
"versions": [
{
"lessThan": "0.18.7",
"status": "affected",
"version": "0.11.0",
"versionType": "semver"
},
{
"lessThan": "0.19.9",
"status": "affected",
"version": "0.19.0",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://ghcr.io",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook-dev/livebook",
"packageURL": "pkg:oci/livebook?repository_url=ghcr.io%2Flivebook-dev%2Flivebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"vendor": "livebook-dev",
"versions": [
{
"lessThan": "0.18.7",
"status": "affected",
"version": "0.11.0",
"versionType": "other"
},
{
"lessThan": "0.18.7-cuda12",
"status": "affected",
"version": "0.11.0-cuda12",
"versionType": "other"
},
{
"lessThan": "0.19.9",
"status": "affected",
"version": "0.19.0",
"versionType": "other"
},
{
"lessThan": "0.19.9-cuda12",
"status": "affected",
"version": "0.19.0-cuda12",
"versionType": "other"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook-dev/livebook",
"packageURL": "pkg:github/livebook-dev/livebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"repo": "https://github.com/livebook-dev/livebook",
"vendor": "livebook-dev",
"versions": [
{
"changes": [
{
"at": "1443dd23df6e7b9203b6797f0695a807aeb81dde",
"status": "unaffected"
},
{
"at": "acf4cb8c0c79b89c795b180f061be7de2d8b5aa9",
"status": "unaffected"
},
{
"at": "50f86982ebf36c22abeb379b55ec0f2859c83bb9",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "c02eb984f80a543c7a52b1d882c76f56aa5be743",
"versionType": "git"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*",
"versionEndExcluding": "0.18.7",
"versionStartIncluding": "0.11.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*",
"versionEndExcluding": "0.19.9",
"versionStartIncluding": "0.19.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Nguy\u1ec5n C\u00f4ng T\u00fa"
},
{
"lang": "en",
"type": "analyst",
"value": "Jonatan M\u00e4nnchen / EEF"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Jonatan K\u0142osko"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Jos\u00e9 Valim"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eRelative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\u003c/p\u003e\n\u003cp\u003eA \u003ccode\u003e.livemd\u003c/code\u003e notebook can declare \u003ccode\u003efile_entries\u003c/code\u003e metadata, each entry carrying a \u003ccode\u003ename\u003c/code\u003e. Every path that creates a file entry through the user interface validates that name with \u003ccode\u003eLivebook.Notebook.validate_file_entry_name/2\u003c/code\u003e, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: \u003ccode\u003eLivebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1\u003c/code\u003e in \u003ccode\u003elib/livebook/live_markdown/import.ex\u003c/code\u003e takes the name verbatim from the notebook source.\u003c/p\u003e\n\u003cp\u003eFor a URL-type file entry, \u003ccode\u003eLivebook.Session.file_entry_cache_file/2\u003c/code\u003e in \u003ccode\u003elib/livebook/session.ex\u003c/code\u003e resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and \u003ccode\u003eLivebook.FileSystem.Utils.resolve_unix_like_path/2\u003c/code\u003e collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in \u003ccode\u003eLivebook.Session.to_attachment_file_entry/2\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\u003c/p\u003e\n\u003cp\u003eThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "Relative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\n\nA `.livemd` notebook can declare `file_entries` metadata, each entry carrying a `name`. Every path that creates a file entry through the user interface validates that name with `Livebook.Notebook.validate_file_entry_name/2`, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: `Livebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1` in `lib/livebook/live_markdown/import.ex` takes the name verbatim from the notebook source.\n\nFor a URL-type file entry, `Livebook.Session.file_entry_cache_file/2` in `lib/livebook/session.ex` resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and `Livebook.FileSystem.Utils.resolve_unix_like_path/2` collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in `Livebook.Session.to_attachment_file_entry/2`.\n\nA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\n\nThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9."
}
],
"value": "Relative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\n\nA .livemd notebook can declare file_entries metadata, each entry carrying a name. Every path that creates a file entry through the user interface validates that name with Livebook.Notebook.validate_file_entry_name/2, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: Livebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1 in lib/livebook/live_markdown/import.ex takes the name verbatim from the notebook source.\n\nFor a URL-type file entry, Livebook.Session.file_entry_cache_file/2 in lib/livebook/session.ex resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and Livebook.FileSystem.Utils.resolve_unix_like_path/2 collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in Livebook.Session.to_attachment_file_entry/2.\n\nA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\n\nThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9."
}
],
"impacts": [
{
"capecId": "CAPEC-76",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-76 Manipulating Web Input to File System Calls"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "ACTIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-23",
"description": "CWE-23 Relative Path Traversal",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T17:26:44.453Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"name": "Path traversal via unsanitized file_entries name on notebook import (arbitrary local file write)",
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/livebook-dev/livebook/security/advisories/GHSA-r4h8-2xpq-v48g"
},
{
"name": "EEF CNA record for CVE-2026-66881",
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-66881.html"
},
{
"name": "OSV record EEF-CVE-2026-66881",
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-66881"
},
{
"name": "Introducing commit c02eb98 in livebook-dev/livebook",
"tags": [
"related"
],
"url": "https://github.com/livebook-dev/livebook/commit/c02eb984f80a543c7a52b1d882c76f56aa5be743"
},
{
"name": "Fix commit 1443dd2 in livebook-dev/livebook",
"tags": [
"patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/1443dd23df6e7b9203b6797f0695a807aeb81dde"
},
{
"name": "Fix commit acf4cb8 in livebook-dev/livebook",
"tags": [
"patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/acf4cb8c0c79b89c795b180f061be7de2d8b5aa9"
},
{
"name": "Fix commit 50f8698 in livebook-dev/livebook",
"tags": [
"patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/50f86982ebf36c22abeb379b55ec0f2859c83bb9"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Path traversal in imported file_entries name allows arbitrary file write via URL-type entry download"
}
},
"cveMetadata": {
"assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"assignerShortName": "EEF",
"cveId": "CVE-2026-66881",
"datePublished": "2026-08-05T19:43:48.812Z",
"dateReserved": "2026-07-28T04:15:10.239Z",
"dateUpdated": "2026-11-10T17:26:44.453Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-66881",
"date": "2026-11-13",
"epss": "0.00623",
"percentile": "0.5046"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"collectionURL": "https://repo.hex.pm",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook",
"packageURL": "pkg:hex/livebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"repo": "https://github.com/livebook-dev/livebook",
"vendor": "livebook-dev",
"versions": [
{
"lessThan": "0.18.7",
"status": "affected",
"version": "0.11.0",
"versionType": "semver"
},
{
"lessThan": "0.19.9",
"status": "affected",
"version": "0.19.0",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://ghcr.io",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook-dev/livebook",
"packageURL": "pkg:oci/livebook?repository_url=ghcr.io%2Flivebook-dev%2Flivebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"vendor": "livebook-dev",
"versions": [
{
"lessThan": "0.18.7",
"status": "affected",
"version": "0.11.0",
"versionType": "other"
},
{
"lessThan": "0.18.7-cuda12",
"status": "affected",
"version": "0.11.0-cuda12",
"versionType": "other"
},
{
"lessThan": "0.19.9",
"status": "affected",
"version": "0.19.0",
"versionType": "other"
},
{
"lessThan": "0.19.9-cuda12",
"status": "affected",
"version": "0.19.0-cuda12",
"versionType": "other"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook-dev/livebook",
"packageURL": "pkg:github/livebook-dev/livebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"repo": "https://github.com/livebook-dev/livebook",
"vendor": "livebook-dev",
"versions": [
{
"changes": [
{
"at": "1443dd23df6e7b9203b6797f0695a807aeb81dde",
"status": "unaffected"
},
{
"at": "acf4cb8c0c79b89c795b180f061be7de2d8b5aa9",
"status": "unaffected"
},
{
"at": "50f86982ebf36c22abeb379b55ec0f2859c83bb9",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "c02eb984f80a543c7a52b1d882c76f56aa5be743",
"versionType": "git"
}
]
}
],
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}
],
"configurations": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:livebook:livebook:*:*:*:*:*:*:*:*",
"matchCriteriaId": "DBA92C3C-AA59-45BF-B266-428314C2A32A",
"versionEndExcluding": "0.18.7",
"versionStartIncluding": "0.11.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:livebook:livebook:*:*:*:*:*:*:*:*",
"matchCriteriaId": "7B4998A3-46BF-4E69-8642-1156BB3E7480",
"versionEndExcluding": "0.19.9",
"versionStartIncluding": "0.19.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Relative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\n\nA .livemd notebook can declare file_entries metadata, each entry carrying a name. Every path that creates a file entry through the user interface validates that name with Livebook.Notebook.validate_file_entry_name/2, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: Livebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1 in lib/livebook/live_markdown/import.ex takes the name verbatim from the notebook source.\n\nFor a URL-type file entry, Livebook.Session.file_entry_cache_file/2 in lib/livebook/session.ex resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and Livebook.FileSystem.Utils.resolve_unix_like_path/2 collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in Livebook.Session.to_attachment_file_entry/2.\n\nA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\n\nThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9."
},
{
"lang": "es",
"value": "Una vulnerabilidad de salto de ruta relativo en livebook-dev livebook permite que un cuaderno creado por un atacante escriba un archivo con contenido controlado por el atacante en una ruta arbitraria.\n\nUn cuaderno .livemd puede declarar metadatos de file_entries, cada entrada con un nombre. Cada ruta que crea una entrada de archivo a trav\u00e9s de la interfaz de usuario valida ese nombre con Livebook.Notebook.validate_file_entry_name/2, que requiere un nombre de archivo plano de caracteres alfanum\u00e9ricos, guiones, guiones bajos y puntos, que termina en una extensi\u00f3n. La ruta de importaci\u00f3n no lo hace: Livebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1 en lib/livebook/live_markdown/import.ex toma el nombre textualmente del c\u00f3digo fuente del cuaderno.\n\nPara una entrada de archivo de tipo URL, Livebook.Session.file_entry_cache_file/2 en lib/livebook/session.ex resuelve ese nombre debajo del directorio temporal de la sesi\u00f3n sin verificar que el resultado permanezca dentro de \u00e9l, y Livebook.FileSystem.Utils.resolve_unix_like_path/2 colapsa los segmentos de directorio padre mientras se limita solo a la ra\u00edz del sistema de archivos. Cuando se solicita el contenido de la entrada y no existe una copia en cach\u00e9, Livebook obtiene la URL de la entrada y escribe el cuerpo de la respuesta en la ruta resuelta, creando directorios padre seg\u00fan sea necesario. El atacante, por lo tanto, controla tanto el destino como el contenido del archivo escrito, que puede terminar en cualquier lugar donde el proceso de Livebook pueda escribir. La misma verificaci\u00f3n de contenci\u00f3n faltante est\u00e1 presente en Livebook.Session.to_attachment_file_entry/2.\n\nUna v\u00edctima que abre un cuaderno proporcionado por un atacante y hace que se obtenga la entrada activa la escritura dentro de su propia sesi\u00f3n autenticada; el atacante no necesita una cuenta en la instancia de destino. Las entradas de tipo URL tampoco se colocan bajo cuarentena de sellado de cuadernos al importar, por lo que no se muestra ninguna advertencia.\n\nEste problema afecta a livebook: desde 0.11.0 antes de 0.18.7 y desde 0.19.0 antes de 0.19.9."
}
],
"id": "CVE-2026-66881",
"lastModified": "2026-11-10T18:17:47.177",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.1,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H",
"version": "3.1"
},
"exploitabilityScore": 2.8,
"impactScore": 5.2,
"source": "nvd@nist.gov",
"type": "Primary"
}
],
"cvssMetricV40": [
{
"cvssData": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"availabilityRequirement": "NOT_DEFINED",
"baseScore": 7.0,
"baseSeverity": "HIGH",
"confidentialityRequirement": "NOT_DEFINED",
"exploitMaturity": "NOT_DEFINED",
"integrityRequirement": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "ACTIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary"
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-66881",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-06T13:03:23.099180Z",
"version": "2.0.3"
}
}
]
},
"published": "2026-08-05T20:17:12.600",
"references": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Vendor Advisory"
],
"url": "https://cna.erlef.org/cves/CVE-2026-66881.html"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/1443dd23df6e7b9203b6797f0695a807aeb81dde"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/50f86982ebf36c22abeb379b55ec0f2859c83bb9"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/acf4cb8c0c79b89c795b180f061be7de2d8b5aa9"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://github.com/livebook-dev/livebook/commit/c02eb984f80a543c7a52b1d882c76f56aa5be743"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Exploit",
"Patch",
"Vendor Advisory"
],
"url": "https://github.com/livebook-dev/livebook/security/advisories/GHSA-r4h8-2xpq-v48g"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Third Party Advisory"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-66881"
},
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"tags": [
"Exploit",
"Patch",
"Vendor Advisory"
],
"url": "https://github.com/livebook-dev/livebook/security/advisories/GHSA-r4h8-2xpq-v48g"
}
],
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"vulnStatus": "Modified",
"weaknesses": [
{
"description": [
{
"lang": "en",
"value": "CWE-23"
}
],
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary"
}
]
}
},
"vulnrichment": {
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-66881",
"options": [
{
"Exploitation": "poc"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-06T13:03:23.099180Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-06T13:03:42.653Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"references": [
{
"tags": [
"exploit"
],
"url": "https://github.com/livebook-dev/livebook/security/advisories/GHSA-r4h8-2xpq-v48g"
}
],
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://repo.hex.pm",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook",
"packageURL": "pkg:hex/livebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"repo": "https://github.com/livebook-dev/livebook",
"vendor": "livebook-dev",
"versions": [
{
"lessThan": "0.18.7",
"status": "affected",
"version": "0.11.0",
"versionType": "semver"
},
{
"lessThan": "0.19.9",
"status": "affected",
"version": "0.19.0",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://ghcr.io",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook-dev/livebook",
"packageURL": "pkg:oci/livebook?repository_url=ghcr.io%2Flivebook-dev%2Flivebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"vendor": "livebook-dev",
"versions": [
{
"lessThan": "0.18.7",
"status": "affected",
"version": "0.11.0",
"versionType": "other"
},
{
"lessThan": "0.18.7-cuda12",
"status": "affected",
"version": "0.11.0-cuda12",
"versionType": "other"
},
{
"lessThan": "0.19.9",
"status": "affected",
"version": "0.19.0",
"versionType": "other"
},
{
"lessThan": "0.19.9-cuda12",
"status": "affected",
"version": "0.19.0-cuda12",
"versionType": "other"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Elixir.Livebook.LiveMarkdown.Import",
"Elixir.Livebook.Session",
"Elixir.Livebook.FileSystem.Utils"
],
"packageName": "livebook-dev/livebook",
"packageURL": "pkg:github/livebook-dev/livebook",
"product": "livebook",
"programFiles": [
"lib/livebook/live_markdown/import.ex",
"lib/livebook/session.ex",
"lib/livebook/file_system/utils.ex"
],
"programRoutines": [
{
"name": "\u0027Elixir.Livebook.LiveMarkdown.Import\u0027:file_entry_metadata_to_attrs/1"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:file_entry_cache_file/2"
},
{
"name": "\u0027Elixir.Livebook.Session\u0027:to_attachment_file_entry/2"
},
{
"name": "\u0027Elixir.Livebook.FileSystem.Utils\u0027:resolve_unix_like_path/2"
}
],
"repo": "https://github.com/livebook-dev/livebook",
"vendor": "livebook-dev",
"versions": [
{
"changes": [
{
"at": "1443dd23df6e7b9203b6797f0695a807aeb81dde",
"status": "unaffected"
},
{
"at": "acf4cb8c0c79b89c795b180f061be7de2d8b5aa9",
"status": "unaffected"
},
{
"at": "50f86982ebf36c22abeb379b55ec0f2859c83bb9",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "c02eb984f80a543c7a52b1d882c76f56aa5be743",
"versionType": "git"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*",
"versionEndExcluding": "0.18.7",
"versionStartIncluding": "0.11.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:livebook-dev:livebook:*:*:*:*:*:*:*:*",
"versionEndExcluding": "0.19.9",
"versionStartIncluding": "0.19.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Nguy\u1ec5n C\u00f4ng T\u00fa"
},
{
"lang": "en",
"type": "analyst",
"value": "Jonatan M\u00e4nnchen / EEF"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Jonatan K\u0142osko"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Jos\u00e9 Valim"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eRelative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\u003c/p\u003e\n\u003cp\u003eA \u003ccode\u003e.livemd\u003c/code\u003e notebook can declare \u003ccode\u003efile_entries\u003c/code\u003e metadata, each entry carrying a \u003ccode\u003ename\u003c/code\u003e. Every path that creates a file entry through the user interface validates that name with \u003ccode\u003eLivebook.Notebook.validate_file_entry_name/2\u003c/code\u003e, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: \u003ccode\u003eLivebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1\u003c/code\u003e in \u003ccode\u003elib/livebook/live_markdown/import.ex\u003c/code\u003e takes the name verbatim from the notebook source.\u003c/p\u003e\n\u003cp\u003eFor a URL-type file entry, \u003ccode\u003eLivebook.Session.file_entry_cache_file/2\u003c/code\u003e in \u003ccode\u003elib/livebook/session.ex\u003c/code\u003e resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and \u003ccode\u003eLivebook.FileSystem.Utils.resolve_unix_like_path/2\u003c/code\u003e collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in \u003ccode\u003eLivebook.Session.to_attachment_file_entry/2\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\u003c/p\u003e\n\u003cp\u003eThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "Relative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\n\nA `.livemd` notebook can declare `file_entries` metadata, each entry carrying a `name`. Every path that creates a file entry through the user interface validates that name with `Livebook.Notebook.validate_file_entry_name/2`, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: `Livebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1` in `lib/livebook/live_markdown/import.ex` takes the name verbatim from the notebook source.\n\nFor a URL-type file entry, `Livebook.Session.file_entry_cache_file/2` in `lib/livebook/session.ex` resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and `Livebook.FileSystem.Utils.resolve_unix_like_path/2` collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in `Livebook.Session.to_attachment_file_entry/2`.\n\nA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\n\nThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9."
}
],
"value": "Relative Path Traversal vulnerability in livebook-dev livebook allows an attacker-authored notebook to write a file with attacker-controlled content to an arbitrary path.\n\nA .livemd notebook can declare file_entries metadata, each entry carrying a name. Every path that creates a file entry through the user interface validates that name with Livebook.Notebook.validate_file_entry_name/2, which requires a flat filename of alphanumerics, dashes, underscores and dots, ending in an extension. The import path does not: Livebook.LiveMarkdown.Import.file_entry_metadata_to_attrs/1 in lib/livebook/live_markdown/import.ex takes the name verbatim from the notebook source.\n\nFor a URL-type file entry, Livebook.Session.file_entry_cache_file/2 in lib/livebook/session.ex resolves that name beneath the session\u0027s temporary directory without checking that the result stays inside it, and Livebook.FileSystem.Utils.resolve_unix_like_path/2 collapses parent-directory segments while clamping only at the filesystem root. When the entry\u0027s content is requested and no cached copy exists, Livebook fetches the entry\u0027s URL and writes the response body to the resolved path, creating parent directories as needed. The attacker therefore controls both the destination and the contents of the written file, which may land anywhere the Livebook process can write. The same missing containment check is present in Livebook.Session.to_attachment_file_entry/2.\n\nA victim who opens an attacker-supplied notebook and causes the entry to be fetched triggers the write within their own authenticated session; the attacker needs no account on the target instance. URL-type entries are also not placed under notebook stamping quarantine on import, so no warning is shown.\n\nThis issue affects livebook: from 0.11.0 before 0.18.7 and from 0.19.0 before 0.19.9."
}
],
"impacts": [
{
"capecId": "CAPEC-76",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-76 Manipulating Web Input to File System Calls"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "ACTIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-23",
"description": "CWE-23 Relative Path Traversal",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T17:26:44.453Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"name": "Path traversal via unsanitized file_entries name on notebook import (arbitrary local file write)",
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/livebook-dev/livebook/security/advisories/GHSA-r4h8-2xpq-v48g"
},
{
"name": "EEF CNA record for CVE-2026-66881",
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-66881.html"
},
{
"name": "OSV record EEF-CVE-2026-66881",
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-66881"
},
{
"name": "Introducing commit c02eb98 in livebook-dev/livebook",
"tags": [
"related"
],
"url": "https://github.com/livebook-dev/livebook/commit/c02eb984f80a543c7a52b1d882c76f56aa5be743"
},
{
"name": "Fix commit 1443dd2 in livebook-dev/livebook",
"tags": [
"patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/1443dd23df6e7b9203b6797f0695a807aeb81dde"
},
{
"name": "Fix commit acf4cb8 in livebook-dev/livebook",
"tags": [
"patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/acf4cb8c0c79b89c795b180f061be7de2d8b5aa9"
},
{
"name": "Fix commit 50f8698 in livebook-dev/livebook",
"tags": [
"patch"
],
"url": "https://github.com/livebook-dev/livebook/commit/50f86982ebf36c22abeb379b55ec0f2859c83bb9"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Path traversal in imported file_entries name allows arbitrary file write via URL-type entry download"
}
},
"cveMetadata": {
"assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"assignerShortName": "EEF",
"cveId": "CVE-2026-66881",
"datePublished": "2026-08-05T19:43:48.812Z",
"dateReserved": "2026-07-28T04:15:10.239Z",
"dateUpdated": "2026-11-10T17:26:44.453Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.