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 CPE status
tw93 Pake Affected: 0 , ≤ 3.17.0 (semver)
guessed 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",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-96454",
      "date": "2026-09-23",
      "epss": "0.00484",
      "percentile": "0.40845"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "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"
                  }
                ]
              }
            ],
            "source": "reefs@jfrog.com"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "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."
          }
        ],
        "id": "CVE-2026-96454",
        "lastModified": "2026-09-23T19:42:02.350",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "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"
              },
              "exploitabilityScore": 2.8,
              "impactScore": 4.7,
              "source": "reefs@jfrog.com",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-96454",
                "options": [
                  {
                    "exploitation": "none"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-09-23T14:01:27.089525Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-09-23T10:17:09.070",
        "references": [
          {
            "source": "reefs@jfrog.com",
            "url": "https://github.com/tw93/Pake"
          },
          {
            "source": "reefs@jfrog.com",
            "url": "https://github.com/tw93/Pake/blob/main/src-tauri/capabilities/default.json"
          },
          {
            "source": "reefs@jfrog.com",
            "url": "https://github.com/tw93/Pake/blob/main/src-tauri/tauri.conf.json"
          },
          {
            "source": "reefs@jfrog.com",
            "url": "https://github.com/tw93/Pake/releases/tag/V3.17.0"
          },
          {
            "source": "reefs@jfrog.com",
            "url": "https://v2.tauri.app/security/capabilities/"
          }
        ],
        "sourceIdentifier": "reefs@jfrog.com",
        "vulnStatus": "Deferred",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-862"
              },
              {
                "lang": "en",
                "value": "CWE-923"
              }
            ],
            "source": "reefs@jfrog.com",
            "type": "Secondary"
          }
        ]
      }
    },
    "vulnrichment": {
      "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:30.385Z",
              "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"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…