Search
Find a vulnerability
Search criteria
184 vulnerabilities
CVE-2026-120338 (GCVE-0-2026-120338)
Vulnerability from cvelistv5 – Published: 2026-11-01 15:24 – Updated: 2026-11-02 19:42
VLAI
EPSS
VEX
Title
Prefab UI Pyodide sandbox escape to host RCE
Summary
Prefab UI's Generative UI sandbox runs caller-supplied Python inside Pyodide, Python compiled to WebAssembly, in a Deno subprocess. The feature is documented as isolation for untrusted code, including LLM-written UI. From prefab-ui 0.14.0 through 0.20.2 the launcher starts Deno with unrestricted --allow-read, --allow-write, and --allow-net, and the runner leaves the Deno API on the JavaScript global object. Pyodide's js module proxies that global, so the Python can call Deno.readTextFileSync and Deno.writeTextFileSync. A caller who can supply the code can read and write files as the server OS user, and can persist code execution by writing a .pth file into the server virtualenv's site-packages. The usual remote path is FastMCP's GenerativeUI provider, which registers the MCP tool generate_prefab_ui and forwards that tool's code argument into this sandbox. On a FastMCP server with no authentication configured, any client who can reach the server can call the tool. With authentication, any client allowed to call tools can. Generative UI is opt-in, and the host must have Deno installed. Confirmed on prefab-ui 0.20.2. Fixed in 0.21.0: after the runtime and Prefab sources load, the runner revokes Deno read, write, and network permission before it accepts code, the process is started with --no-prompt so a permission request cannot grant them again, and bootstrap network access is limited to cdn.jsdelivr.net. The fix is commit 030f074 (pull request 538).
Severity
10 (Critical)
9.9 (Critical)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-11-02 19:42 UTC
CWE
Assigner
References
9 references
| URL | Tags |
|---|---|
| https://github.com/PrefectHQ/prefab | product |
| https://pypi.org/project/prefab-ui/ | product |
| https://github.com/PrefectHQ/prefab/security/advi… | vendor-advisory |
| https://github.com/PrefectHQ/prefab/pull/538 | patch |
| https://github.com/PrefectHQ/prefab/commit/030f07… | patch |
| https://github.com/PrefectHQ/prefab/releases/tag/… | release-notes |
| https://pypi.org/project/prefab-ui/0.21.0/ | release-notes |
| https://github.com/PrefectHQ/prefab/releases/tag/… | technical-description |
| https://github.com/PrefectHQ/prefab/releases/tag/… | technical-description |
Impacted products
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-120338",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-02T19:42:39.981153Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-02T19:42:56.540Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pypi.org/project/prefab-ui/",
"defaultStatus": "unaffected",
"packageName": "prefab-ui",
"product": "prefab-ui",
"programFiles": [
"src/prefab_ui/sandbox/_pyodide.py",
"src/prefab_ui/sandbox/runner.js"
],
"repo": "git://github.com/PrefectHQ/prefab",
"vendor": "PrefectHQ",
"versions": [
{
"lessThan": "0.21.0",
"status": "affected",
"version": "0.14.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003ePrefab UI\u0027s Generative UI sandbox runs caller-supplied Python inside Pyodide, Python compiled to WebAssembly, in a Deno subprocess. The feature is documented as isolation for untrusted code, including LLM-written UI. From prefab-ui 0.14.0 through 0.20.2 the launcher starts Deno with unrestricted --allow-read, --allow-write, and --allow-net, and the runner leaves the Deno API on the JavaScript global object. Pyodide\u0027s js module proxies that global, so the Python can call Deno.readTextFileSync and Deno.writeTextFileSync. A caller who can supply the code can read and write files as the server OS user, and can persist code execution by writing a .pth file into the server virtualenv\u0027s site-packages. The usual remote path is FastMCP\u0027s GenerativeUI provider, which registers the MCP tool generate_prefab_ui and forwards that tool\u0027s code argument into this sandbox. On a FastMCP server with no authentication configured, any client who can reach the server can call the tool. With authentication, any client allowed to call tools can. Generative UI is opt-in, and the host must have Deno installed. Confirmed on prefab-ui 0.20.2. Fixed in 0.21.0: after the runtime and Prefab sources load, the runner revokes Deno read, write, and network permission before it accepts code, the process is started with --no-prompt so a permission request cannot grant them again, and bootstrap network access is limited to cdn.jsdelivr.net. The fix is commit 030f074 (pull request 538).\u003c/p\u003e"
}
],
"value": "Prefab UI\u0027s Generative UI sandbox runs caller-supplied Python inside Pyodide, Python compiled to WebAssembly, in a Deno subprocess. The feature is documented as isolation for untrusted code, including LLM-written UI. From prefab-ui 0.14.0 through 0.20.2 the launcher starts Deno with unrestricted --allow-read, --allow-write, and --allow-net, and the runner leaves the Deno API on the JavaScript global object. Pyodide\u0027s js module proxies that global, so the Python can call Deno.readTextFileSync and Deno.writeTextFileSync. A caller who can supply the code can read and write files as the server OS user, and can persist code execution by writing a .pth file into the server virtualenv\u0027s site-packages. The usual remote path is FastMCP\u0027s GenerativeUI provider, which registers the MCP tool generate_prefab_ui and forwards that tool\u0027s code argument into this sandbox. On a FastMCP server with no authentication configured, any client who can reach the server can call the tool. With authentication, any client allowed to call tools can. Generative UI is opt-in, and the host must have Deno installed. Confirmed on prefab-ui 0.20.2. Fixed in 0.21.0: after the runtime and Prefab sources load, the runner revokes Deno read, write, and network permission before it accepts code, the process is started with --no-prompt so a permission request cannot grant them again, and bootstrap network access is limited to cdn.jsdelivr.net. The fix is commit 030f074 (pull request 538)."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 10,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "FastMCP server with GenerativeUI enabled, Deno installed, and no authentication configured"
}
]
},
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.9,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Authenticated client allowed to call tools on a server that executes untrusted code in the Generative UI sandbox"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-693",
"description": "CWE-693: Protection Mechanism Failure",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-94",
"description": "CWE-94: Improper Control of Generation of Code (\u0027Code Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-269",
"description": "CWE-269: Improper Privilege Management",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-01T15:24:54.158Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Prefab repository",
"tags": [
"product"
],
"url": "https://github.com/PrefectHQ/prefab"
},
{
"name": "prefab-ui on PyPI",
"tags": [
"product"
],
"url": "https://pypi.org/project/prefab-ui/"
},
{
"name": "GHSA-595q-jv4r-q7j9",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/PrefectHQ/prefab/security/advisories/GHSA-595q-jv4r-q7j9"
},
{
"name": "Refresh dependencies and fix renderer and sandbox regressions (fix pull request)",
"tags": [
"patch"
],
"url": "https://github.com/PrefectHQ/prefab/pull/538"
},
{
"name": "Fix commit 030f074",
"tags": [
"patch"
],
"url": "https://github.com/PrefectHQ/prefab/commit/030f074f85e0b1be0dd44b0283185aecb26337a2"
},
{
"name": "v0.21.0",
"tags": [
"release-notes"
],
"url": "https://github.com/PrefectHQ/prefab/releases/tag/v0.21.0"
},
{
"name": "prefab-ui 0.21.0",
"tags": [
"release-notes"
],
"url": "https://pypi.org/project/prefab-ui/0.21.0/"
},
{
"name": "v0.20.2 (confirmed affected)",
"tags": [
"technical-description"
],
"url": "https://github.com/PrefectHQ/prefab/releases/tag/v0.20.2"
},
{
"name": "v0.14.0 (first release with the sandbox)",
"tags": [
"technical-description"
],
"url": "https://github.com/PrefectHQ/prefab/releases/tag/v0.14.0"
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-03-24T17:21:00.000Z",
"value": "Pyodide sandbox added with --allow-read, --allow-write, and --allow-net (commit fc4362f3, pull request 334)"
},
{
"lang": "en",
"time": "2026-03-27T02:36:00.000Z",
"value": "prefab-ui 0.14.0 published on PyPI, the first release that includes the sandbox"
},
{
"lang": "en",
"time": "2026-06-03T02:13:00.000Z",
"value": "prefab-ui 0.20.2 published. This is the release confirmed in testing."
},
{
"lang": "en",
"time": "2026-08-05T16:12:00.000Z",
"value": "Reported to PrefectHQ as GHSA-595q-jv4r-q7j9. The advisory is still in triage and has no CVE id."
},
{
"lang": "en",
"time": "2026-10-25T18:48:00.000Z",
"value": "Fix merged in pull request 538 (commit 030f074). The runner revokes read, write, and network permission before accepting code."
},
{
"lang": "en",
"time": "2026-10-26T19:00:00.000Z",
"value": "prefab-ui 0.21.0 published on PyPI with the fix. No vendor advisory text was published with the release."
}
],
"title": "Prefab UI Pyodide sandbox escape to host RCE",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-120338",
"datePublished": "2026-11-01T15:24:54.158Z",
"dateReserved": "2026-11-01T15:12:50.987Z",
"dateUpdated": "2026-11-02T19:42:56.540Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-120308 (GCVE-0-2026-120308)
Vulnerability from cvelistv5 – Published: 2026-11-01 12:51 – Updated: 2026-11-02 19:45
VLAI
EPSS
VEX
Title
Beta9 host filesystem exposure via volume path traversal
Summary
A Beta9 tenant can attach a volume when deploying a function, endpoint, or task queue. The gateway builds the host path by joining the shared volumes root, the workspace name, and the volume identifier from the stub configuration. Nothing checks that the identifier names a volume that workspace owns. Parent-directory segments in the identifier collapse the joined path to the worker's filesystem root, and the worker bind-mounts that path into the sandbox read-write unless the volume was explicitly marked read-only. A tenant with a workspace token can therefore read and write the worker's files, including other tenants' volumes stored on that machine. Confirmed against gateway 0.1.769 and worker 0.1.745. Fixed in gateway 0.1.776 and worker 0.1.756: volume identifiers and mount paths are validated before a mount is built, including for stubs saved before the check existed, and the gateway rejects a volume that does not exist or is not owned by the workspace.
Severity
9.9 (Critical)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-11-02 19:45 UTC
CWE
Assigner
References
7 references
| URL | Tags |
|---|---|
| https://github.com/beam-cloud/beta9 | product |
| https://github.com/beam-cloud/beta9/pull/1897 | patch |
| https://github.com/beam-cloud/beta9/commit/a28bf1… | patch |
| https://github.com/beam-cloud/beta9/releases/tag/… | release-notes |
| https://github.com/beam-cloud/beta9/releases/tag/… | release-notes |
| https://github.com/beam-cloud/beta9/releases/tag/… | technical-description |
| https://github.com/beam-cloud/beta9/releases/tag/… | technical-description |
Impacted products
2 products
| Vendor | Product | Version | |
|---|---|---|---|
| beam-cloud | Beta9 gateway |
Affected:
0 , < 0.1.776
(semver)
|
|
| beam-cloud | Beta9 worker |
Affected:
0 , < 0.1.756
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-120308",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-02T19:45:04.950921Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-02T19:45:15.233Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/beam-cloud/beta9/releases",
"defaultStatus": "unaffected",
"packageName": "github.com/beam-cloud/beta9",
"product": "Beta9 gateway",
"programFiles": [
"pkg/abstractions/common/mount.go",
"pkg/gateway/services/stub.go"
],
"repo": "git://github.com/beam-cloud/beta9",
"vendor": "beam-cloud",
"versions": [
{
"lessThan": "0.1.776",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://github.com/beam-cloud/beta9/releases",
"defaultStatus": "unaffected",
"packageName": "github.com/beam-cloud/beta9",
"product": "Beta9 worker",
"programFiles": [
"pkg/abstractions/common/mount.go",
"pkg/worker/lifecycle.go"
],
"repo": "git://github.com/beam-cloud/beta9",
"vendor": "beam-cloud",
"versions": [
{
"lessThan": "0.1.756",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Natan Nehorai"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA Beta9 tenant can attach a volume when deploying a function, endpoint, or task queue. The gateway builds the host path by joining the shared volumes root, the workspace name, and the volume identifier from the stub configuration. Nothing checks that the identifier names a volume that workspace owns. Parent-directory segments in the identifier collapse the joined path to the worker\u0027s filesystem root, and the worker bind-mounts that path into the sandbox read-write unless the volume was explicitly marked read-only. A tenant with a workspace token can therefore read and write the worker\u0027s files, including other tenants\u0027 volumes stored on that machine. Confirmed against gateway 0.1.769 and worker 0.1.745. Fixed in gateway 0.1.776 and worker 0.1.756: volume identifiers and mount paths are validated before a mount is built, including for stubs saved before the check existed, and the gateway rejects a volume that does not exist or is not owned by the workspace.\u003c/p\u003e"
}
],
"value": "A Beta9 tenant can attach a volume when deploying a function, endpoint, or task queue. The gateway builds the host path by joining the shared volumes root, the workspace name, and the volume identifier from the stub configuration. Nothing checks that the identifier names a volume that workspace owns. Parent-directory segments in the identifier collapse the joined path to the worker\u0027s filesystem root, and the worker bind-mounts that path into the sandbox read-write unless the volume was explicitly marked read-only. A tenant with a workspace token can therefore read and write the worker\u0027s files, including other tenants\u0027 volumes stored on that machine. Confirmed against gateway 0.1.769 and worker 0.1.745. Fixed in gateway 0.1.776 and worker 0.1.756: volume identifiers and mount paths are validated before a mount is built, including for stubs saved before the check existed, and the gateway rejects a volume that does not exist or is not owned by the workspace."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.9,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Tenant with a workspace token deploying a function that attaches a volume"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-22",
"description": "CWE-22: Improper Limitation of a Pathname to a Restricted Directory (\u0027Path Traversal\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-668",
"description": "CWE-668: Exposure of Resource to Wrong Sphere",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-01T12:51:50.481Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Beta9 repository",
"tags": [
"product"
],
"url": "https://github.com/beam-cloud/beta9"
},
{
"name": "Handle sandbox edge cases (fix pull request)",
"tags": [
"patch"
],
"url": "https://github.com/beam-cloud/beta9/pull/1897"
},
{
"name": "Fix commit a28bf12",
"tags": [
"patch"
],
"url": "https://github.com/beam-cloud/beta9/commit/a28bf12cf0007c792a25d8ed282b4e8bf6f30393"
},
{
"name": "gateway-0.1.776",
"tags": [
"release-notes"
],
"url": "https://github.com/beam-cloud/beta9/releases/tag/gateway-0.1.776"
},
{
"name": "worker-0.1.756",
"tags": [
"release-notes"
],
"url": "https://github.com/beam-cloud/beta9/releases/tag/worker-0.1.756"
},
{
"name": "gateway-0.1.769 (confirmed affected)",
"tags": [
"technical-description"
],
"url": "https://github.com/beam-cloud/beta9/releases/tag/gateway-0.1.769"
},
{
"name": "worker-0.1.745 (confirmed affected)",
"tags": [
"technical-description"
],
"url": "https://github.com/beam-cloud/beta9/releases/tag/worker-0.1.745"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade the gateway to 0.1.776 or later and the worker to 0.1.756 or later. Volume identifiers and mount paths are rejected when they are empty, \".\", \"..\", or contain a slash (identifiers) or a \"..\" segment (mount paths). The gateway also refuses a volume the workspace does not own. Stubs stored before the check existed are validated when they are launched. The fix is commit a28bf12 (pull request 1897), released on 2026-09-15.\u003c/p\u003e"
}
],
"value": "Upgrade the gateway to 0.1.776 or later and the worker to 0.1.756 or later. Volume identifiers and mount paths are rejected when they are empty, \".\", \"..\", or contain a slash (identifiers) or a \"..\" segment (mount paths). The gateway also refuses a volume the workspace does not own. Stubs stored before the check existed are validated when they are launched. The fix is commit a28bf12 (pull request 1897), released on 2026-09-15."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-09-07T02:47:00.000Z",
"value": "Confirmed affected releases worker-0.1.745 and gateway-0.1.769 are current"
},
{
"lang": "en",
"time": "2026-09-15T04:03:00.000Z",
"value": "Fix merged in pull request 1897 (commit a28bf12)"
},
{
"lang": "en",
"time": "2026-09-15T04:04:00.000Z",
"value": "Fixed releases worker-0.1.756 and gateway-0.1.776 published. No vendor security advisory was filed with the pull request."
}
],
"title": "Beta9 host filesystem exposure via volume path traversal",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-120308",
"datePublished": "2026-11-01T12:51:50.481Z",
"dateReserved": "2026-11-01T12:46:51.095Z",
"dateUpdated": "2026-11-02T19:45:15.233Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-120307 (GCVE-0-2026-120307)
Vulnerability from cvelistv5 – Published: 2026-11-01 12:49 – Updated: 2026-11-02 19:46
VLAI
EPSS
VEX
Title
Beta9 container escape via unvalidated sandbox file paths
Summary
The Beta9 worker serves the sandbox file API from outside the container. getHostPathFromContainerPath turns the tenant's container path into a worker path. If the unresolved path starts with a mount destination, including the default upload mount at /tmp/.beta9, the remainder is joined onto that mount's source with filepath.Join, which cleans parent-directory segments after the prefix check. A long enough run of those segments names any absolute path on the worker. A path that matches no mount is joined onto the container root and opened in the worker's own filesystem, so an absolute symbolic link such as /var/run pointing at /run is followed against the worker root. Upload, download, stat, list, find-in-files, replace-in-files, and delete-file all call this helper. A tenant with a workspace token and one running sandbox can read, write, list, and delete files on the hosting worker as root, including files of other tenants on that machine. A read-only proof downloaded the worker pod's Kubernetes service account token through the file API for a path that did not exist inside the sandbox. In the shipped remote-node manifests that service account is bound to cluster-admin. Fixed in worker 0.1.756: sandbox file operations and workspace sync open paths with os.OpenRoot, so parent-directory and symlink lookups stay inside the container root or the mount source.
Severity
9.9 (Critical)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-11-02 19:46 UTC
CWE
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/beam-cloud/beta9 | product |
| https://github.com/beam-cloud/beta9/pull/1897 | patch |
| https://github.com/beam-cloud/beta9/commit/a28bf1… | patch |
| https://github.com/beam-cloud/beta9/releases/tag/… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| beam-cloud | Beta9 worker |
Affected:
0 , < 0.1.756
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-120307",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-02T19:46:03.614684Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-02T19:46:38.442Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/beam-cloud/beta9/releases",
"defaultStatus": "unaffected",
"packageName": "github.com/beam-cloud/beta9",
"product": "Beta9 worker",
"programFiles": [
"pkg/worker/container_server.go",
"pkg/worker/lifecycle.go",
"pkg/types/worker.go"
],
"repo": "git://github.com/beam-cloud/beta9",
"vendor": "beam-cloud",
"versions": [
{
"lessThan": "0.1.756",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Natan Nehorai"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe Beta9 worker serves the sandbox file API from outside the container. getHostPathFromContainerPath turns the tenant\u0027s container path into a worker path. If the unresolved path starts with a mount destination, including the default upload mount at /tmp/.beta9, the remainder is joined onto that mount\u0027s source with filepath.Join, which cleans parent-directory segments after the prefix check. A long enough run of those segments names any absolute path on the worker. A path that matches no mount is joined onto the container root and opened in the worker\u0027s own filesystem, so an absolute symbolic link such as /var/run pointing at /run is followed against the worker root. Upload, download, stat, list, find-in-files, replace-in-files, and delete-file all call this helper. A tenant with a workspace token and one running sandbox can read, write, list, and delete files on the hosting worker as root, including files of other tenants on that machine. A read-only proof downloaded the worker pod\u0027s Kubernetes service account token through the file API for a path that did not exist inside the sandbox. In the shipped remote-node manifests that service account is bound to cluster-admin. Fixed in worker 0.1.756: sandbox file operations and workspace sync open paths with os.OpenRoot, so parent-directory and symlink lookups stay inside the container root or the mount source.\u003c/p\u003e"
}
],
"value": "The Beta9 worker serves the sandbox file API from outside the container. getHostPathFromContainerPath turns the tenant\u0027s container path into a worker path. If the unresolved path starts with a mount destination, including the default upload mount at /tmp/.beta9, the remainder is joined onto that mount\u0027s source with filepath.Join, which cleans parent-directory segments after the prefix check. A long enough run of those segments names any absolute path on the worker. A path that matches no mount is joined onto the container root and opened in the worker\u0027s own filesystem, so an absolute symbolic link such as /var/run pointing at /run is followed against the worker root. Upload, download, stat, list, find-in-files, replace-in-files, and delete-file all call this helper. A tenant with a workspace token and one running sandbox can read, write, list, and delete files on the hosting worker as root, including files of other tenants on that machine. A read-only proof downloaded the worker pod\u0027s Kubernetes service account token through the file API for a path that did not exist inside the sandbox. In the shipped remote-node manifests that service account is bound to cluster-admin. Fixed in worker 0.1.756: sandbox file operations and workspace sync open paths with os.OpenRoot, so parent-directory and symlink lookups stay inside the container root or the mount source."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.9,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Tenant with a workspace token and a running sandbox on a worker that serves the sandbox file API"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-22",
"description": "CWE-22: Improper Limitation of a Pathname to a Restricted Directory (\u0027Path Traversal\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-23",
"description": "CWE-23: Relative Path Traversal",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-59",
"description": "CWE-59: Improper Link Resolution Before File Access (\u0027Link Following\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-01T12:49:51.981Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Beta9 repository",
"tags": [
"product"
],
"url": "https://github.com/beam-cloud/beta9"
},
{
"name": "Handle sandbox edge cases (fix pull request)",
"tags": [
"patch"
],
"url": "https://github.com/beam-cloud/beta9/pull/1897"
},
{
"name": "Fix commit a28bf12",
"tags": [
"patch"
],
"url": "https://github.com/beam-cloud/beta9/commit/a28bf12cf0007c792a25d8ed282b4e8bf6f30393"
},
{
"name": "worker-0.1.756",
"tags": [
"release-notes"
],
"url": "https://github.com/beam-cloud/beta9/releases/tag/worker-0.1.756"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade the Beta9 worker to 0.1.756 or later. Sandbox file APIs and workspace sync use os.OpenRoot, so parent-directory segments and symbolic links stay inside the container root or the mount source. File operations refuse read-only mounts and do not write through a symlink swapped in after path resolution. The fix is commit a28bf12 (pull request 1897), released as worker-0.1.756 on 2026-09-15.\u003c/p\u003e"
}
],
"value": "Upgrade the Beta9 worker to 0.1.756 or later. Sandbox file APIs and workspace sync use os.OpenRoot, so parent-directory segments and symbolic links stay inside the container root or the mount source. File operations refuse read-only mounts and do not write through a symlink swapped in after path resolution. The fix is commit a28bf12 (pull request 1897), released as worker-0.1.756 on 2026-09-15."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-09-15T04:03:00.000Z",
"value": "Fix merged in pull request 1897 (commit a28bf12)"
},
{
"lang": "en",
"time": "2026-09-15T04:03:00.000Z",
"value": "Fixed release worker-0.1.756 published. No vendor security advisory was filed with the pull request."
}
],
"title": "Beta9 container escape via unvalidated sandbox file paths",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-120307",
"datePublished": "2026-11-01T12:49:51.981Z",
"dateReserved": "2026-11-01T12:45:12.430Z",
"dateUpdated": "2026-11-02T19:46:38.442Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-120306 (GCVE-0-2026-120306)
Vulnerability from cvelistv5 – Published: 2026-11-01 12:49 – Updated: 2026-11-02 19:47
VLAI
EPSS
VEX
Title
Beta9 build sandbox escape via chroot-only isolation
Summary
Beta9 turns each shell command in a tenant image definition into a Dockerfile RUN line and executes it with Buildah on the build worker. The worker image sets BUILDAH_ISOLATION=chroot, and no buildah invocation passes --isolation, so the step only changes its filesystem root. It keeps the worker pod's PID, network, IPC, and user namespaces, runs as uid 0, and holds CAP_DAC_OVERRIDE. PID 1 in that procfs is the worker entrypoint, so /proc/1/root is the worker container's filesystem and is writable. That filesystem contains the runc, buildah, and runsc binaries the worker uses to start tenant containers, the worker's Kubernetes service account token, and the host directories mounted into the pod. Worker pods are privileged. Clip v2 layered builds are the default, so a tenant with a workspace token reaches this by submitting one image build. The read-only proof confirmed the shared namespaces, CAP_DAC_OVERRIDE, and that the worker's runc binary is visible at /proc/1/root. Fixed in worker 0.1.756: Buildah RUN steps, including the WORKDIR mkdir, use OCI isolation with private PID, IPC, and network namespaces, and tenant ARG values are passed only into the build container.
Severity
9.9 (Critical)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-11-02 19:47 UTC
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/beam-cloud/beta9 | product |
| https://github.com/beam-cloud/beta9/pull/1897 | patch |
| https://github.com/beam-cloud/beta9/commit/a28bf1… | patch |
| https://github.com/beam-cloud/beta9/releases/tag/… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| beam-cloud | Beta9 worker |
Affected:
0 , < 0.1.756
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-120306",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-02T19:47:11.566037Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-02T19:47:25.051Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/beam-cloud/beta9/releases",
"defaultStatus": "unaffected",
"packageName": "github.com/beam-cloud/beta9",
"product": "Beta9 worker",
"programFiles": [
"docker/Dockerfile.worker",
"pkg/worker/image.go",
"pkg/worker/image_build_layered.go",
"pkg/abstractions/image/builder.go",
"pkg/scheduler/pool_local.go"
],
"repo": "git://github.com/beam-cloud/beta9",
"vendor": "beam-cloud",
"versions": [
{
"lessThan": "0.1.756",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Natan Nehorai"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eBeta9 turns each shell command in a tenant image definition into a Dockerfile RUN line and executes it with Buildah on the build worker. The worker image sets BUILDAH_ISOLATION=chroot, and no buildah invocation passes --isolation, so the step only changes its filesystem root. It keeps the worker pod\u0027s PID, network, IPC, and user namespaces, runs as uid 0, and holds CAP_DAC_OVERRIDE. PID 1 in that procfs is the worker entrypoint, so /proc/1/root is the worker container\u0027s filesystem and is writable. That filesystem contains the runc, buildah, and runsc binaries the worker uses to start tenant containers, the worker\u0027s Kubernetes service account token, and the host directories mounted into the pod. Worker pods are privileged. Clip v2 layered builds are the default, so a tenant with a workspace token reaches this by submitting one image build. The read-only proof confirmed the shared namespaces, CAP_DAC_OVERRIDE, and that the worker\u0027s runc binary is visible at /proc/1/root. Fixed in worker 0.1.756: Buildah RUN steps, including the WORKDIR mkdir, use OCI isolation with private PID, IPC, and network namespaces, and tenant ARG values are passed only into the build container.\u003c/p\u003e"
}
],
"value": "Beta9 turns each shell command in a tenant image definition into a Dockerfile RUN line and executes it with Buildah on the build worker. The worker image sets BUILDAH_ISOLATION=chroot, and no buildah invocation passes --isolation, so the step only changes its filesystem root. It keeps the worker pod\u0027s PID, network, IPC, and user namespaces, runs as uid 0, and holds CAP_DAC_OVERRIDE. PID 1 in that procfs is the worker entrypoint, so /proc/1/root is the worker container\u0027s filesystem and is writable. That filesystem contains the runc, buildah, and runsc binaries the worker uses to start tenant containers, the worker\u0027s Kubernetes service account token, and the host directories mounted into the pod. Worker pods are privileged. Clip v2 layered builds are the default, so a tenant with a workspace token reaches this by submitting one image build. The read-only proof confirmed the shared namespaces, CAP_DAC_OVERRIDE, and that the worker\u0027s runc binary is visible at /proc/1/root. Fixed in worker 0.1.756: Buildah RUN steps, including the WORKDIR mkdir, use OCI isolation with private PID, IPC, and network namespaces, and tenant ARG values are passed only into the build container."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.9,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Default clip v2 layered image build on a privileged build-pool worker"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-653",
"description": "CWE-653: Improper Isolation or Compartmentalization",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-269",
"description": "CWE-269: Improper Privilege Management",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-01T12:49:05.857Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Beta9 repository",
"tags": [
"product"
],
"url": "https://github.com/beam-cloud/beta9"
},
{
"name": "Handle sandbox edge cases (fix pull request)",
"tags": [
"patch"
],
"url": "https://github.com/beam-cloud/beta9/pull/1897"
},
{
"name": "Fix commit a28bf12",
"tags": [
"patch"
],
"url": "https://github.com/beam-cloud/beta9/commit/a28bf12cf0007c792a25d8ed282b4e8bf6f30393"
},
{
"name": "worker-0.1.756",
"tags": [
"release-notes"
],
"url": "https://github.com/beam-cloud/beta9/releases/tag/worker-0.1.756"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade the Beta9 worker to 0.1.756 or later. That release drops chroot isolation: Buildah RUN steps use OCI isolation with private PID, IPC, and network namespaces, and tenant build arguments are applied inside the build container rather than in the Buildah process environment. The fix is commit a28bf12 (pull request 1897), released as worker-0.1.756 on 2026-09-15. Gateway 0.1.776 is the gateway tag cut from the same commit; the isolation change itself is in the worker image.\u003c/p\u003e"
}
],
"value": "Upgrade the Beta9 worker to 0.1.756 or later. That release drops chroot isolation: Buildah RUN steps use OCI isolation with private PID, IPC, and network namespaces, and tenant build arguments are applied inside the build container rather than in the Buildah process environment. The fix is commit a28bf12 (pull request 1897), released as worker-0.1.756 on 2026-09-15. Gateway 0.1.776 is the gateway tag cut from the same commit; the isolation change itself is in the worker image."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-09-15T04:03:00.000Z",
"value": "Fix merged in pull request 1897 (commit a28bf12)"
},
{
"lang": "en",
"time": "2026-09-15T04:03:00.000Z",
"value": "Fixed release worker-0.1.756 published. No vendor security advisory was filed with the pull request."
}
],
"title": "Beta9 build sandbox escape via chroot-only isolation",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-120306",
"datePublished": "2026-11-01T12:49:05.857Z",
"dateReserved": "2026-11-01T12:32:40.057Z",
"dateUpdated": "2026-11-02T19:47:25.051Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-92892 (GCVE-0-2026-92892)
Vulnerability from cvelistv5 – Published: 2026-10-13 17:47 – Updated: 2026-10-22 16:06
VLAI
EPSS
VEX
Title
Potential command execution on the host running JFrog CLI.
Summary
Potential arbitrary code execution under specific configurations.
Updated October 22, 2026: Affected versions now include JFrog CLI v2.127.0. For remediation, update to v2.128.0 or later.
Severity
9 (Critical)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-10-16 15:13 UTC
CWE
- CWE-88 - Improper Neutralization of Argument Delimiters in a Command ('Argument Injection')
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://github.com/jfrog/jfrog-cli/releases | vendor-advisory |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-92892",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T15:13:05.908062Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-16T15:31:55.790Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "jfrog-cli",
"vendor": "jfrog",
"versions": [
{
"lessThan": "2.128.0",
"status": "affected",
"version": "0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "nadavgb (reported via HackerOne)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003ePotential arbitrary code execution under specific configurations.\u003cbr\u003eUpdated October 22, 2026: Affected versions now include JFrog CLI v2.127.0. For remediation, update to v2.128.0 or later.\u003c/p\u003e"
}
],
"value": "Potential arbitrary code execution under specific configurations.\nUpdated October 22, 2026: Affected versions now include JFrog CLI v2.127.0. For remediation, update to v2.128.0 or later."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-88",
"description": "CWE-88 Improper Neutralization of Argument Delimiters in a Command (\u0027Argument Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-22T16:06:56.066Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://github.com/jfrog/jfrog-cli/releases"
}
],
"title": "Potential command execution on the host running JFrog CLI."
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-92892",
"datePublished": "2026-10-13T17:47:43.012Z",
"dateReserved": "2026-09-17T08:56:23.499Z",
"dateUpdated": "2026-10-22T16:06:56.066Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-105192 (GCVE-0-2026-105192)
Vulnerability from cvelistv5 – Published: 2026-10-07 09:40 – Updated: 2026-10-29 10:24
VLAI
EPSS
VEX
Title
LMCache Unauthenticated RCE in multiprocess mode via pickle deserialization
Summary
LMCache multiprocess mode, also called distributed mode, opens an unauthenticated ZeroMQ ROUTER so worker processes can register and share KV cache blocks. Messages on that socket are msgpack. Extension code 1 is passed to DeviceIPCWrapper.Deserialize, which calls pickle.loads, while the server is still decoding request arguments and before the handler runs. A single unauthenticated ZMQ DEALER message to the transport port (default 5555) therefore executes code as the user the LMCache process runs as. Official container images run that process as root. The transport binds to localhost unless the operator sets a routable address with --host, which is how multi-node deployments let peers connect. The decode path shipped in v0.3.9 and is present through v0.5.5, including the v0.5.6 release candidates. v0.5.6, published on 2026-10-14, removes pickle.loads from this path.
Severity
9.8 (Critical)
SSVC
Exploitation: none
Automatable: yes
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-10-07 17:47 UTC
CWE
Assigner
References
11 references
| URL | Tags |
|---|---|
| https://github.com/LMCache/LMCache | product |
| https://pypi.org/project/lmcache/ | product |
| https://github.com/LMCache/LMCache/blob/v0.5.5/lm… | technical-description |
| https://github.com/LMCache/LMCache/blob/v0.3.9/lm… | technical-description |
| https://research.jfrog.com/vulnerabilities/lmcach… | vendor-advisory |
| https://blog.lmcache.ai/en/2026/10/13/an-update-o… | vendor-advisory |
| https://github.com/LMCache/LMCache/security/advis… | vendor-advisory |
| https://github.com/LMCache/LMCache/pull/5644 | patch |
| https://github.com/LMCache/LMCache/releases/tag/v0.5.6 | patchrelease-notes |
| https://github.com/LMCache/LMCache/pull/5684 | mitigation |
| https://github.com/LMCache/LMCache/pull/5685 | mitigation |
Impacted products
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-105192",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-07T17:47:55.401134Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-07T17:48:50.681Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pypi.org/project/lmcache/",
"defaultStatus": "unaffected",
"packageName": "lmcache",
"product": "LMCache",
"programFiles": [
"lmcache/v1/multiprocess/transport/zmq_impl/mq.py",
"lmcache/v1/multiprocess/mq.py",
"lmcache/v1/multiprocess/custom_types.py",
"lmcache/v1/platform/base/ipc_wrapper.py",
"lmcache/v1/platform/base_ipc_wrapper.py"
],
"repo": "git://github.com/LMCache/LMCache",
"vendor": "LMCache",
"versions": [
{
"lessThan": "0.5.6",
"status": "affected",
"version": "0.3.9",
"versionType": "python"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eLMCache multiprocess mode, also called distributed mode, opens an unauthenticated ZeroMQ ROUTER so worker processes can register and share KV cache blocks. Messages on that socket are msgpack. Extension code 1 is passed to DeviceIPCWrapper.Deserialize, which calls pickle.loads, while the server is still decoding request arguments and before the handler runs. A single unauthenticated ZMQ DEALER message to the transport port (default 5555) therefore executes code as the user the LMCache process runs as. Official container images run that process as root. The transport binds to localhost unless the operator sets a routable address with --host, which is how multi-node deployments let peers connect. The decode path shipped in v0.3.9 and is present through v0.5.5, including the v0.5.6 release candidates. v0.5.6, published on 2026-10-14, removes pickle.loads from this path.\u003c/p\u003e"
}
],
"value": "LMCache multiprocess mode, also called distributed mode, opens an unauthenticated ZeroMQ ROUTER so worker processes can register and share KV cache blocks. Messages on that socket are msgpack. Extension code 1 is passed to DeviceIPCWrapper.Deserialize, which calls pickle.loads, while the server is still decoding request arguments and before the handler runs. A single unauthenticated ZMQ DEALER message to the transport port (default 5555) therefore executes code as the user the LMCache process runs as. Official container images run that process as root. The transport binds to localhost unless the operator sets a routable address with --host, which is how multi-node deployments let peers connect. The decode path shipped in v0.3.9 and is present through v0.5.5, including the v0.5.6 release candidates. v0.5.6, published on 2026-10-14, removes pickle.loads from this path."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Multiprocess mode bound to a routable address, the documented multi-node deployment"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-502",
"description": "CWE-502: Deserialization of Untrusted Data",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-306",
"description": "CWE-306: Missing Authentication for Critical Function",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-29T10:24:45.984Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "LMCache repository",
"tags": [
"product"
],
"url": "https://github.com/LMCache/LMCache"
},
{
"name": "lmcache on PyPI",
"tags": [
"product"
],
"url": "https://pypi.org/project/lmcache/"
},
{
"name": "DeviceIPCWrapper.Deserialize calls pickle.loads (v0.5.5)",
"tags": [
"technical-description"
],
"url": "https://github.com/LMCache/LMCache/blob/v0.5.5/lmcache/v1/platform/base/ipc_wrapper.py"
},
{
"name": "msgpack extension code 1 decoded with pickle (v0.3.9)",
"tags": [
"technical-description"
],
"url": "https://github.com/LMCache/LMCache/blob/v0.3.9/lmcache/v1/multiprocess/custom_types.py"
},
{
"name": "JFrog Security Research advisory JFSA-2026-001694382",
"tags": [
"vendor-advisory"
],
"url": "https://research.jfrog.com/vulnerabilities/lmcache-is-vulnerable-to-unauthenticated-remote-code-execution-via-pickle-deserialization-on-the-multiprocess-zmq-transport-cve-2026-105192-jfsa-2026-001694382/"
},
{
"name": "LMCache update on CVE-2026-105192",
"tags": [
"vendor-advisory"
],
"url": "https://blog.lmcache.ai/en/2026/10/13/an-update-on-cve-2026-105192/"
},
{
"name": "GHSA-w5f2-9q9c-ff4h",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/LMCache/LMCache/security/advisories/GHSA-w5f2-9q9c-ff4h"
},
{
"name": "PR #5644: replace pickle in device IPC descriptors",
"tags": [
"patch"
],
"url": "https://github.com/LMCache/LMCache/pull/5644"
},
{
"name": "LMCache v0.5.6",
"tags": [
"patch",
"release-notes"
],
"url": "https://github.com/LMCache/LMCache/releases/tag/v0.5.6"
},
{
"name": "PR #5684: bind example Kubernetes deployment to localhost",
"tags": [
"mitigation"
],
"url": "https://github.com/LMCache/LMCache/pull/5684"
},
{
"name": "PR #5685: run official images as a non-root user",
"tags": [
"mitigation"
],
"url": "https://github.com/LMCache/LMCache/pull/5685"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to LMCache 0.5.6 or later. That release replaces pickle in device IPC descriptors with versioned, typed MessagePack descriptors. Descriptors are validated before use, the wrapper type is chosen from a fixed local allowlist, and there is no pickle fallback. The change covers the ZeroMQ and gRPC paths. The wire format changed, so upgrade workers and servers together. The fix is PR #5644 and it is in the v0.5.6 tag. PR #5684, which binds the example Kubernetes deployment to localhost, and PR #5685, which runs the official images as a non-root user, were merged after the v0.5.6 tag was cut and are included in v0.5.7rc2. The v0.5.6 example deployment still passes --host 0.0.0.0, and the v0.5.6 images still run as root.\u003c/p\u003e"
}
],
"value": "Upgrade to LMCache 0.5.6 or later. That release replaces pickle in device IPC descriptors with versioned, typed MessagePack descriptors. Descriptors are validated before use, the wrapper type is chosen from a fixed local allowlist, and there is no pickle fallback. The change covers the ZeroMQ and gRPC paths. The wire format changed, so upgrade workers and servers together. The fix is PR #5644 and it is in the v0.5.6 tag. PR #5684, which binds the example Kubernetes deployment to localhost, and PR #5685, which runs the official images as a non-root user, were merged after the v0.5.6 tag was cut and are included in v0.5.7rc2. The v0.5.6 example deployment still passes --host 0.0.0.0, and the v0.5.6 images still run as root."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2025-10-29T21:47:00.000Z",
"value": "LMCache v0.3.9 ships the multiprocess ZMQ transport and the pickle-backed msgpack extension"
},
{
"lang": "en",
"time": "2026-10-12T06:22:00.000Z",
"value": "PR #5644 merged: pickle removed from device IPC descriptors"
},
{
"lang": "en",
"time": "2026-10-14T22:21:00.000Z",
"value": "LMCache v0.5.6 released, the first version that includes the fix"
}
],
"title": "LMCache Unauthenticated RCE in multiprocess mode via pickle deserialization",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-105192",
"datePublished": "2026-10-07T09:40:11.449Z",
"dateReserved": "2026-10-04T11:50:41.213Z",
"dateUpdated": "2026-10-29T10:24:45.984Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-96456 (GCVE-0-2026-96456)
Vulnerability from cvelistv5 – Published: 2026-09-23 10:03 – Updated: 2026-09-23 13:58
VLAI
EPSS
VEX
Title
Reachy Mini Bluetooth PIN authentication can be bypassed by racing an authenticated device
Summary
The Reachy Mini Bluetooth service asks a connecting device for a PIN before it will accept commands. The check protects the session but not the caller, so an attacker in Bluetooth range can ride along on someone else's successful authentication.
The authenticated state is kept in a single shared flag on the service instance rather than per device. BlueZ passes the calling device's identity to the characteristic write handler in the options argument, but WriteValue(self, value, options) in src/reachy_mini/daemon/app/services/bluetooth/bluetooth_service.py ignores options entirely. The handler therefore has no idea which device sent a given write, and it cannot tell the authenticated one from any other.
Once any device completes the PIN exchange, the flag is set and every nearby device can send CMD_ commands until it resets. An attacker simply waits within radio range for a legitimate user to authenticate, then writes commands into the same window. No PIN is ever guessed or brute-forced.
This is the second step of a three-step chain that JFrog documented against the robot. The first is the unrestricted file upload in the media sounds API, tracked as CVE-2026-55419, which places an attacker-controlled script on the filesystem. This issue then provides command access over Bluetooth. The third is the Bluetooth command handler path traversal, tracked as CVE-2026-62661, which runs that script as root.
Severity
6.3 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-23 13:56 UTC
CWE
Assigner
References
5 references
| URL | Tags |
|---|---|
| https://github.com/pollen-robotics/reachy_mini/se… | vendor-advisory |
| https://github.com/pollen-robotics/reachy_mini | product |
| https://github.com/pollen-robotics/reachy_mini/bl… | product |
| https://www.cve.org/CVERecord?id=CVE-2026-62661 | related |
| https://www.cve.org/CVERecord?id=CVE-2026-55419 | related |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Pollen Robotics | Reachy Mini |
Affected:
0 , ≤ 1.11.0
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-96456",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-23T13:56:00.359870Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T13:58:37.766Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pypi.org",
"defaultStatus": "affected",
"packageName": "reachy_mini",
"platforms": [
"Linux"
],
"product": "Reachy Mini",
"programFiles": [
"src/reachy_mini/daemon/app/services/bluetooth/bluetooth_service.py"
],
"programRoutines": [
{
"name": "WriteValue"
}
],
"repo": "https://github.com/pollen-robotics/reachy_mini",
"vendor": "Pollen Robotics",
"versions": [
{
"lessThanOrEqual": "1.11.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Natan Nehorai | JFrog"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe Reachy Mini Bluetooth service asks a connecting device for a PIN before it will accept commands. The check protects the session but not the caller, so an attacker in Bluetooth range can ride along on someone else\u0027s successful authentication.\u003c/p\u003e\u003cp\u003eThe authenticated state is kept in a single shared flag on the service instance rather than per device. BlueZ passes the calling device\u0027s identity to the characteristic write handler in the options argument, but WriteValue(self, value, options) in src/reachy_mini/daemon/app/services/bluetooth/bluetooth_service.py ignores options entirely. The handler therefore has no idea which device sent a given write, and it cannot tell the authenticated one from any other.\u003c/p\u003e\u003cp\u003eOnce any device completes the PIN exchange, the flag is set and every nearby device can send CMD_ commands until it resets. An attacker simply waits within radio range for a legitimate user to authenticate, then writes commands into the same window. No PIN is ever guessed or brute-forced.\u003c/p\u003e\u003cp\u003eThis is the second step of a three-step chain that JFrog documented against the robot. The first is the unrestricted file upload in the media sounds API, tracked as CVE-2026-55419, which places an attacker-controlled script on the filesystem. This issue then provides command access over Bluetooth. The third is the Bluetooth command handler path traversal, tracked as CVE-2026-62661, which runs that script as root.\u003c/p\u003e"
}
],
"value": "The Reachy Mini Bluetooth service asks a connecting device for a PIN before it will accept commands. The check protects the session but not the caller, so an attacker in Bluetooth range can ride along on someone else\u0027s successful authentication.\n\n\n\nThe authenticated state is kept in a single shared flag on the service instance rather than per device. BlueZ passes the calling device\u0027s identity to the characteristic write handler in the options argument, but WriteValue(self, value, options) in src/reachy_mini/daemon/app/services/bluetooth/bluetooth_service.py ignores options entirely. The handler therefore has no idea which device sent a given write, and it cannot tell the authenticated one from any other.\n\n\n\nOnce any device completes the PIN exchange, the flag is set and every nearby device can send CMD_ commands until it resets. An attacker simply waits within radio range for a legitimate user to authenticate, then writes commands into the same window. No PIN is ever guessed or brute-forced.\n\n\n\nThis is the second step of a three-step chain that JFrog documented against the robot. The first is the unrestricted file upload in the media sounds API, tracked as CVE-2026-55419, which places an attacker-controlled script on the filesystem. This issue then provides command access over Bluetooth. The third is the Bluetooth command handler path traversal, tracked as CVE-2026-62661, which runs that script as root."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog holds a private proof of concept. Full exploit details are not included in this record.\u003c/p\u003e"
}
],
"value": "JFrog holds a private proof of concept. Full exploit details are not included in this record."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "ADJACENT_NETWORK",
"availabilityImpact": "LOW",
"baseScore": 6.3,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-362",
"description": "CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization (\u0027Race Condition\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-287",
"description": "CWE-287 Improper Authentication",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T10:03:06.643Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-993g-hgjh-whmf",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/pollen-robotics/reachy_mini/security/advisories/GHSA-993g-hgjh-whmf"
},
{
"name": "Reachy Mini",
"tags": [
"product"
],
"url": "https://github.com/pollen-robotics/reachy_mini"
},
{
"name": "bluetooth_service.py - WriteValue ignores the caller identity in options",
"tags": [
"product"
],
"url": "https://github.com/pollen-robotics/reachy_mini/blob/main/src/reachy_mini/daemon/app/services/bluetooth/bluetooth_service.py"
},
{
"name": "CVE-2026-62661 - Bluetooth command handler path traversal (step 3 of the chain)",
"tags": [
"related"
],
"url": "https://www.cve.org/CVERecord?id=CVE-2026-62661"
},
{
"name": "CVE-2026-55419 - unrestricted file upload in the media sounds API (step 1 of the chain)",
"tags": [
"related"
],
"url": "https://www.cve.org/CVERecord?id=CVE-2026-55419"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Reachy Mini Bluetooth PIN authentication can be bypassed by racing an authenticated device",
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-96456",
"datePublished": "2026-09-23T10:03:06.643Z",
"dateReserved": "2026-09-23T09:53:09.797Z",
"dateUpdated": "2026-09-23T13:58:37.766Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-96455 (GCVE-0-2026-96455)
Vulnerability from cvelistv5 – Published: 2026-09-23 10:01 – Updated: 2026-09-23 13:59
VLAI
EPSS
VEX
Title
Reachy Mini daemon allows unauthenticated remote code execution through the app installation endpoint
Summary
The Reachy Mini daemon exposes an HTTP API for managing the robot. Its app installation endpoint, POST /apps/install in src/reachy_mini/daemon/app/routers/apps.py, has no authentication. The handler's only dependency is Depends(get_app_manager), which just hands back the manager object from application state, so nothing in the chain ever checks a credential.
The endpoint takes an AppInfo body naming a Hugging Face Space. The daemon downloads that Space and installs it as a Python package through install_package in src/reachy_mini/apps/sources/local_common_venv.py, using uv or pip. Installing a Python package runs the package's own build and setup code, so whoever chooses the Space chooses what code the robot runs. Anyone can publish a public Hugging Face Space, so this is not a meaningful restriction on the attacker.
How far this reaches depends on the model. In _resolve_bind_host in src/reachy_mini/daemon/app/main.py the daemon binds 0.0.0.0 when it runs as the wireless version and 127.0.0.1 otherwise, with the vendor's own comment explaining that the robot has to be reachable on the LAN. On a wireless unit, then, any host on the same network can install and run code on the robot without credentials.
One related change has already shipped but does not fix this. Version 1.8.2 replaced the wildcard CORS policy with an allow list of localhost and Tauri origins. That closes the browser drive-by route, where a web page the victim visits silently calls the endpoint in the background. It has no effect on this issue: CORS is enforced by browsers and governs whether script may read a response, while a direct HTTP request from another machine on the network involves no browser, no preflight and no CORS check at all.
Severity
8.8 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-23 13:59 UTC
CWE
Assigner
References
5 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Pollen Robotics | Reachy Mini |
Affected:
0 , ≤ 1.11.0
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-96455",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-23T13:59:27.912505Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T13:59:45.518Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pypi.org",
"defaultStatus": "affected",
"packageName": "reachy_mini",
"platforms": [
"Linux"
],
"product": "Reachy Mini",
"programFiles": [
"src/reachy_mini/daemon/app/routers/apps.py",
"src/reachy_mini/daemon/app/main.py",
"src/reachy_mini/apps/sources/local_common_venv.py"
],
"programRoutines": [
{
"name": "install_app"
},
{
"name": "install_package"
},
{
"name": "_resolve_bind_host"
}
],
"repo": "https://github.com/pollen-robotics/reachy_mini",
"vendor": "Pollen Robotics",
"versions": [
{
"lessThanOrEqual": "1.11.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick | JFrog"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe Reachy Mini daemon exposes an HTTP API for managing the robot. Its app installation endpoint, POST /apps/install in src/reachy_mini/daemon/app/routers/apps.py, has no authentication. The handler\u0027s only dependency is Depends(get_app_manager), which just hands back the manager object from application state, so nothing in the chain ever checks a credential.\u003c/p\u003e\u003cp\u003eThe endpoint takes an AppInfo body naming a Hugging Face Space. The daemon downloads that Space and installs it as a Python package through install_package in src/reachy_mini/apps/sources/local_common_venv.py, using uv or pip. Installing a Python package runs the package\u0027s own build and setup code, so whoever chooses the Space chooses what code the robot runs. Anyone can publish a public Hugging Face Space, so this is not a meaningful restriction on the attacker.\u003c/p\u003e\u003cp\u003eHow far this reaches depends on the model. In _resolve_bind_host in src/reachy_mini/daemon/app/main.py the daemon binds 0.0.0.0 when it runs as the wireless version and 127.0.0.1 otherwise, with the vendor\u0027s own comment explaining that the robot has to be reachable on the LAN. On a wireless unit, then, any host on the same network can install and run code on the robot without credentials.\u003c/p\u003e\u003cp\u003eOne related change has already shipped but does not fix this. Version 1.8.2 replaced the wildcard CORS policy with an allow list of localhost and Tauri origins. That closes the browser drive-by route, where a web page the victim visits silently calls the endpoint in the background. It has no effect on this issue: CORS is enforced by browsers and governs whether script may read a response, while a direct HTTP request from another machine on the network involves no browser, no preflight and no CORS check at all.\u003c/p\u003e"
}
],
"value": "The Reachy Mini daemon exposes an HTTP API for managing the robot. Its app installation endpoint, POST /apps/install in src/reachy_mini/daemon/app/routers/apps.py, has no authentication. The handler\u0027s only dependency is Depends(get_app_manager), which just hands back the manager object from application state, so nothing in the chain ever checks a credential.\n\n\n\nThe endpoint takes an AppInfo body naming a Hugging Face Space. The daemon downloads that Space and installs it as a Python package through install_package in src/reachy_mini/apps/sources/local_common_venv.py, using uv or pip. Installing a Python package runs the package\u0027s own build and setup code, so whoever chooses the Space chooses what code the robot runs. Anyone can publish a public Hugging Face Space, so this is not a meaningful restriction on the attacker.\n\n\n\nHow far this reaches depends on the model. In _resolve_bind_host in src/reachy_mini/daemon/app/main.py the daemon binds 0.0.0.0 when it runs as the wireless version and 127.0.0.1 otherwise, with the vendor\u0027s own comment explaining that the robot has to be reachable on the LAN. On a wireless unit, then, any host on the same network can install and run code on the robot without credentials.\n\n\n\nOne related change has already shipped but does not fix this. Version 1.8.2 replaced the wildcard CORS policy with an allow list of localhost and Tauri origins. That closes the browser drive-by route, where a web page the victim visits silently calls the endpoint in the background. It has no effect on this issue: CORS is enforced by browsers and governs whether script may read a response, while a direct HTTP request from another machine on the network involves no browser, no preflight and no CORS check at all."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog holds a private proof of concept, including a recording, that was shared with the vendor as part of the original disclosure on 2026-05-17. Full exploit details are not included in this record.\u003c/p\u003e"
}
],
"value": "JFrog holds a private proof of concept, including a recording, that was shared with the vendor as part of the original disclosure on 2026-05-17. Full exploit details are not included in this record."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "ADJACENT_NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-306",
"description": "CWE-306 Missing Authentication for Critical Function",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-494",
"description": "CWE-494 Download of Code Without Integrity Check",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T10:01:15.099Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Reachy Mini",
"tags": [
"product"
],
"url": "https://github.com/pollen-robotics/reachy_mini"
},
{
"name": "apps.py - install_app has no authentication dependency",
"tags": [
"product"
],
"url": "https://github.com/pollen-robotics/reachy_mini/blob/main/src/reachy_mini/daemon/app/routers/apps.py"
},
{
"name": "main.py - _resolve_bind_host binds 0.0.0.0 on the wireless version",
"tags": [
"product"
],
"url": "https://github.com/pollen-robotics/reachy_mini/blob/main/src/reachy_mini/daemon/app/main.py"
},
{
"name": "PR #1207 - CORS restricted to localhost (does not address this issue)",
"tags": [
"patch"
],
"url": "https://github.com/pollen-robotics/reachy_mini/pull/1207"
},
{
"name": "reachy_mini v1.11.0 - latest release, still affected",
"tags": [
"release-notes"
],
"url": "https://github.com/pollen-robotics/reachy_mini/releases/tag/v1.11.0"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Reachy Mini daemon allows unauthenticated remote code execution through the app installation endpoint",
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-96455",
"datePublished": "2026-09-23T10:01:15.099Z",
"dateReserved": "2026-09-23T09:53:08.502Z",
"dateUpdated": "2026-09-23T13:59:45.518Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-96454 (GCVE-0-2026-96454)
Vulnerability from cvelistv5 – Published: 2026-09-23 09:56 – Updated: 2026-09-23 14:01
VLAI
EPSS
VEX
Title
Pake grants unrestricted IPC access to every HTTPS origin loaded in generated applications
Summary
Pake turns a website into a desktop application built on Tauri. Every application it generates inherits two settings from the upstream template, and together they hand native functionality to untrusted web content.
The first is in src-tauri/capabilities/default.json, which grants IPC access with "remote": { "urls": ["https://*.*"] }. That wildcard tells Tauri to accept IPC from any HTTPS origin, not just the site the application was built to wrap. The second is "withGlobalTauri": true in src-tauri/tauri.conf.json, which puts window.__TAURI__.core.invoke() in reach of ordinary page JavaScript.
Tauri's access control list only checks plugin commands, the ones prefixed with plugin:. Commands the application registers itself through generate_handler!, known as app commands, are never checked against the ACL. So once an origin holds IPC access, it can call every app command with nothing else standing in the way. Pake registers download_file as an app command, and it does not appear in the permissions list because it does not need to.
The practical effect is that any script running on any HTTPS page inside a Pake application can invoke the application's native commands. That includes third-party script the wrapped site loads on its own, such as analytics, advertising, or a compromised CDN. Anyone distributing their own Pake application gets the same access without asking for it. Chained with the path traversal in download_file that is tracked separately as CVE-2026-82635, this reaches arbitrary file write and persistent code execution.
Severity
8.2 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-23 14:01 UTC
CWE
Assigner
References
5 references
| URL | Tags |
|---|---|
| https://github.com/tw93/Pake | product |
| https://github.com/tw93/Pake/blob/main/src-tauri/… | product |
| https://github.com/tw93/Pake/blob/main/src-tauri/… | product |
| https://v2.tauri.app/security/capabilities/ | technical-description |
| https://github.com/tw93/Pake/releases/tag/V3.17.0 | release-notes |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-96454",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-23T14:01:27.089525Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T14:01:32.711Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://registry.npmjs.org",
"defaultStatus": "affected",
"packageName": "pake-cli",
"platforms": [
"macOS",
"Windows",
"Linux"
],
"product": "Pake",
"programFiles": [
"src-tauri/capabilities/default.json",
"src-tauri/tauri.conf.json"
],
"repo": "https://github.com/tw93/Pake",
"vendor": "tw93",
"versions": [
{
"lessThanOrEqual": "3.17.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick | JFrog"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003ePake turns a website into a desktop application built on Tauri. Every application it generates inherits two settings from the upstream template, and together they hand native functionality to untrusted web content.\u003c/p\u003e\u003cp\u003eThe first is in src-tauri/capabilities/default.json, which grants IPC access with \"remote\": { \"urls\": [\"https://*.*\"] }. That wildcard tells Tauri to accept IPC from any HTTPS origin, not just the site the application was built to wrap. The second is \"withGlobalTauri\": true in src-tauri/tauri.conf.json, which puts window.__TAURI__.core.invoke() in reach of ordinary page JavaScript.\u003c/p\u003e\u003cp\u003eTauri\u0027s access control list only checks plugin commands, the ones prefixed with plugin:. Commands the application registers itself through generate_handler!, known as app commands, are never checked against the ACL. So once an origin holds IPC access, it can call every app command with nothing else standing in the way. Pake registers download_file as an app command, and it does not appear in the permissions list because it does not need to.\u003c/p\u003e\u003cp\u003eThe practical effect is that any script running on any HTTPS page inside a Pake application can invoke the application\u0027s native commands. That includes third-party script the wrapped site loads on its own, such as analytics, advertising, or a compromised CDN. Anyone distributing their own Pake application gets the same access without asking for it. Chained with the path traversal in download_file that is tracked separately as CVE-2026-82635, this reaches arbitrary file write and persistent code execution.\u003c/p\u003e"
}
],
"value": "Pake turns a website into a desktop application built on Tauri. Every application it generates inherits two settings from the upstream template, and together they hand native functionality to untrusted web content.\n\n\n\nThe first is in src-tauri/capabilities/default.json, which grants IPC access with \"remote\": { \"urls\": [\"https://*.*\"] }. That wildcard tells Tauri to accept IPC from any HTTPS origin, not just the site the application was built to wrap. The second is \"withGlobalTauri\": true in src-tauri/tauri.conf.json, which puts window.__TAURI__.core.invoke() in reach of ordinary page JavaScript.\n\n\n\nTauri\u0027s access control list only checks plugin commands, the ones prefixed with plugin:. Commands the application registers itself through generate_handler!, known as app commands, are never checked against the ACL. So once an origin holds IPC access, it can call every app command with nothing else standing in the way. Pake registers download_file as an app command, and it does not appear in the permissions list because it does not need to.\n\n\n\nThe practical effect is that any script running on any HTTPS page inside a Pake application can invoke the application\u0027s native commands. That includes third-party script the wrapped site loads on its own, such as analytics, advertising, or a compromised CDN. Anyone distributing their own Pake application gets the same access without asking for it. Chained with the path traversal in download_file that is tracked separately as CVE-2026-82635, this reaches arbitrary file write and persistent code execution."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog holds a private proof of concept. Reproduction is deterministic and affects every application Pake generates. Full exploit details are not included in this record.\u003c/p\u003e"
}
],
"value": "JFrog holds a private proof of concept. Reproduction is deterministic and affects every application Pake generates. Full exploit details are not included in this record."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 8.2,
"baseSeverity": "HIGH",
"confidentialityImpact": "LOW",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-923",
"description": "CWE-923 Improper Restriction of Communication Channel to Intended Endpoints",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T09:56:32.668Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Pake",
"tags": [
"product"
],
"url": "https://github.com/tw93/Pake"
},
{
"name": "Pake capabilities/default.json - wildcard remote.urls grant",
"tags": [
"product"
],
"url": "https://github.com/tw93/Pake/blob/main/src-tauri/capabilities/default.json"
},
{
"name": "Pake tauri.conf.json - withGlobalTauri enabled",
"tags": [
"product"
],
"url": "https://github.com/tw93/Pake/blob/main/src-tauri/tauri.conf.json"
},
{
"name": "Tauri v2 capabilities and remote origin access",
"tags": [
"technical-description"
],
"url": "https://v2.tauri.app/security/capabilities/"
},
{
"name": "Pake V3.17.0 - latest release, still affected",
"tags": [
"release-notes"
],
"url": "https://github.com/tw93/Pake/releases/tag/V3.17.0"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Pake grants unrestricted IPC access to every HTTPS origin loaded in generated applications",
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-96454",
"datePublished": "2026-09-23T09:56:32.668Z",
"dateReserved": "2026-09-23T09:53:06.527Z",
"dateUpdated": "2026-09-23T14:01:32.711Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-95627 (GCVE-0-2026-95627)
Vulnerability from cvelistv5 – Published: 2026-09-23 09:43 – Updated: 2026-09-23 14:22
VLAI
EPSS
VEX
Title
Tauri framework v2 Dialog plugin auto-expands the filesystem scope with attacker-controlled recursion
Summary
When a Tauri application uses the dialog plugin's file or folder picker, an attacker with JavaScript execution (XSS) can force the scope expansion to be recursive, granting read/write access to an entire directory tree after a single user click on a normal-looking OS file dialog. The user has no indication that recursive access was granted, and the expanded scope cannot be revoked for the lifetime of the application.
Severity
7.7 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-23 14:21 UTC
CWE
- CWE-732 - Incorrect Permission Assignment for Critical Resource
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://github.com/tauri-apps/plugins-workspace/s… | issue-tracking |
| https://github.com/tauri-apps/plugins-workspace | product |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Tauri | tauri-plugin-dialog |
Affected:
2.0.0 , ≤ *
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-95627",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-23T14:21:31.658846Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T14:22:55.260Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://crates.io/crates/tauri-plugin-dialog",
"defaultStatus": "unaffected",
"packageName": "tauri-plugin-dialog",
"product": "tauri-plugin-dialog",
"programFiles": [
"plugins/dialog/src/commands.rs"
],
"repo": "git://github.com/tauri-apps/plugins-workspace",
"vendor": "Tauri",
"versions": [
{
"lessThanOrEqual": "*",
"status": "affected",
"version": "2.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eWhen a Tauri application uses the dialog plugin\u0027s file or folder picker, an attacker with JavaScript execution (XSS) can force the scope expansion to be recursive, granting read/write access to an entire directory tree after a single user click on a normal-looking OS file dialog. The user has no indication that recursive access was granted, and the expanded scope cannot be revoked for the lifetime of the application.\u003c/p\u003e"
}
],
"value": "When a Tauri application uses the dialog plugin\u0027s file or folder picker, an attacker with JavaScript execution (XSS) can force the scope expansion to be recursive, granting read/write access to an entire directory tree after a single user click on a normal-looking OS file dialog. The user has no indication that recursive access was granted, and the expanded scope cannot be revoked for the lifetime of the application."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Script in the webview gets read and write access to a whole directory tree, after one click on a dialog that looked completely normal. Aim it at the home folder and that is everything the user owns. The script does not need any privileges of its own to ask; an XSS in content the app renders is enough."
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.7,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-732",
"description": "CWE-732: Incorrect Permission Assignment for Critical Resource",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T09:43:04.542Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-vw89-89jm-wmqc (tauri-apps/plugins-workspace)",
"tags": [
"issue-tracking"
],
"url": "https://github.com/tauri-apps/plugins-workspace/security/advisories/GHSA-vw89-89jm-wmqc"
},
{
"name": "tauri-apps/plugins-workspace repository",
"tags": [
"product"
],
"url": "https://github.com/tauri-apps/plugins-workspace"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003e\u003cspan\u003eThe fix is to stop taking the recursion flag from the caller. Grant what was actually chosen: the one file, or the one folder and nothing below it. An app that genuinely needs a recursive grant can ask for one in its own Rust code, where the frontend cannot reach it.\u003c/span\u003e\u003c/p\u003e"
}
],
"value": "The fix is to stop taking the recursion flag from the caller. Grant what was actually chosen: the one file, or the one folder and nothing below it. An app that genuinely needs a recursive grant can ask for one in its own Rust code, where the frontend cannot reach it."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-06-28T08:23:00.000Z",
"value": "Reported to the Tauri team as GHSA-vw89-89jm-wmqc"
}
],
"title": "Tauri framework v2 Dialog plugin auto-expands the filesystem scope with attacker-controlled recursion",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-95627",
"datePublished": "2026-09-23T09:43:04.542Z",
"dateReserved": "2026-09-22T10:38:03.883Z",
"dateUpdated": "2026-09-23T14:22:55.260Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-95626 (GCVE-0-2026-95626)
Vulnerability from cvelistv5 – Published: 2026-09-23 09:33 – Updated: 2026-09-23 14:03
VLAI
EPSS
VEX
Title
Tauri framework v2 CSP nonce protection bypass via data and blob URI schemes allows an XSS to RCE chains
Summary
Tauri's Content Security Policy hardening, which injects a random nonce to restrict script execution, provides zero protection when an application includes data: or blob: in its script-src directive. Per the CSP Level 3 specification, these scheme sources remain active even when a nonce is present, allowing arbitrary script execution without knowing the nonce.
Severity
8.3 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-23 14:03 UTC
CWE
- CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://github.com/tauri-apps/tauri/security/advi… | issue-tracking |
| https://github.com/tauri-apps/tauri | product |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-95626",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-23T14:03:10.553800Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T14:03:18.426Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://crates.io/crates/tauri",
"defaultStatus": "unaffected",
"packageName": "tauri",
"product": "tauri",
"programFiles": [
"crates/tauri-utils/src/html.rs",
"crates/tauri/src/manager/mod.rs"
],
"repo": "git://github.com/tauri-apps/tauri",
"vendor": "Tauri",
"versions": [
{
"lessThanOrEqual": "*",
"status": "affected",
"version": "2.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eTauri\u0027s Content Security Policy hardening, which injects a random nonce to restrict script execution, provides zero protection when an application includes data: or blob: in its script-src directive. Per the CSP Level 3 specification, these scheme sources remain active even when a nonce is present, allowing arbitrary script execution without knowing the nonce.\u0026nbsp;\u003c/p\u003e"
}
],
"value": "Tauri\u0027s Content Security Policy hardening, which injects a random nonce to restrict script execution, provides zero protection when an application includes data: or blob: in its script-src directive. Per the CSP Level 3 specification, these scheme sources remain active even when a nonce is present, allowing arbitrary script execution without knowing the nonce."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.3,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-79",
"description": "CWE-79: Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T09:33:09.366Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-6vxm-x265-58qf (tauri-apps/tauri)",
"tags": [
"issue-tracking"
],
"url": "https://github.com/tauri-apps/tauri/security/advisories/GHSA-6vxm-x265-58qf"
},
{
"name": "tauri-apps/tauri repository",
"tags": [
"product"
],
"url": "https://github.com/tauri-apps/tauri"
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-06-17T16:46:00.000Z",
"value": "Reported to the Tauri team as GHSA-6vxm-x265-58qf"
}
],
"title": "Tauri framework v2 CSP nonce protection bypass via data and blob URI schemes allows an XSS to RCE chains",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-95626",
"datePublished": "2026-09-23T09:33:09.366Z",
"dateReserved": "2026-09-22T10:38:03.883Z",
"dateUpdated": "2026-09-23T14:03:18.426Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-95625 (GCVE-0-2026-95625)
Vulnerability from cvelistv5 – Published: 2026-09-23 08:51 – Updated: 2026-09-23 14:10
VLAI
EPSS
VEX
Title
Tauri framework v2 missing updater signature version number validation can be exploited into forced downgrade
Summary
The Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest's version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer's private key.
Severity
5.9 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-23 14:07 UTC
CWE
- CWE-354 - Improper Validation of Integrity Check Value
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/tauri-apps/plugins-workspace/s… | issue-tracking |
| https://github.com/tauri-apps/plugins-workspace | product |
| https://github.com/tauri-apps/plugins-workspace/c… | patch |
| https://github.com/tauri-apps/plugins-workspace/r… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Tauri | tauri-plugin-updater |
Affected:
2.0.0 , < 2.12.0
(semver)
Affected: 2.12.0 , ≤ * (semver) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-95625",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-23T14:07:42.715205Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T14:10:35.332Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://crates.io/crates/tauri-plugin-updater",
"defaultStatus": "unaffected",
"packageName": "tauri-plugin-updater",
"product": "tauri-plugin-updater",
"programFiles": [
"plugins/updater/src/updater.rs",
"plugins/updater/src/config.rs"
],
"repo": "git://github.com/tauri-apps/plugins-workspace",
"vendor": "Tauri",
"versions": [
{
"lessThan": "2.12.0",
"status": "affected",
"version": "2.0.0",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "affected",
"version": "2.12.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest\u0027s version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer\u0027s private key.\u003c/p\u003e"
}
],
"value": "The Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest\u0027s version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer\u0027s private key."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 5.9,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "HIGH",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-354",
"description": "CWE-354: Improper Validation of Integrity Check Value",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-23T08:51:53.922Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-j38x-g3m3-95fr (tauri-apps/plugins-workspace)",
"tags": [
"issue-tracking"
],
"url": "https://github.com/tauri-apps/plugins-workspace/security/advisories/GHSA-j38x-g3m3-95fr"
},
{
"name": "tauri-apps/plugins-workspace repository",
"tags": [
"product"
],
"url": "https://github.com/tauri-apps/plugins-workspace"
},
{
"name": "Add requireSignedVersion to bind an update to its signed version",
"tags": [
"patch"
],
"url": "https://github.com/tauri-apps/plugins-workspace/commit/690dcfd694"
},
{
"name": "tauri-plugin-updater 2.12.0 release notes",
"tags": [
"release-notes"
],
"url": "https://github.com/tauri-apps/plugins-workspace/releases/tag/updater-v2.12.0"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eaddressed in tauri-plugin-updater 2.12.0, and it has to be switched on. The new requireSignedVersion option compares the version announced by the endpoint against the version recorded in the signature\u0027s trusted comment, which the signature does cover, and rejects the update when they differ.\u003c/p\u003e"
}
],
"value": "addressed in tauri-plugin-updater 2.12.0, and it has to be switched on. The new requireSignedVersion option compares the version announced by the endpoint against the version recorded in the signature\u0027s trusted comment, which the signature does cover, and rejects the update when they differ."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-09-01T13:31:00.000Z",
"value": "Reported to the Tauri team as GHSA-j38x-g3m3-95fr"
},
{
"lang": "en",
"time": "2026-09-19T23:57:00.000Z",
"value": "Opt-in fix released in tauri-plugin-updater 2.12.0, commit 690dcfd694, adding the requireSignedVersion option"
}
],
"title": "Tauri framework v2 missing updater signature version number validation can be exploited into forced downgrade",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-95625",
"datePublished": "2026-09-23T08:51:53.922Z",
"dateReserved": "2026-09-22T10:38:03.883Z",
"dateUpdated": "2026-09-23T14:10:35.332Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-95624 (GCVE-0-2026-95624)
Vulnerability from cvelistv5 – Published: 2026-09-22 17:16 – Updated: 2026-09-22 19:30
VLAI
EPSS
VEX
Title
Tauri framework v2 malicious downgrade via allow_downgrades from frontend code
Summary
The Tauri updater plugin's 'check' IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from "update must be newer" to "update must be different." Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number.
Severity
6.8 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-22 19:30 UTC
CWE
- CWE-284 - Improper Access Control
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/tauri-apps/tauri/security/advi… | issue-tracking |
| https://github.com/tauri-apps/tauri | product |
| https://github.com/tauri-apps/plugins-workspace/c… | patch |
| https://github.com/tauri-apps/plugins-workspace/r… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Tauri | tauri-plugin-updater |
Affected:
2.8.0 , < 2.12.0
(semver)
|
Date Public
2026-09-23 10:14
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-95624",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-22T19:30:03.565802Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T19:30:22.534Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://crates.io/crates/tauri-plugin-updater",
"defaultStatus": "unaffected",
"packageName": "tauri-plugin-updater",
"product": "tauri-plugin-updater",
"programFiles": [
"plugins/updater/src/commands.rs",
"plugins/updater/src/config.rs"
],
"repo": "git://github.com/tauri-apps/tauri",
"vendor": "Tauri",
"versions": [
{
"lessThan": "2.12.0",
"status": "affected",
"version": "2.8.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"datePublic": "2026-09-23T10:14:00.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe Tauri updater plugin\u0027s \u0027check\u0027 IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from \"update must be newer\" to \"update must be different.\" Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number.\u003c/p\u003e"
}
],
"value": "The Tauri updater plugin\u0027s \u0027check\u0027 IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from \"update must be newer\" to \"update must be different.\" Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 6.8,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-284",
"description": "CWE-284: Improper Access Control",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T17:16:25.195Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-rjc6-5hfg-grp9 (tauri-apps/tauri)",
"tags": [
"issue-tracking"
],
"url": "https://github.com/tauri-apps/tauri/security/advisories/GHSA-rjc6-5hfg-grp9"
},
{
"name": "tauri-apps/tauri repository",
"tags": [
"product"
],
"url": "https://github.com/tauri-apps/tauri"
},
{
"name": "Move allowDowngrades from the check command to the plugin configuration",
"tags": [
"patch"
],
"url": "https://github.com/tauri-apps/plugins-workspace/commit/1308bfa399b962b3977c767100a6339d1cbfdd20"
},
{
"name": "tauri-plugin-updater 2.12.0 release notes",
"tags": [
"release-notes"
],
"url": "https://github.com/tauri-apps/plugins-workspace/releases/tag/updater-v2.12.0"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eFixed in tauri-plugin-updater 2.12.0. allowDowngrades was removed from the check command and is now read from the plugin configuration instead, where the frontend cannot reach it, and it defaults to false. An application that provides its own version comparator still takes precedence.\u003c/p\u003e"
}
],
"value": "Fixed in tauri-plugin-updater 2.12.0. allowDowngrades was removed from the check command and is now read from the plugin configuration instead, where the frontend cannot reach it, and it defaults to false. An application that provides its own version comparator still takes precedence."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-06-25T09:40:00.000Z",
"value": "Reported to the Tauri team as GHSA-rjc6-5hfg-grp9"
},
{
"lang": "en",
"time": "2026-09-20T00:00:00.000Z",
"value": "Fixed in tauri-plugin-updater 2.12.0, commit 1308bfa399, by moving allowDowngrades out of the IPC command and into the plugin configuration"
}
],
"title": "Tauri framework v2 malicious downgrade via allow_downgrades from frontend code",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-95624",
"datePublished": "2026-09-22T17:16:25.195Z",
"dateReserved": "2026-09-22T10:38:03.883Z",
"dateUpdated": "2026-09-22T19:30:22.534Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-95623 (GCVE-0-2026-95623)
Vulnerability from cvelistv5 – Published: 2026-09-22 10:52 – Updated: 2026-09-22 17:17
VLAI
EPSS
VEX
Title
Tauri framework v2 SSRF Protection Bypass via HTTP Redirects
Summary
The Tauri HTTP plugin validates requested URLs against the application's configured scope allowlist only once, on the initial request. When the remote server responds with an HTTP 3xx redirect, reqwest follows the redirect internally without re-checking the new target URL against the scope. This allows an attacker who controls an allowed URL (or finds an open redirect on an allowed host) to reach disallowed destinations such as cloud metadata endpoints, localhost services, or internal network hosts.
Severity
5.6 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-22 12:28 UTC
CWE
- CWE-918 - Server-Side Request Forgery (SSRF)
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/tauri-apps/plugins-workspace/s… | issue-tracking |
| https://github.com/tauri-apps/plugins-workspace | product |
| https://github.com/tauri-apps/plugins-workspace/c… | patch |
| https://github.com/tauri-apps/plugins-workspace/r… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Tauri | tauri-plugin-http |
Affected:
2.0.0 , ≤ 2.6.1
(semver)
Affected: 2.7.0 , ≤ * (semver) |
Date Public
2026-09-23 10:52
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-95623",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-22T12:28:50.708719Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T12:28:59.484Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://crates.io/crates/tauri-plugin-http",
"defaultStatus": "unaffected",
"packageName": "tauri-plugin-http",
"product": "tauri-plugin-http",
"programFiles": [
"plugins/http/src/commands.rs",
"plugins/http/src/scope.rs",
"plugins/http/src/config.rs"
],
"repo": "git://github.com/tauri-apps/plugins-workspace",
"vendor": "Tauri",
"versions": [
{
"lessThanOrEqual": "2.6.1",
"status": "affected",
"version": "2.0.0",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "affected",
"version": "2.7.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eVersions 2.0.0 through 2.6.1 are affected in every configuration and no fix is available for them. From 2.7.0 the plugin can check the scope on each redirect hop, but only when the application sets the scopeRedirects option in its http plugin configuration. A 2.7.0 or later application that does not set it behaves as before and is still affected.\u003c/p\u003e"
}
],
"value": "Versions 2.0.0 through 2.6.1 are affected in every configuration and no fix is available for them. From 2.7.0 the plugin can check the scope on each redirect hop, but only when the application sets the scopeRedirects option in its http plugin configuration. A 2.7.0 or later application that does not set it behaves as before and is still affected."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"datePublic": "2026-09-23T10:52:00.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe Tauri HTTP plugin validates requested URLs against the application\u0027s configured scope allowlist only once, on the initial request. When the remote server responds with an HTTP 3xx redirect, reqwest follows the redirect internally without re-checking the new target URL against the scope. This allows an attacker who controls an allowed URL (or finds an open redirect on an allowed host) to reach disallowed destinations such as cloud metadata endpoints, localhost services, or internal network hosts.\u003c/p\u003e"
}
],
"value": "The Tauri HTTP plugin validates requested URLs against the application\u0027s configured scope allowlist only once, on the initial request. When the remote server responds with an HTTP 3xx redirect, reqwest follows the redirect internally without re-checking the new target URL against the scope. This allows an attacker who controls an allowed URL (or finds an open redirect on an allowed host) to reach disallowed destinations such as cloud metadata endpoints, localhost services, or internal network hosts."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Requests the frontend starts reach hosts the scope was written to exclude, and the answer is handed back to it. Internal services and cloud metadata endpoints are the obvious targets."
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "ADJACENT_NETWORK",
"availabilityImpact": "NONE",
"baseScore": 5.6,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:A/AC:H/PR:N/UI:R/S:C/C:H/I:N/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-918",
"description": "CWE-918: Server-Side Request Forgery (SSRF)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T17:17:16.133Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-2rxp-f4w5-6hjr (tauri-apps/plugins-workspace)",
"tags": [
"issue-tracking"
],
"url": "https://github.com/tauri-apps/plugins-workspace/security/advisories/GHSA-2rxp-f4w5-6hjr"
},
{
"name": "tauri-apps/plugins-workspace repository",
"tags": [
"product"
],
"url": "https://github.com/tauri-apps/plugins-workspace"
},
{
"name": "Check the URL scope on every hop of a redirect chain",
"tags": [
"patch"
],
"url": "https://github.com/tauri-apps/plugins-workspace/commit/1198a524b710abf2abeb1d9bd7b252402d26ca6d"
},
{
"name": "tauri-plugin-http 2.7.0 release notes",
"tags": [
"release-notes"
],
"url": "https://github.com/tauri-apps/plugins-workspace/releases/tag/http-v2.7.0"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to tauri-plugin-http 2.7.0 or later and turn on the new scopeRedirects option. Both steps are needed. The fix is opt-in, so 2.7.0 on its own still follows a redirect out of scope; the option is what makes the plugin check every hop. Tauri made it opt-in because a redirect that leaves the scope now fails, which changes behaviour for apps that were relying on it.\u003c/p\u003e\u003ccode\u003e {\u0026quot;plugins\u0026quot;: {\u0026quot;http\u0026quot;: {\u0026quot;scopeRedirects\u0026quot;: true}}}\u003c/code\u003e\u003cbr/\u003e\u003cp\u003eNothing in the 2.0.0 to 2.6.1 range has a fix available.\u003c/p\u003e"
}
],
"value": "Upgrade to tauri-plugin-http 2.7.0 or later and turn on the new scopeRedirects option. Both steps are needed. The fix is opt-in, so 2.7.0 on its own still follows a redirect out of scope; the option is what makes the plugin check every hop. Tauri made it opt-in because a redirect that leaves the scope now fails, which changes behaviour for apps that were relying on it.\n\n {\"plugins\": {\"http\": {\"scopeRedirects\": true}}}\n\n\nNothing in the 2.0.0 to 2.6.1 range has a fix available."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-06-28T08:24:00.000Z",
"value": "Reported to the Tauri team as GHSA-2rxp-f4w5-6hjr"
},
{
"lang": "en",
"time": "2026-09-20T00:01:00.000Z",
"value": "Opt-in fix released in tauri-plugin-http 2.7.0, commit 1198a524, adding the scopeRedirects option"
}
],
"title": "Tauri framework v2 SSRF Protection Bypass via HTTP Redirects",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-95623",
"datePublished": "2026-09-22T10:52:20.006Z",
"dateReserved": "2026-09-22T10:38:03.883Z",
"dateUpdated": "2026-09-22T17:17:16.133Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-90898 (GCVE-0-2026-90898)
Vulnerability from cvelistv5 – Published: 2026-09-14 10:18 – Updated: 2026-09-14 11:19
VLAI
EPSS
VEX
Title
Bifrost unauthenticated remote code execution via MCP stdio client registration
Summary
Bifrost registers MCP clients through its management API. A stdio client is a command plus args. Bifrost starts that program in the gateway the moment the client is added. No MCP handshake required.
The default is governance.auth_config.is_enabled=false. Auth off means every caller is a local admin. One unauthenticated POST /api/mcp/client is enough to run a program as the Bifrost process user (appuser on the official image).
transports/v2.1.0 refuses an unauthenticated stdio registration with 403. transports/v2.0.0 still allows it.
Severity
9.8 (Critical)
SSVC
Exploitation: none
Automatable: yes
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-14 11:01 UTC
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/maximhq/bifrost/pull/6757 | patch |
| https://github.com/maximhq/bifrost/commit/12e1703… | patch |
| https://github.com/maximhq/bifrost/releases/tag/t… | release-notes |
| https://github.com/maximhq/bifrost | product |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-90898",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-14T11:01:44.207374Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-14T11:19:46.276Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/maximhq/bifrost",
"defaultStatus": "unaffected",
"modules": [
"transports/bifrost-http",
"core/mcp"
],
"packageName": "github.com/maximhq/bifrost/transports",
"platforms": [
"Linux",
"macOS"
],
"product": "Bifrost",
"programFiles": [
"transports/bifrost-http/handlers/mcp.go",
"transports/bifrost-http/handlers/middlewares.go"
],
"repo": "git://github.com/maximhq/bifrost",
"vendor": "maximhq",
"versions": [
{
"lessThan": "2.1.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eManagement API reachable and governance.auth_config.is_enabled=false, which is the documented default. Confirmed on maximhq/bifrost v1.6.3. Fixed in transports/v2.1.0 (2026-09-08). An operator who enables management authentication and keeps the admin listener off untrusted networks is not exposed to the unauthenticated form of this issue.\u003c/p\u003e"
}
],
"value": "Management API reachable and governance.auth_config.is_enabled=false, which is the documented default. Confirmed on maximhq/bifrost v1.6.3. Fixed in transports/v2.1.0 (2026-09-08). An operator who enables management authentication and keeps the admin listener off untrusted networks is not exposed to the unauthenticated form of this issue."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick | JFrog"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eBifrost registers MCP clients through its management API. A stdio client is a command plus args. Bifrost starts that program in the gateway the moment the client is added. No MCP handshake required.\u003c/p\u003e\u003cp\u003eThe default is governance.auth_config.is_enabled=false. Auth off means every caller is a local admin. One unauthenticated POST /api/mcp/client is enough to run a program as the Bifrost process user (appuser on the official image).\u003c/p\u003e\u003cp\u003e\u0026nbsp;transports/v2.1.0 refuses an unauthenticated stdio registration with 403. transports/v2.0.0 still allows it.\u003c/p\u003e"
}
],
"value": "Bifrost registers MCP clients through its management API. A stdio client is a command plus args. Bifrost starts that program in the gateway the moment the client is added. No MCP handshake required.\n\n\n\nThe default is governance.auth_config.is_enabled=false. Auth off means every caller is a local admin. One unauthenticated POST /api/mcp/client is enough to run a program as the Bifrost process user (appuser on the official image).\n\n\n\n\u00a0transports/v2.1.0 refuses an unauthenticated stdio registration with 403. transports/v2.0.0 still allows it."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog has a private proof of concept. An unauthenticated POST /api/mcp/client with connection_type stdio and attacker-chosen command and args starts the program in the gateway. Public exploit details are not included in this record.\u003c/p\u003e"
}
],
"value": "JFrog has a private proof of concept. An unauthenticated POST /api/mcp/client with connection_type stdio and attacker-chosen command and args starts the program in the gateway. Public exploit details are not included in this record."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-306",
"description": "CWE-306 Missing Authentication for Critical Function",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-284",
"description": "CWE-284 Improper Access Control",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-14T10:18:53.454Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "PR #6757: refuse unauthenticated stdio MCP registration",
"tags": [
"patch"
],
"url": "https://github.com/maximhq/bifrost/pull/6757"
},
{
"name": "Merge commit for PR #6757",
"tags": [
"patch"
],
"url": "https://github.com/maximhq/bifrost/commit/12e170352bd25eab1ae9ba16611f1797d1fd8fdc"
},
{
"name": "Bifrost HTTP v2.1.0 (first release containing the fix)",
"tags": [
"release-notes"
],
"url": "https://github.com/maximhq/bifrost/releases/tag/transports/v2.1.0"
},
{
"name": "Bifrost repository",
"tags": [
"product"
],
"url": "https://github.com/maximhq/bifrost"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade Bifrost HTTP transport to 2.1.0 or later. PR #6757 returns 403 for unauthenticated stdio MCP client registration when dashboard authentication is disabled or unconfigured. Authenticated admins can still add stdio clients. The 1.6.x line through 1.6.11 and transports/v2.0.0 do not include this change.\u003c/p\u003e"
}
],
"value": "Upgrade Bifrost HTTP transport to 2.1.0 or later. PR #6757 returns 403 for unauthenticated stdio MCP client registration when dashboard authentication is disabled or unconfigured. Authenticated admins can still add stdio clients. The 1.6.x line through 1.6.11 and transports/v2.0.0 do not include this change."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-07-13T10:27:00.000Z",
"value": "Reported to the Bifrost maintainers (GHSA-86gf-xh3g-rvxq)"
},
{
"lang": "en",
"time": "2026-09-02T15:14:00.000Z",
"value": "Fix merged upstream (PR #6757)"
},
{
"lang": "en",
"time": "2026-09-08T15:15:00.000Z",
"value": "Fix first shipped in Bifrost HTTP v2.1.0"
}
],
"title": "Bifrost unauthenticated remote code execution via MCP stdio client registration",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eSet governance.auth_config.is_enabled to true, use strong administrator credentials, and firewall the management listener.\u0026nbsp;\u003c/p\u003e"
}
],
"value": "Set governance.auth_config.is_enabled to true, use strong administrator credentials, and firewall the management listener."
}
],
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-90898",
"datePublished": "2026-09-14T10:18:53.454Z",
"dateReserved": "2026-09-14T10:13:28.161Z",
"dateUpdated": "2026-09-14T11:19:46.276Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-90894 (GCVE-0-2026-90894)
Vulnerability from cvelistv5 – Published: 2026-09-14 09:52 – Updated: 2026-09-15 08:49
VLAI
EPSS
VEX
Title
Parallels Desktop local privilege escalation via appliance extract argument injection
Summary
Parallels Desktop runs prl_disp_service as root. Local clients reach it on the world-writable socket /var/run/prl_disp_service.socket. PrlSrv_LoginLocal accepts peer credentials. No Parallels signature. No admin group.
After login, PrlSrv_InstallAppliance lets you pick the appliance folder (sVmParentPath). The daemon unpacks with one string, tar -xf "%1" -C "%2", then Qt QProcess::splitCommand chops that string into words. A quote in the folder name closes early. The leftover text becomes extra tar flags. macOS tar --use-compress-program= runs the named program as root.
Severity
7.8 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-14 10:23 UTC
CWE
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://www.parallels.com/products/desktop/ | product |
| https://kb.parallels.com/en/131168 | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Parallels | Parallels Desktop for Mac |
Affected:
26.4.0
Unaffected: 27.0.0 |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-90894",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-14T10:23:23.018106Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-14T10:23:46.541Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unknown",
"packageName": "Parallels Desktop",
"platforms": [
"macOS"
],
"product": "Parallels Desktop for Mac",
"vendor": "Parallels",
"versions": [
{
"status": "affected",
"version": "26.4.0"
},
{
"status": "unaffected",
"version": "27.0.0"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick | JFrog"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eParallels Desktop runs\u0026nbsp;\u003ccode\u003eprl_disp_service\u003c/code\u003e\u0026nbsp;as root. Local clients reach it on the world-writable socket\u0026nbsp;\u003ccode\u003e/var/run/prl_disp_service.socket\u003c/code\u003e.\u0026nbsp;\u003ccode\u003ePrlSrv_LoginLocal\u003c/code\u003e\u0026nbsp;accepts peer credentials. No Parallels signature. No admin group.\u003c/p\u003e\u003cp\u003eAfter login,\u0026nbsp;\u003ccode\u003ePrlSrv_InstallAppliance\u003c/code\u003e\u0026nbsp;lets you pick the appliance folder (\u003ccode\u003esVmParentPath\u003c/code\u003e). The daemon unpacks with one string,\u0026nbsp;\u003ccode\u003etar -xf \"%1\" -C \"%2\"\u003c/code\u003e, then Qt\u0026nbsp;\u003ccode\u003eQProcess::splitCommand\u003c/code\u003e\u0026nbsp;chops that string into words. A quote in the folder name closes early. The leftover text becomes extra tar flags. macOS\u0026nbsp;\u003ccode\u003etar --use-compress-program=\u003c/code\u003e\u0026nbsp;runs the named program as root.\u003c/p\u003e"
}
],
"value": "Parallels Desktop runs\u00a0prl_disp_service\u00a0as root. Local clients reach it on the world-writable socket\u00a0/var/run/prl_disp_service.socket.\u00a0PrlSrv_LoginLocal\u00a0accepts peer credentials. No Parallels signature. No admin group.\n\n\n\nAfter login,\u00a0PrlSrv_InstallAppliance\u00a0lets you pick the appliance folder (sVmParentPath). The daemon unpacks with one string,\u00a0tar -xf \"%1\" -C \"%2\", then Qt\u00a0QProcess::splitCommand\u00a0chops that string into words. A quote in the folder name closes early. The leftover text becomes extra tar flags. macOS\u00a0tar --use-compress-program=\u00a0runs the named program as root."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog has a private proof of concept that obtains root on Parallels Desktop 26.4.0. The same proof of concept does not obtain root on 27.0.1. Public exploit details are not included in this record.\u003c/p\u003e"
}
],
"value": "JFrog has a private proof of concept that obtains root on Parallels Desktop 26.4.0. The same proof of concept does not obtain root on 27.0.1. Public exploit details are not included in this record."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "LOCAL",
"availabilityImpact": "HIGH",
"baseScore": 7.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-88",
"description": "CWE-88 Improper Neutralization of Argument Delimiters in a Command (\u0027Argument Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-78",
"description": "CWE-78 Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-269",
"description": "CWE-269 Improper Privilege Management",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T08:49:26.122Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Parallels Desktop for Mac",
"tags": [
"product"
],
"url": "https://www.parallels.com/products/desktop/"
},
{
"name": "Parallels Desktop 27 updates summary",
"tags": [
"release-notes"
],
"url": "https://kb.parallels.com/en/131168"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to Parallels Desktop 27.0.0 or later.\u003c/p\u003e"
}
],
"value": "Upgrade to Parallels Desktop 27.0.0 or later."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Parallels Desktop local privilege escalation via appliance extract argument injection",
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-90894",
"datePublished": "2026-09-14T09:52:43.570Z",
"dateReserved": "2026-09-14T09:33:11.942Z",
"dateUpdated": "2026-09-15T08:49:26.122Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-86242 (GCVE-0-2026-86242)
Vulnerability from cvelistv5 – Published: 2026-09-06 11:20 – Updated: 2026-09-08 18:23
VLAI
EPSS
VEX
Title
Unauthenticated RCE via Custom Plugin HTTP Path on Dynamically Linked Builds
Summary
Bifrost HTTP transport before 2.0.0 accepts an enabled custom plugin whose path is an HTTP URL through unauthenticated POST /api/plugins when management authentication is disabled (the default, governance.auth_config.is_enabled=false). The shared-object loader treats an http-prefixed path as a download URL, writes the body to a temporary .so, and passes it to Go's plugin.Open. After a successful open, optional Init runs immediately with the supplied config as the Bifrost process user. On documented dynamically linked builds (DYNAMIC=1 / no static-link flags), which the vendor requires for custom Go plugins, plugin.Open is expected to succeed and this is unauthenticated remote code execution. On the published statically linked Docker image, plugin.Open fails with Dynamic loading not supported, so that build class is only server-side request forgery. Attack complexity is High because the attacker cannot force RCE on the default static image and a loadable plugin must match the host Go version, OS, architecture, and linkage. The 1.6.x HTTP transport line through 1.6.11 does not contain the fix.
Severity
8.1 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-08 18:23 UTC
CWE
Assigner
References
5 references
| URL | Tags |
|---|---|
| https://github.com/maximhq/bifrost/security/advis… | vendor-advisory |
| https://github.com/maximhq/bifrost/pull/5763 | patch |
| https://github.com/maximhq/bifrost/commit/e0057ff… | patch |
| https://github.com/maximhq/bifrost/releases/tag/t… | release-notes |
| https://github.com/maximhq/bifrost | product |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-86242",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-08T18:23:19.631126Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-08T18:23:28.573Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/maximhq/bifrost",
"defaultStatus": "unaffected",
"modules": [
"transports/bifrost-http",
"framework/plugins"
],
"packageName": "github.com/maximhq/bifrost/transports",
"platforms": [
"Linux",
"macOS"
],
"product": "Bifrost",
"programFiles": [
"transports/bifrost-http/handlers/plugins.go",
"transports/bifrost-http/handlers/middlewares.go",
"framework/plugins/soloader.go"
],
"repo": "git://github.com/maximhq/bifrost",
"vendor": "maximhq",
"versions": [
{
"changes": [
{
"at": "2.0.0-prerelease3",
"status": "unaffected"
}
],
"lessThan": "2.0.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAffects dynamically linked Bifrost binaries that can load Go plugins (DYNAMIC=1), with the management API reachable and governance.auth_config.is_enabled=false (default at disclosure). Linux and macOS only (Go plugin package). The default statically linked Docker image is not RCE-capable; that build class is SSRF only. Confirmed on maximhq/bifrost v1.6.3 for the download-then-plugin.Open path. End-to-end malicious .so load against a DYNAMIC=1 binary was not completed in lab; the RCE score is for the documented custom-plugin build class where plugin.Open is expected to succeed.\u003c/p\u003e"
}
],
"value": "Affects dynamically linked Bifrost binaries that can load Go plugins (DYNAMIC=1), with the management API reachable and governance.auth_config.is_enabled=false (default at disclosure). Linux and macOS only (Go plugin package). The default statically linked Docker image is not RCE-capable; that build class is SSRF only. Confirmed on maximhq/bifrost v1.6.3 for the download-then-plugin.Open path. End-to-end malicious .so load against a DYNAMIC=1 binary was not completed in lab; the RCE score is for the documented custom-plugin build class where plugin.Open is expected to succeed."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Or Peles"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eBifrost HTTP transport before 2.0.0 accepts an enabled custom plugin whose path is an HTTP URL through unauthenticated POST /api/plugins when management authentication is disabled (the default, governance.auth_config.is_enabled=false). The shared-object loader treats an http-prefixed path as a download URL, writes the body to a temporary .so, and passes it to Go\u0027s plugin.Open. After a successful open, optional Init runs immediately with the supplied config as the Bifrost process user. On documented dynamically linked builds (DYNAMIC=1 / no static-link flags), which the vendor requires for custom Go plugins, plugin.Open is expected to succeed and this is unauthenticated remote code execution. On the published statically linked Docker image, plugin.Open fails with Dynamic loading not supported, so that build class is only server-side request forgery. Attack complexity is High because the attacker cannot force RCE on the default static image and a loadable plugin must match the host Go version, OS, architecture, and linkage. The 1.6.x HTTP transport line through 1.6.11 does not contain the fix.\u003c/p\u003e"
}
],
"value": "Bifrost HTTP transport before 2.0.0 accepts an enabled custom plugin whose path is an HTTP URL through unauthenticated POST /api/plugins when management authentication is disabled (the default, governance.auth_config.is_enabled=false). The shared-object loader treats an http-prefixed path as a download URL, writes the body to a temporary .so, and passes it to Go\u0027s plugin.Open. After a successful open, optional Init runs immediately with the supplied config as the Bifrost process user. On documented dynamically linked builds (DYNAMIC=1 / no static-link flags), which the vendor requires for custom Go plugins, plugin.Open is expected to succeed and this is unauthenticated remote code execution. On the published statically linked Docker image, plugin.Open fails with Dynamic loading not supported, so that build class is only server-side request forgery. Attack complexity is High because the attacker cannot force RCE on the default static image and a loadable plugin must match the host Go version, OS, architecture, and linkage. The 1.6.x HTTP transport line through 1.6.11 does not contain the fix."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA proof of concept issues an unauthenticated POST /api/plugins with enabled=true and path set to an HTTP URL of a Go shared object built for the target Go version and linkage. On a dynamically linked Bifrost binary the loader downloads the body and plugin.Open runs Init in-process (for example writing a marker file as the gateway user). On the official static image the same request downloads the file and then fails with Dynamic loading not supported.\u003c/p\u003e"
}
],
"value": "A proof of concept issues an unauthenticated POST /api/plugins with enabled=true and path set to an HTTP URL of a Go shared object built for the target Go version and linkage. On a dynamically linked Bifrost binary the loader downloads the body and plugin.Open runs Init in-process (for example writing a marker file as the gateway user). On the official static image the same request downloads the file and then fails with Dynamic loading not supported."
}
],
"impacts": [
{
"capecId": "CAPEC-253",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-253 Remote Code Inclusion"
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.1,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-94",
"description": "CWE-94: Improper Control of Generation of Code (\u0027Code Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-306",
"description": "CWE-306: Missing Authentication for Critical Function",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-284",
"description": "CWE-284: Improper Access Control",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-06T11:20:11.759Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-2qp8-4xgm-fw6g",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/maximhq/bifrost/security/advisories/GHSA-2qp8-4xgm-fw6g"
},
{
"name": "PR #5763: require authenticated admin for custom plugin path; harden plugin download SSRF",
"tags": [
"patch"
],
"url": "https://github.com/maximhq/bifrost/pull/5763"
},
{
"name": "Merge commit for PR #5763",
"tags": [
"patch"
],
"url": "https://github.com/maximhq/bifrost/commit/e0057ff355f831c251eabe9d0e44f3a3748532c6"
},
{
"name": "Bifrost HTTP v2.0.0 (first stable release containing the fix)",
"tags": [
"release-notes"
],
"url": "https://github.com/maximhq/bifrost/releases/tag/transports/v2.0.0"
},
{
"name": "Bifrost repository",
"tags": [
"product"
],
"url": "https://github.com/maximhq/bifrost"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade Bifrost HTTP transport to 2.0.0 or later. The fix (PR #5763) refuses create and update of a non-builtin plugin path when the request was let through because dashboard authentication is disabled or unconfigured (403), and replaces the plugin downloader with an SSRF-hardened client. The 1.6.x line through 1.6.11 does not include this change.\u003c/p\u003e"
}
],
"value": "Upgrade Bifrost HTTP transport to 2.0.0 or later. The fix (PR #5763) refuses create and update of a non-builtin plugin path when the request was let through because dashboard authentication is disabled or unconfigured (403), and replaces the plugin downloader with an SSRF-hardened client. The 1.6.x line through 1.6.11 does not include this change."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-07-19T10:02:00.000Z",
"value": "Reported to the Bifrost maintainers (GHSA-2qp8-4xgm-fw6g)"
},
{
"lang": "en",
"time": "2026-08-03T04:50:00.000Z",
"value": "Fix merged upstream (PR #5763)"
},
{
"lang": "en",
"time": "2026-08-13T18:51:00.000Z",
"value": "Fix first present on the v2 line in transports/v2.0.0-prerelease3"
},
{
"lang": "en",
"time": "2026-08-26T19:47:00.000Z",
"value": "Fix first shipped in a stable release (Bifrost HTTP v2.0.0)"
}
],
"title": "Unauthenticated RCE via Custom Plugin HTTP Path on Dynamically Linked Builds",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eIf custom Go plugins are not required, run the statically linked binary or official Docker image so plugin.Open cannot succeed. Otherwise enable dashboard authentication and keep the management listener off untrusted networks.\u003c/p\u003e"
}
],
"value": "If custom Go plugins are not required, run the statically linked binary or official Docker image so plugin.Open cannot succeed. Otherwise enable dashboard authentication and keep the management listener off untrusted networks."
}
],
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-86242",
"datePublished": "2026-09-06T11:20:11.759Z",
"dateReserved": "2026-09-06T09:15:54.440Z",
"dateUpdated": "2026-09-08T18:23:28.573Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-82642 (GCVE-0-2026-82642)
Vulnerability from cvelistv5 – Published: 2026-08-30 13:44 – Updated: 2026-08-31 16:45
VLAI
EPSS
VEX
Title
Readest: unsanitized iframe srcdoc attribute in the EPUB sanitizer can lead to arbitrary code execution
Summary
Readest is an open-source e-book reader built on Tauri. In versions prior to 0.11.16, EPUB chapter HTML is sanitized with DOMPurify using a configuration that forbade only the <script> tag (FORBID_TAGS: ['script']) in apps/readest-app/src/services/transformers/sanitizer.ts. DOMPurify does not parse the contents of the srcdoc attribute on <iframe> elements, treating it as an opaque string attribute, so an attacker who can get an <iframe> element to survive sanitization can embed a complete HTML document containing a <script> tag inside srcdoc and have it execute when the browser renders the iframe. The content iframe is configured with sandbox="allow-same-origin allow-scripts", so script executing inside it shares the parent origin and can reach parent.parent.__TAURI_INTERNALS__.invoke(...), giving access to every Tauri IPC command the application is permitted to use, which escalates to arbitrary code execution. The payload can be made invisible (zero-size, transparent iframe) so the reader sees only normal book text. Version 0.11.16 hardened the sanitizer configuration by adding 'iframe', 'object' and 'embed' to FORBID_TAGS and adding 'srcdoc' to FORBID_ATTR.
Severity
8.8 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-31 16:45 UTC
CWE
- CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/readest/readest/security/advis… | vendor-advisory |
| https://github.com/readest/readest/pull/4762 | patch |
| https://github.com/readest/readest/commit/005aa2d… | patch |
| https://github.com/readest/readest/releases/tag/v… | release-notes |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-82642",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-31T16:45:50.271180Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-31T16:45:59.286Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/readest/readest",
"defaultStatus": "unaffected",
"platforms": [
"Windows",
"macOS",
"Linux"
],
"product": "readest",
"repo": "https://github.com/readest/readest",
"vendor": "readest",
"versions": [
{
"lessThan": "0.11.16",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick, JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eReadest is an open-source e-book reader built on Tauri. In versions prior to 0.11.16, EPUB chapter HTML is sanitized with DOMPurify using a configuration that forbade only the \u0026lt;script\u0026gt; tag (FORBID_TAGS: [\u0027script\u0027]) in apps/readest-app/src/services/transformers/sanitizer.ts. DOMPurify does not parse the contents of the srcdoc attribute on \u0026lt;iframe\u0026gt; elements, treating it as an opaque string attribute, so an attacker who can get an \u0026lt;iframe\u0026gt; element to survive sanitization can embed a complete HTML document containing a \u0026lt;script\u0026gt; tag inside srcdoc and have it execute when the browser renders the iframe. The content iframe is configured with sandbox=\"allow-same-origin allow-scripts\", so script executing inside it shares the parent origin and can reach parent.parent.__TAURI_INTERNALS__.invoke(...), giving access to every Tauri IPC command the application is permitted to use, which escalates to arbitrary code execution. The payload can be made invisible (zero-size, transparent iframe) so the reader sees only normal book text. Version 0.11.16 hardened the sanitizer configuration by adding \u0027iframe\u0027, \u0027object\u0027 and \u0027embed\u0027 to FORBID_TAGS and adding \u0027srcdoc\u0027 to FORBID_ATTR.\u003c/p\u003e"
}
],
"value": "Readest is an open-source e-book reader built on Tauri. In versions prior to 0.11.16, EPUB chapter HTML is sanitized with DOMPurify using a configuration that forbade only the \u003cscript\u003e tag (FORBID_TAGS: [\u0027script\u0027]) in apps/readest-app/src/services/transformers/sanitizer.ts. DOMPurify does not parse the contents of the srcdoc attribute on \u003ciframe\u003e elements, treating it as an opaque string attribute, so an attacker who can get an \u003ciframe\u003e element to survive sanitization can embed a complete HTML document containing a \u003cscript\u003e tag inside srcdoc and have it execute when the browser renders the iframe. The content iframe is configured with sandbox=\"allow-same-origin allow-scripts\", so script executing inside it shares the parent origin and can reach parent.parent.__TAURI_INTERNALS__.invoke(...), giving access to every Tauri IPC command the application is permitted to use, which escalates to arbitrary code execution. The payload can be made invisible (zero-size, transparent iframe) so the reader sees only normal book text. Version 0.11.16 hardened the sanitizer configuration by adding \u0027iframe\u0027, \u0027object\u0027 and \u0027embed\u0027 to FORBID_TAGS and adding \u0027srcdoc\u0027 to FORBID_ATTR."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-79",
"description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-30T13:44:34.109Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "GHSA-p4x7-pf2c-xrvj",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/readest/readest/security/advisories/GHSA-p4x7-pf2c-xrvj"
},
{
"name": "PR #4762",
"tags": [
"patch"
],
"url": "https://github.com/readest/readest/pull/4762"
},
{
"name": "Fix commit 005aa2d6157a",
"tags": [
"patch"
],
"url": "https://github.com/readest/readest/commit/005aa2d6157a34049bf45641c06861d606a85edb"
},
{
"name": "Release v0.11.16 (first fixed release)",
"tags": [
"release-notes"
],
"url": "https://github.com/readest/readest/releases/tag/v0.11.16"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to Readest 0.11.16 or later. The fix adds \u0027srcdoc\u0027 to the DOMPurify FORBID_ATTR list and \u0027iframe\u0027, \u0027object\u0027 and \u0027embed\u0027 to FORBID_TAGS in apps/readest-app/src/services/transformers/sanitizer.ts.\u003c/p\u003e"
}
],
"value": "Upgrade to Readest 0.11.16 or later. The fix adds \u0027srcdoc\u0027 to the DOMPurify FORBID_ATTR list and \u0027iframe\u0027, \u0027object\u0027 and \u0027embed\u0027 to FORBID_TAGS in apps/readest-app/src/services/transformers/sanitizer.ts."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-06-23T00:00:00.000Z",
"value": "Reported to the Readest maintainers"
},
{
"lang": "en",
"time": "2026-06-24T14:01:00.000Z",
"value": "Fix committed (005aa2d6157a, PR #4762)"
},
{
"lang": "en",
"time": "2026-06-28T18:51:00.000Z",
"value": "Fix released in v0.11.16"
}
],
"title": "Readest: unsanitized iframe srcdoc attribute in the EPUB sanitizer can lead to arbitrary code execution",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eOnly open EPUB files from trusted sources. Ensure the \u0027allow script\u0027 view setting remains disabled, as enabling it bypasses sanitization entirely.\u003c/p\u003e"
}
],
"value": "Only open EPUB files from trusted sources. Ensure the \u0027allow script\u0027 view setting remains disabled, as enabling it bypasses sanitization entirely."
}
],
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-82642",
"datePublished": "2026-08-30T13:44:34.109Z",
"dateReserved": "2026-08-30T13:32:39.506Z",
"dateUpdated": "2026-08-31T16:45:59.286Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-82635 (GCVE-0-2026-82635)
Vulnerability from cvelistv5 – Published: 2026-08-30 12:26 – Updated: 2026-08-31 16:58
VLAI
EPSS
VEX
Title
Pake arbitrary file write via unsanitized download_file filename
Summary
Pake before 3.13.1 joins the JavaScript-supplied filename for the download_file Tauri command onto the user's Downloads directory with no sanitization. A filename containing path traversal sequences (for example ../Library/LaunchAgents/com.evil.plist) or an absolute path resolves outside ~/Downloads. The command then fetches attacker-controlled content from the supplied URL (via Rust HTTP, not the browser) and writes it to that path. A script that can invoke the command can overwrite user-writable files and install persistence (macOS LaunchAgents, Linux autostart, Windows Startup), leading to code execution in the user account. All desktop apps generated from an affected Pake tree expose the same command.
Severity
8.8 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-31 16:58 UTC
CWE
- CWE-22 - Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
Assigner
References
3 references
| URL | Tags |
|---|---|
| https://github.com/tw93/Pake/commit/a5463a84d6e36… | patch |
| https://github.com/tw93/Pake/releases/tag/V3.13.1 | vendor-advisory |
| https://github.com/tw93/Pake | product |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-82635",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-31T16:58:34.725075Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-31T16:58:51.598Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/tw93/Pake",
"defaultStatus": "unaffected",
"modules": [
"download_file"
],
"product": "Pake",
"programFiles": [
"src-tauri/src/app/invoke.rs",
"src-tauri/src/util.rs"
],
"repo": "git://github.com/tw93/Pake",
"vendor": "tw93",
"versions": [
{
"lessThan": "3.13.1",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAffects Pake-generated desktop apps built from a tree before 3.13.1. Exploitation requires the ability to call the download_file Tauri command from the webview. The 8.8 / AV:N score assumes that capability is reachable from the wrapped page (including remote origins), which is the default Pake IPC posture described in the related IPC advisory. Opening the app is the required user interaction. V3.12.0 still joins params.filename unsanitized; V3.13.1 calls sanitize_download_filename.\u003c/p\u003e"
}
],
"value": "Affects Pake-generated desktop apps built from a tree before 3.13.1. Exploitation requires the ability to call the download_file Tauri command from the webview. The 8.8 / AV:N score assumes that capability is reachable from the wrapped page (including remote origins), which is the default Pake IPC posture described in the related IPC advisory. Opening the app is the required user interaction. V3.12.0 still joins params.filename unsanitized; V3.13.1 calls sanitize_download_filename."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Yuval Moravchick"
},
{
"lang": "en",
"type": "coordinator",
"value": "JFrog Security Research"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003ePake before 3.13.1 joins the JavaScript-supplied filename for the download_file Tauri command onto the user\u0027s Downloads directory with no sanitization. A filename containing path traversal sequences (for example ../Library/LaunchAgents/com.evil.plist) or an absolute path resolves outside ~/Downloads. The command then fetches attacker-controlled content from the supplied URL (via Rust HTTP, not the browser) and writes it to that path. A script that can invoke the command can overwrite user-writable files and install persistence (macOS LaunchAgents, Linux autostart, Windows Startup), leading to code execution in the user account. All desktop apps generated from an affected Pake tree expose the same command.\u003c/p\u003e"
}
],
"value": "Pake before 3.13.1 joins the JavaScript-supplied filename for the download_file Tauri command onto the user\u0027s Downloads directory with no sanitization. A filename containing path traversal sequences (for example ../Library/LaunchAgents/com.evil.plist) or an absolute path resolves outside ~/Downloads. The command then fetches attacker-controlled content from the supplied URL (via Rust HTTP, not the browser) and writes it to that path. A script that can invoke the command can overwrite user-writable files and install persistence (macOS LaunchAgents, Linux autostart, Windows Startup), leading to code execution in the user account. All desktop apps generated from an affected Pake tree expose the same command."
}
],
"exploits": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA proof of concept invokes window.__TAURI__.core.invoke(\u0027download_file\u0027, { params: { url: \u0027\u0026lt;attacker-controlled HTTP URL\u0026gt;\u0027, filename: \u0027../pake_write_proof.sh\u0027 } }) and a second invoke with filename \u0027../Library/LaunchAgents/com.pake.poc.plist\u0027. The files appear under the user home directory, not ~/Downloads. Loading the LaunchAgent (or the next login) runs the fetched payload in the user session.\u003c/p\u003e"
}
],
"value": "A proof of concept invokes window.__TAURI__.core.invoke(\u0027download_file\u0027, { params: { url: \u0027\u003cattacker-controlled HTTP URL\u003e\u0027, filename: \u0027../pake_write_proof.sh\u0027 } }) and a second invoke with filename \u0027../Library/LaunchAgents/com.pake.poc.plist\u0027. The files appear under the user home directory, not ~/Downloads. Loading the LaunchAgent (or the next login) runs the fetched payload in the user session."
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 Path Traversal"
}
]
},
{
"capecId": "CAPEC-165",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-165 File Manipulation"
}
]
},
{
"capecId": "CAPEC-17",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-17 Using Malicious Files"
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-22",
"description": "CWE-22: Improper Limitation of a Pathname to a Restricted Directory (\u0027Path Traversal\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-30T12:26:16.770Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"name": "Fix: sanitize download filenames (basename only)",
"tags": [
"patch"
],
"url": "https://github.com/tw93/Pake/commit/a5463a84d6e36705ee0dd1886cf0e4b5a75b0ab4"
},
{
"name": "Pake V3.13.1 release (first tag containing the fix)",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/tw93/Pake/releases/tag/V3.13.1"
},
{
"name": "Pake repository",
"tags": [
"product"
],
"url": "https://github.com/tw93/Pake"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade Pake to 3.13.1 or later and rebuild generated apps from that tree. The fix introduces sanitize_download_filename and uses only the final path segment before joining onto the Downloads directory, so ../ and absolute paths cannot escape that directory.\u003c/p\u003e"
}
],
"value": "Upgrade Pake to 3.13.1 or later and rebuild generated apps from that tree. The fix introduces sanitize_download_filename and uses only the final path segment before joining onto the Downloads directory, so ../ and absolute paths cannot escape that directory."
}
],
"source": {
"discovery": "EXTERNAL"
},
"timeline": [
{
"lang": "en",
"time": "2026-06-24T00:00:00.000Z",
"value": "Vulnerability reported to maintainers"
},
{
"lang": "en",
"time": "2026-07-03T12:51:00.000Z",
"value": "Fix committed upstream (sanitize download filenames)"
},
{
"lang": "en",
"time": "2026-07-04T15:30:00.000Z",
"value": "Fix first shipped in Pake V3.13.1"
}
],
"title": "Pake arbitrary file write via unsanitized download_file filename",
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-82635",
"datePublished": "2026-08-30T12:26:16.770Z",
"dateReserved": "2026-08-30T12:09:20.896Z",
"dateUpdated": "2026-08-31T16:58:51.598Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-82329 (GCVE-0-2026-82329)
Vulnerability from cvelistv5 – Published: 2026-08-28 18:27 – Updated: 2026-09-03 03:56Title
Potential authentication bypass leading to administrative access in Artifactory
Summary
JFrog Artifactory contains an authentication weakness that, under default configuration, may allow an unauthenticated attacker with network access to obtain administrative privileges.
Severity
9.8 (Critical)
SSVC
Exploitation: active
Automatable: yes
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-02 00:00 UTC
CWE
- CWE-287 - Improper Authentication
Assigner
References
3 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
| https://www.cisa.gov/known-exploited-vulnerabilit… | government-resource |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
0 , < 7.111.21
(custom)
Affected: 7.117.0 , < 7.117.28 (custom) Affected: 7.125.0 , < 7.125.20 (custom) Affected: 7.133.0 , < 7.133.29 (custom) Affected: 7.146.0 , < 7.146.38 (custom) Affected: 7.161.0 , < 7.161.20 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-82329",
"options": [
{
"Exploitation": "active"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-02T00:00:00+00:00",
"version": "2.0.3"
},
"type": "ssvc"
}
},
{
"other": {
"content": {
"dateAdded": "2026-09-02",
"reference": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-82329"
},
"type": "kev"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-03T03:56:03.621Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"references": [
{
"tags": [
"government-resource"
],
"url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-82329"
}
],
"timeline": [
{
"lang": "en",
"time": "2026-09-02T00:00:00.000Z",
"value": "CVE-2026-82329 added to CISA KEV"
}
],
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.111.21",
"status": "affected",
"version": "0",
"versionType": "custom"
},
{
"lessThan": "7.117.28",
"status": "affected",
"version": "7.117.0",
"versionType": "custom"
},
{
"lessThan": "7.125.20",
"status": "affected",
"version": "7.125.0",
"versionType": "custom"
},
{
"lessThan": "7.133.29",
"status": "affected",
"version": "7.133.0",
"versionType": "custom"
},
{
"lessThan": "7.146.38",
"status": "affected",
"version": "7.146.0",
"versionType": "custom"
},
{
"lessThan": "7.161.20",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog Artifactory contains an authentication weakness that, under default configuration, may allow an unauthenticated attacker with network access to obtain administrative privileges.\u003c/p\u003e"
}
],
"value": "JFrog Artifactory contains an authentication weakness that, under default configuration, may allow an unauthenticated attacker with network access to obtain administrative privileges."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-287",
"description": "CWE-287 Improper Authentication",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-28T18:27:43.632Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"title": "Potential authentication bypass leading to administrative access in Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-82329",
"datePublished": "2026-08-28T18:27:43.632Z",
"dateReserved": "2026-08-28T14:26:47.580Z",
"dateUpdated": "2026-09-03T03:56:03.621Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-70550 (GCVE-0-2026-70550)
Vulnerability from cvelistv5 – Published: 2026-08-25 15:22 – Updated: 2026-08-26 19:47
VLAI
EPSS
VEX
Title
Potential unauthorized access to private Composer repository metadata in JFrog Artifactory
Summary
An authorization weakness in JFrog Artifactory Composer repository handling may allow an authenticated user, under specific conditions, to read package metadata from repositories they are not authorized to read. The issue affects confidentiality and has been addressed in fixed Artifactory versions.
Severity
6.5 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-26 19:34 UTC
CWE
- CWE-862 - Missing Authorization
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
7.161.0 , < 7.161.19
(custom)
Affected: 7.146.0 , < 7.146.29 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-70550",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-26T19:34:53.953467Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-26T19:47:11.893Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.161.19",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
},
{
"lessThan": "7.146.29",
"status": "affected",
"version": "7.146.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Khai Tran | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn authorization weakness in JFrog Artifactory Composer repository handling may allow an authenticated user, under specific conditions, to read package metadata from repositories they are not authorized to read. The issue affects confidentiality and has been addressed in fixed Artifactory versions.\u003c/p\u003e"
}
],
"value": "An authorization weakness in JFrog Artifactory Composer repository handling may allow an authenticated user, under specific conditions, to read package metadata from repositories they are not authorized to read. The issue affects confidentiality and has been addressed in fixed Artifactory versions."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 6.5,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-25T15:22:53.484Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Potential unauthorized access to private Composer repository metadata in JFrog Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-70550",
"datePublished": "2026-08-25T15:22:53.484Z",
"dateReserved": "2026-08-04T18:29:25.512Z",
"dateUpdated": "2026-08-26T19:47:11.893Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-70548 (GCVE-0-2026-70548)
Vulnerability from cvelistv5 – Published: 2026-08-25 15:17 – Updated: 2026-08-26 19:47
VLAI
EPSS
VEX
Title
SSRF In CocoaPods Via JFrog Artifactory External Dependency
Summary
Under specific circumstances, low-level user can run request to remote CocoaPods repos via JFrog Artifactory External Dependency.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-26 19:35 UTC
CWE
- CWE-918 - Server-Side request forgery (SSRF)
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
7.161.11 , < 7.161.19
(custom)
Affected: 7.146.0 , < 7.146.36 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-70548",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-26T19:35:03.613732Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-26T19:47:26.235Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.161.19",
"status": "affected",
"version": "7.161.11",
"versionType": "custom"
},
{
"lessThan": "7.146.36",
"status": "affected",
"version": "7.146.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Kostya Kortchinsky | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUnder specific circumstances, low-level user can run request to remote CocoaPods repos via JFrog Artifactory External Dependency.\u003c/p\u003e"
}
],
"value": "Under specific circumstances, low-level user can run request to remote CocoaPods repos via JFrog Artifactory External Dependency."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "LOW",
"baseScore": 3.5,
"baseSeverity": "LOW",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:N/I:N/A:L",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-918",
"description": "CWE-918 Server-Side request forgery (SSRF)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-25T15:17:16.973Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "SSRF In CocoaPods Via JFrog Artifactory External Dependency"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-70548",
"datePublished": "2026-08-25T15:17:16.973Z",
"dateReserved": "2026-08-04T18:29:25.512Z",
"dateUpdated": "2026-08-26T19:47:26.235Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-69104 (GCVE-0-2026-69104)
Vulnerability from cvelistv5 – Published: 2026-08-25 15:09 – Updated: 2026-08-25 17:43
VLAI
EPSS
VEX
Title
Potential unauthorized repository migration in JFrog Artifactory
Summary
An authenticated user may initiate repository migration operations without required repository permissions, potentially causing information disclosure, unauthorized state changes, and service disruption. Fixed versions address the issue.
Severity
7.6 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-25 15:33 UTC
CWE
- CWE-862 - Missing Authorization
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
7.161.0 , < 7.161.19
(custom)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-69104",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-25T15:33:15.055078Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-25T17:43:24.784Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.161.19",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Kostya Kortchinsky | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn authenticated user may initiate repository migration operations without required repository permissions, potentially causing information disclosure, unauthorized state changes, and service disruption. Fixed versions address the issue.\u003c/p\u003e"
}
],
"value": "An authenticated user may initiate repository migration operations without required repository permissions, potentially causing information disclosure, unauthorized state changes, and service disruption. Fixed versions address the issue."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-25T15:09:29.369Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Potential unauthorized repository migration in JFrog Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-69104",
"datePublished": "2026-08-25T15:09:29.369Z",
"dateReserved": "2026-08-03T10:58:15.518Z",
"dateUpdated": "2026-08-25T17:43:24.784Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-70551 (GCVE-0-2026-70551)
Vulnerability from cvelistv5 – Published: 2026-08-25 15:06 – Updated: 2026-08-26 19:47
VLAI
EPSS
VEX
Title
Server-Side Request Forgery Via VCS remote download in JFrog Artifactory
Summary
A user who can read an existing remote VCS repository can replace its configured origin or supply an absolute VCS data URL.
Severity
8.5 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-26 19:35 UTC
CWE
- CWE-918 - Server-Side request forgery (SSRF)
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
7.161.0 , < 7.161.19
(custom)
Affected: 7.146.0 , < 7.146.36 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-70551",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-26T19:35:12.517022Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-26T19:47:41.387Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.161.19",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
},
{
"lessThan": "7.146.36",
"status": "affected",
"version": "7.146.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Kostya Kortchinsky | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA user who can read an existing remote VCS repository can replace its configured origin or supply an absolute VCS data URL.\u003c/p\u003e"
}
],
"value": "A user who can read an existing remote VCS repository can replace its configured origin or supply an absolute VCS data URL."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 8.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "LOW",
"privilegesRequired": "LOW",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-918",
"description": "CWE-918 Server-Side request forgery (SSRF)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-25T15:06:48.188Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Server-Side Request Forgery Via VCS remote download in JFrog Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-70551",
"datePublished": "2026-08-25T15:06:48.188Z",
"dateReserved": "2026-08-04T18:29:25.512Z",
"dateUpdated": "2026-08-26T19:47:41.387Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-69106 (GCVE-0-2026-69106)
Vulnerability from cvelistv5 – Published: 2026-08-12 17:48 – Updated: 2026-08-13 15:04
VLAI
EPSS
VEX
Title
Potential cache poisoning in JFrog Artifactory
Summary
A low-privileged user may poison cached artifact metadata under specific conditions, potentially causing consumers to retrieve untrusted content.
Severity
8.8 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-13 15:04 UTC
CWE
- CWE-20 - Improper Input Validation
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
0 , < 7.146.28
(custom)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-69106",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-13T15:04:07.356444Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-13T15:04:49.658Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.146.28",
"status": "affected",
"version": "0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Uri Katz | Oligo Security"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA low-privileged user may poison cached artifact metadata under specific conditions, potentially causing consumers to retrieve untrusted content.\u003c/p\u003e"
}
],
"value": "A low-privileged user may poison cached artifact metadata under specific conditions, potentially causing consumers to retrieve untrusted content."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-20",
"description": "CWE-20 Improper Input Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-13T04:16:50.900Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Potential cache poisoning in JFrog Artifactory",
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-69106",
"datePublished": "2026-08-12T17:48:29.429Z",
"dateReserved": "2026-08-03T10:58:15.519Z",
"dateUpdated": "2026-08-13T15:04:49.658Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-42018 (GCVE-0-2026-42018)
Vulnerability from cvelistv5 – Published: 2026-08-12 17:43 – Updated: 2026-10-01 18:06Title
Anonymous user token generation exposure in JFrog Artifactory
Summary
JFrog Artifactory could return an internal anonymous-user token to an unauthenticated caller when anonymous access is disabled, potentially exposing sensitive resources.
Severity
7.5 (High)
SSVC
Exploitation: active
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-10-01 18:06 UTC
CWE
- CWE-287 - Improper Authentication
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
| https://www.wiz.io/blog/artifactory-under-attack-… | third-party-advisory |
| https://www.cisa.gov/known-exploited-vulnerabilit… | government-resource |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
0 , < 7.111.20
(custom)
Affected: 7.117.0 , < 7.117.27 (custom) Affected: 7.125.0 , < 7.125.19 (custom) Affected: 7.133.0 , < 7.133.28 (custom) Affected: 7.146.0 , < 7.146.8 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-42018",
"options": [
{
"Exploitation": "active"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-01T18:06:12.895893Z",
"version": "2.0.3"
},
"type": "ssvc"
}
},
{
"other": {
"content": {
"dateAdded": "2026-09-11",
"reference": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-42018"
},
"type": "kev"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-01T18:06:26.138Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"references": [
{
"tags": [
"third-party-advisory"
],
"url": "https://www.wiz.io/blog/artifactory-under-attack-in-the-wild-exploitation-of-cve-2026-42016-cve-2026-4201"
},
{
"tags": [
"government-resource"
],
"url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-42018"
}
],
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.111.20",
"status": "affected",
"version": "0",
"versionType": "custom"
},
{
"lessThan": "7.117.27",
"status": "affected",
"version": "7.117.0",
"versionType": "custom"
},
{
"lessThan": "7.125.19",
"status": "affected",
"version": "7.125.0",
"versionType": "custom"
},
{
"lessThan": "7.133.28",
"status": "affected",
"version": "7.133.0",
"versionType": "custom"
},
{
"lessThan": "7.146.8",
"status": "affected",
"version": "7.146.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Daniil Vylegzhanin (NetSPI)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eJFrog Artifactory could return an internal anonymous-user token to an unauthenticated caller when anonymous access is disabled, potentially exposing sensitive resources.\u003c/p\u003e"
}
],
"value": "JFrog Artifactory could return an internal anonymous-user token to an unauthenticated caller when anonymous access is disabled, potentially exposing sensitive resources."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-287",
"description": "CWE-287 Improper Authentication",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-18T18:14:10.646Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Anonymous user token generation exposure in JFrog Artifactory",
"x_generator": {
"engine": "Vulnogram 1.0.4"
}
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-42018",
"datePublished": "2026-08-12T17:43:21.289Z",
"dateReserved": "2026-04-23T13:41:13.755Z",
"dateUpdated": "2026-10-01T18:06:26.138Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-69107 (GCVE-0-2026-69107)
Vulnerability from cvelistv5 – Published: 2026-08-12 15:51 – Updated: 2026-08-12 18:15
VLAI
EPSS
VEX
Title
Potential unauthorized artifact access in JFrog Artifactory
Summary
An unauthenticated user may access restricted artifacts in JFrog Artifactory under specific conditions.
Severity
5.9 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-12 18:14 UTC
CWE
- CWE-862 - Missing Authorization
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
0 , < 7.104.16
(custom)
Affected: 7.111.0 , < 7.111.14 (custom) Affected: 7.117.0 , < 7.117.21 (custom) Affected: 7.125.0 , < 7.125.14 (custom) Affected: 7.133.0 , < 7.133.21 (custom) Affected: 7.146.0 , < 7.146.8 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-69107",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-12T18:14:51.166880Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-12T18:15:09.728Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.104.16",
"status": "affected",
"version": "0",
"versionType": "custom"
},
{
"lessThan": "7.111.14",
"status": "affected",
"version": "7.111.0",
"versionType": "custom"
},
{
"lessThan": "7.117.21",
"status": "affected",
"version": "7.117.0",
"versionType": "custom"
},
{
"lessThan": "7.125.14",
"status": "affected",
"version": "7.125.0",
"versionType": "custom"
},
{
"lessThan": "7.133.21",
"status": "affected",
"version": "7.133.0",
"versionType": "custom"
},
{
"lessThan": "7.146.8",
"status": "affected",
"version": "7.146.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Daniil Vylegzhanin (NetSPI)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn unauthenticated user may access restricted artifacts in JFrog Artifactory under specific conditions.\u003c/p\u003e"
}
],
"value": "An unauthenticated user may access restricted artifacts in JFrog Artifactory under specific conditions."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 5.9,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-12T15:51:47.747Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"title": "Potential unauthorized artifact access in JFrog Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-69107",
"datePublished": "2026-08-12T15:51:47.747Z",
"dateReserved": "2026-08-03T10:58:15.519Z",
"dateUpdated": "2026-08-12T18:15:09.728Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-69105 (GCVE-0-2026-69105)
Vulnerability from cvelistv5 – Published: 2026-08-12 15:19 – Updated: 2026-08-13 15:20
VLAI
EPSS
VEX
Title
Potential package cache integrity issue in JFrog Artifactory
Summary
An unauthenticated attacker may cause untrusted package content to be cached under specific conditions, potentially affecting artifact integrity and availability.
Severity
8.1 (High)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-13 15:19 UTC
CWE
- CWE-345 - Insufficient Verification of Data Authenticity
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
7.161.0 , < 7.161.16
(custom)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-69105",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-13T15:19:56.198804Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-13T15:20:10.519Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.161.16",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Kostya Kortchinsky | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn unauthenticated attacker may cause untrusted package content to be cached under specific conditions, potentially affecting artifact integrity and availability. \u003c/p\u003e"
}
],
"value": "An unauthenticated attacker may cause untrusted package content to be cached under specific conditions, potentially affecting artifact integrity and availability."
}
],
"metrics": [
{
"cvssV3_1": {
"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"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-345",
"description": "CWE-345 Insufficient Verification of Data Authenticity",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-12T15:19:40.055Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Potential package cache integrity issue in JFrog Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-69105",
"datePublished": "2026-08-12T15:19:40.055Z",
"dateReserved": "2026-08-03T10:58:15.518Z",
"dateUpdated": "2026-08-13T15:20:10.519Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-70547 (GCVE-0-2026-70547)
Vulnerability from cvelistv5 – Published: 2026-08-12 15:18 – Updated: 2026-08-13 15:18
VLAI
EPSS
VEX
Title
Potential unauthorized metadata exposure in JFrog Artifactory
Summary
An authenticated user without repository read permission may access package metadata under specific conditions.
Severity
4.3 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-13 15:18 UTC
CWE
- CWE-862 - Missing Authorization
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
7.161.0 , < 7.161.16
(custom)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-70547",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-13T15:18:41.256045Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-13T15:18:53.712Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.161.16",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Kostya Kortchinsky | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn authenticated user without repository read permission may access package metadata under specific conditions.\u003c/p\u003e"
}
],
"value": "An authenticated user without repository read permission may access package metadata under specific conditions."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 4.3,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "LOW",
"integrityImpact": "NONE",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-12T15:18:29.120Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Potential unauthorized metadata exposure in JFrog Artifactory"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-70547",
"datePublished": "2026-08-12T15:18:29.120Z",
"dateReserved": "2026-08-04T18:29:25.512Z",
"dateUpdated": "2026-08-13T15:18:53.712Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-66016 (GCVE-0-2026-66016)
Vulnerability from cvelistv5 – Published: 2026-08-12 15:16 – Updated: 2026-08-12 18:40
VLAI
EPSS
VEX
Title
Rendered Artifactory Helm manifests may contain generated TLS private keys
Summary
Under specific self-hosted Helm configurations, generated TLS private keys may be retained in rendered manifests accessible to highly privileged local users.
Severity
6.7 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-12 18:39 UTC
CWE
- CWE-312 - Cleartext Storage of Sensitive Information
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://docs.jfrog.com/releases/docs/jfrog-securi… | vendor-advisory |
| https://docs.jfrog.com/releases/docs/artifactory-… | vendor-advisory |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| jfrog | artifactory |
Affected:
0 , < 7.146.35
(custom)
Affected: 7.161.0 , < 7.161.16 (custom) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-66016",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-12T18:39:25.421312Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-12T18:40:04.455Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "artifactory",
"vendor": "jfrog",
"versions": [
{
"lessThan": "7.146.35",
"status": "affected",
"version": "0",
"versionType": "custom"
},
{
"lessThan": "7.161.16",
"status": "affected",
"version": "7.161.0",
"versionType": "custom"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Matthew Bryant | OpenAI"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUnder specific self-hosted Helm configurations, generated TLS private keys may be retained in rendered manifests accessible to highly privileged local users.\u003c/p\u003e"
}
],
"value": "Under specific self-hosted Helm configurations, generated TLS private keys may be retained in rendered manifests accessible to highly privileged local users."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "LOCAL",
"availabilityImpact": "HIGH",
"baseScore": 6.7,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "HIGH",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-312",
"description": "CWE-312 Cleartext Storage of Sensitive Information",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-12T15:16:39.640Z",
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"shortName": "JFROG"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/jfrog-security-advisories"
},
{
"tags": [
"vendor-advisory"
],
"url": "https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases"
}
],
"title": "Rendered Artifactory Helm manifests may contain generated TLS private keys"
}
},
"cveMetadata": {
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
"assignerShortName": "JFROG",
"cveId": "CVE-2026-66016",
"datePublished": "2026-08-12T15:16:39.640Z",
"dateReserved": "2026-07-23T19:59:51.588Z",
"dateUpdated": "2026-08-12T18:40:04.455Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}